diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2018-05-14 21:42:29 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2018-05-22 14:28:03 -0400 |
commit | 11f17c9bd77baf341351d09b6881cd6ff92b5dd4 (patch) | |
tree | ce2ce5bcb7c10272842045a0c443c33a837139db /fs | |
parent | a8b75f663ee825ab9d75839482bb12198faee70d (diff) | |
download | linux-stable-11f17c9bd77baf341351d09b6881cd6ff92b5dd4.tar.gz linux-stable-11f17c9bd77baf341351d09b6881cd6ff92b5dd4.tar.bz2 linux-stable-11f17c9bd77baf341351d09b6881cd6ff92b5dd4.zip |
cifs_lookup(): switch to d_splice_alias()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/cifs/dir.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c index ecbf36c459ea..751b8c9998ca 100644 --- a/fs/cifs/dir.c +++ b/fs/cifs/dir.c @@ -779,21 +779,25 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, tlink = cifs_sb_tlink(cifs_sb); if (IS_ERR(tlink)) { free_xid(xid); - return (struct dentry *)tlink; + return ERR_CAST(tlink); } pTcon = tlink_tcon(tlink); rc = check_name(direntry, pTcon); - if (rc) - goto lookup_out; + if (unlikely(rc)) { + cifs_put_tlink(tlink); + free_xid(xid); + return ERR_PTR(rc); + } /* can not grab the rename sem here since it would deadlock in the cases (beginning of sys_rename itself) in which we already have the sb rename sem */ full_path = build_path_from_dentry(direntry); if (full_path == NULL) { - rc = -ENOMEM; - goto lookup_out; + cifs_put_tlink(tlink); + free_xid(xid); + return ERR_PTR(-ENOMEM); } if (d_really_is_positive(direntry)) { @@ -813,28 +817,24 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, } if (rc == 0) { - d_add(direntry, newInode); /* since paths are not looked up by component - the parent directories are presumed to be good here */ renew_parental_timestamps(direntry); - } else if (rc == -ENOENT) { - rc = 0; cifs_set_time(direntry, jiffies); - d_add(direntry, NULL); - /* if it was once a directory (but how can we tell?) we could do - shrink_dcache_parent(direntry); */ - } else if (rc != -EACCES) { - cifs_dbg(FYI, "Unexpected lookup error %d\n", rc); - /* We special case check for Access Denied - since that - is a common return code */ + newInode = NULL; + } else { + if (rc != -EACCES) { + cifs_dbg(FYI, "Unexpected lookup error %d\n", rc); + /* We special case check for Access Denied - since that + is a common return code */ + } + newInode = ERR_PTR(rc); } - -lookup_out: kfree(full_path); cifs_put_tlink(tlink); free_xid(xid); - return ERR_PTR(rc); + return d_splice_alias(newInode, direntry); } static int |