OSDN Git Service

hfs: use d_splice_alias()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 30 Apr 2018 23:51:43 +0000 (19:51 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 22 May 2018 18:27:59 +0000 (14:27 -0400)
code is simpler that way

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/hfs/dir.c
fs/hfs/inode.c

index 75b2542..3bf2ae0 100644 (file)
@@ -31,21 +31,15 @@ static struct dentry *hfs_lookup(struct inode *dir, struct dentry *dentry,
        hfs_cat_build_key(dir->i_sb, fd.search_key, dir->i_ino, &dentry->d_name);
        res = hfs_brec_read(&fd, &rec, sizeof(rec));
        if (res) {
-               hfs_find_exit(&fd);
-               if (res == -ENOENT) {
-                       /* No such entry */
-                       inode = NULL;
-                       goto done;
-               }
-               return ERR_PTR(res);
+               if (res != -ENOENT)
+                       inode = ERR_PTR(res);
+       } else {
+               inode = hfs_iget(dir->i_sb, &fd.search_key->cat, &rec);
+               if (!inode)
+                       inode = ERR_PTR(-EACCES);
        }
-       inode = hfs_iget(dir->i_sb, &fd.search_key->cat, &rec);
        hfs_find_exit(&fd);
-       if (!inode)
-               return ERR_PTR(-EACCES);
-done:
-       d_add(dentry, inode);
-       return NULL;
+       return d_splice_alias(inode, dentry);
 }
 
 /*
index 2538b49..0612fa3 100644 (file)
@@ -544,8 +544,7 @@ static struct dentry *hfs_file_lookup(struct inode *dir, struct dentry *dentry,
        hlist_add_fake(&inode->i_hash);
        mark_inode_dirty(inode);
 out:
-       d_add(dentry, inode);
-       return NULL;
+       return d_splice_alias(inode, dentry);
 }
 
 void hfs_evict_inode(struct inode *inode)