diff options
author | Michael I. Bushnell <mib@gnu.org> | 1995-09-13 16:30:20 +0000 |
---|---|---|
committer | Michael I. Bushnell <mib@gnu.org> | 1995-09-13 16:30:20 +0000 |
commit | b6d7707a397cec1abccdf558ba180112cd04a149 (patch) | |
tree | af96dd492206e64d67d72d2cd8fd60d7f2e66192 | |
parent | 42311cc0dcaba1f42d7f1c0a0fd242eaf9ddeb2d (diff) |
(diskfs_lookup): Don't attempt to lock NP if NPP is not set. Don't
even set NP if NPP is not set; use INUM as "lookup succeeded flag"
instead. Lookups for REMOVE now *must* set NPP.
-rw-r--r-- | ufs/dir.c | 18 |
1 files changed, 11 insertions, 7 deletions
@@ -100,6 +100,9 @@ diskfs_lookup (struct node *dp, char *name, enum lookup_type type, int blockaddr; int idx; + if (type == REMOVE) + assert (npp); + if (npp) *npp = 0; @@ -166,7 +169,7 @@ diskfs_lookup (struct node *dp, char *name, enum lookup_type type, think about that as an error yet. */ err = 0; - if (inum) + if (inum && npp) { if (namelen != 2 || name[0] != '.' || name[1] != '.') { @@ -242,15 +245,15 @@ diskfs_lookup (struct node *dp, char *name, enum lookup_type type, /* If we will be modifying the directory, make sure it's allowed. */ if (type == RENAME - || (type == REMOVE && np) - || (type == CREATE && !np)) + || (type == REMOVE && inum) + || (type == CREATE && !inum)) { err = diskfs_checkdirmod (dp, np, cred); if (err) goto out; } - if ((type == CREATE || type == RENAME) && !np && ds && ds->stat == LOOKING) + if ((type == CREATE || type == RENAME) && !inum && ds && ds->stat == LOOKING) { /* We didn't find any room, so mark ds to extend the dir */ ds->type = CREATE; @@ -274,7 +277,8 @@ diskfs_lookup (struct node *dp, char *name, enum lookup_type type, if (np) { - if (err || !npp) + assert (npp); + if (err) { if (!spec_dotdot) { @@ -292,11 +296,11 @@ diskfs_lookup (struct node *dp, char *name, enum lookup_type type, /* We did iget */ diskfs_nput (np); } - else if (npp) + else *npp = np; } - return err ? : np ? 0 : ENOENT; + return err ? : inum ? 0 : ENOENT; } /* Scan block at address BLKADDR (of node DP; block index IDX), for |