ncp_lookup(): use d_splice_alias()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 14 May 2018 01:11:26 +0000 (21:11 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 22 May 2018 18:28:01 +0000 (14:28 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/staging/ncpfs/dir.c

index 0c57c5c5d40a1ce21c6537162d21ed0ad9b9867a..072bcb12898f388ba48e1379f9f7c9c80fc6b91e 100644 (file)
@@ -823,12 +823,11 @@ static struct dentry *ncp_lookup(struct inode *dir, struct dentry *dentry, unsig
        struct ncp_server *server = NCP_SERVER(dir);
        struct inode *inode = NULL;
        struct ncp_entry_info finfo;
-       int error, res, len;
+       int res, len;
        __u8 __name[NCP_MAXPATHLEN + 1];
 
-       error = -EIO;
        if (!ncp_conn_valid(server))
-               goto finished;
+               return ERR_PTR(-EIO);
 
        ncp_vdbg("server lookup for %pd2\n", dentry);
 
@@ -847,31 +846,20 @@ static struct dentry *ncp_lookup(struct inode *dir, struct dentry *dentry, unsig
                        res = ncp_obtain_info(server, dir, __name, &(finfo.i));
        }
        ncp_vdbg("looked for %pd2, res=%d\n", dentry, res);
-       /*
-        * If we didn't find an entry, make a negative dentry.
-        */
-       if (res)
-               goto add_entry;
-
-       /*
-        * Create an inode for the entry.
-        */
-       finfo.opened = 0;
-       finfo.ino = iunique(dir->i_sb, 2);
-       finfo.volume = finfo.i.volNumber;
-       error = -EACCES;
-       inode = ncp_iget(dir->i_sb, &finfo);
-
-       if (inode) {
-               ncp_new_dentry(dentry);
-add_entry:
-               d_add(dentry, inode);
-               error = 0;
+       if (!res) {
+               /*
+                * Entry found; create an inode for it.
+                */
+               finfo.opened = 0;
+               finfo.ino = iunique(dir->i_sb, 2);
+               finfo.volume = finfo.i.volNumber;
+               inode = ncp_iget(dir->i_sb, &finfo);
+               if (unlikely(!inode))
+                       inode = ERR_PTR(-EACCES);
+               else
+                       ncp_new_dentry(dentry);
        }
-
-finished:
-       ncp_vdbg("result=%d\n", error);
-       return ERR_PTR(error);
+       return d_splice_alias(inode, dentry);
 }
 
 /*