mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 06:12:08 +00:00
Use the right predicate in ->atomic_open() instances
->atomic_open() can be given an in-lookup dentry *or* a negative one found in dcache. Use d_in_lookup() to tell one from another, rather than d_unhashed(). Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
a99cde438d
commit
00699ad857
@ -853,7 +853,7 @@ v9fs_vfs_atomic_open(struct inode *dir, struct dentry *dentry,
|
||||
struct p9_fid *fid, *inode_fid;
|
||||
struct dentry *res = NULL;
|
||||
|
||||
if (d_unhashed(dentry)) {
|
||||
if (d_in_lookup(dentry)) {
|
||||
res = v9fs_vfs_lookup(dir, dentry, 0);
|
||||
if (IS_ERR(res))
|
||||
return PTR_ERR(res);
|
||||
|
@ -254,7 +254,7 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry,
|
||||
struct posix_acl *pacl = NULL, *dacl = NULL;
|
||||
struct dentry *res = NULL;
|
||||
|
||||
if (d_unhashed(dentry)) {
|
||||
if (d_in_lookup(dentry)) {
|
||||
res = v9fs_vfs_lookup(dir, dentry, 0);
|
||||
if (IS_ERR(res))
|
||||
return PTR_ERR(res);
|
||||
|
@ -394,7 +394,7 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
|
||||
if ((flags & O_CREAT) && !req->r_reply_info.head->is_dentry)
|
||||
err = ceph_handle_notrace_create(dir, dentry);
|
||||
|
||||
if (d_unhashed(dentry)) {
|
||||
if (d_in_lookup(dentry)) {
|
||||
dn = ceph_finish_lookup(req, dentry, err);
|
||||
if (IS_ERR(dn))
|
||||
err = PTR_ERR(dn);
|
||||
|
@ -445,7 +445,7 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry,
|
||||
* Check for hashed negative dentry. We have already revalidated
|
||||
* the dentry and it is fine. No need to perform another lookup.
|
||||
*/
|
||||
if (!d_unhashed(direntry))
|
||||
if (!d_in_lookup(direntry))
|
||||
return -ENOENT;
|
||||
|
||||
res = cifs_lookup(inode, direntry, 0);
|
||||
|
@ -480,7 +480,7 @@ static int fuse_atomic_open(struct inode *dir, struct dentry *entry,
|
||||
struct fuse_conn *fc = get_fuse_conn(dir);
|
||||
struct dentry *res = NULL;
|
||||
|
||||
if (d_unhashed(entry)) {
|
||||
if (d_in_lookup(entry)) {
|
||||
res = fuse_lookup(dir, entry, 0);
|
||||
if (IS_ERR(res))
|
||||
return PTR_ERR(res);
|
||||
|
@ -1189,7 +1189,7 @@ static int gfs2_atomic_open(struct inode *dir, struct dentry *dentry,
|
||||
struct dentry *d;
|
||||
bool excl = !!(flags & O_EXCL);
|
||||
|
||||
if (!d_unhashed(dentry))
|
||||
if (!d_in_lookup(dentry))
|
||||
goto skip_lookup;
|
||||
|
||||
d = __gfs2_lookup(dir, dentry, file, opened);
|
||||
|
@ -1504,7 +1504,7 @@ int nfs_atomic_open(struct inode *dir, struct dentry *dentry,
|
||||
|
||||
/* NFS only supports OPEN on regular files */
|
||||
if ((open_flags & O_DIRECTORY)) {
|
||||
if (!d_unhashed(dentry)) {
|
||||
if (!d_in_lookup(dentry)) {
|
||||
/*
|
||||
* Hashed negative dentry with O_DIRECTORY: dentry was
|
||||
* revalidated and is fine, no need to perform lookup
|
||||
|
Loading…
Reference in New Issue
Block a user