diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2008-08-05 03:00:49 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2008-10-23 05:12:56 -0400 |
commit | 3516586a424ea5727be089da6541cbd5644f0497 (patch) | |
tree | cb55c6262e066c393917735021aa2bd801f6dd16 /fs/nfs | |
parent | 2c552d81363e0dac66d478046cc8a3948a67eae9 (diff) | |
download | linux-3516586a424ea5727be089da6541cbd5644f0497.tar.gz linux-3516586a424ea5727be089da6541cbd5644f0497.tar.bz2 linux-3516586a424ea5727be089da6541cbd5644f0497.zip |
[PATCH] make O_EXCL in nd->intent.flags visible in nd->flags
New flag: LOOKUP_EXCL. Set before doing the final step of pathname
resolution on the paths that have LOOKUP_CREATE and O_EXCL.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/dir.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index efdba2e802d7..c216c8786c51 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -707,9 +707,7 @@ static int nfs_is_exclusive_create(struct inode *dir, struct nameidata *nd) { if (NFS_PROTO(dir)->version == 2) return 0; - if (nd == NULL || nfs_lookup_check_intent(nd, LOOKUP_CREATE) == 0) - return 0; - return (nd->intent.open.flags & O_EXCL) != 0; + return nd && nfs_lookup_check_intent(nd, LOOKUP_EXCL); } /* @@ -1009,7 +1007,7 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry /* Let vfs_create() deal with O_EXCL. Instantiate, but don't hash * the dentry. */ - if (nd->intent.open.flags & O_EXCL) { + if (nd->flags & LOOKUP_EXCL) { d_instantiate(dentry, NULL); goto out; } |