Skip to content

Commit

Permalink
NFS: Don't hash the negative dentry when optimising for an O_EXCL open
Browse files Browse the repository at this point in the history
We don't want to leave an unverified hashed negative dentry if the
exclusive create fails to complete.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
  • Loading branch information
Trond Myklebust authored and Trond Myklebust committed Oct 9, 2007
1 parent 5724ab3 commit d4d9cdc
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 3 deletions.
5 changes: 3 additions & 2 deletions fs/nfs/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -992,9 +992,10 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry
}
dentry->d_op = NFS_PROTO(dir)->dentry_ops;

/* Let vfs_create() deal with O_EXCL */
/* Let vfs_create() deal with O_EXCL. Instantiate, but don't hash
* the dentry. */
if (nd->intent.open.flags & O_EXCL) {
d_add(dentry, NULL);
d_instantiate(dentry, NULL);
goto out;
}

Expand Down
3 changes: 2 additions & 1 deletion fs/nfs/nfs4proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1879,11 +1879,12 @@ nfs4_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr,
}
state = nfs4_do_open(dir, &path, flags, sattr, cred);
put_rpccred(cred);
d_drop(dentry);
if (IS_ERR(state)) {
status = PTR_ERR(state);
goto out;
}
d_instantiate(dentry, igrab(state->inode));
d_add(dentry, igrab(state->inode));
if (flags & O_EXCL) {
struct nfs_fattr fattr;
status = nfs4_do_setattr(state->inode, &fattr, sattr, state);
Expand Down

0 comments on commit d4d9cdc

Please sign in to comment.