Loading fs/cifs/dir.c +18 −18 Original line number Diff line number Diff line Loading @@ -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)) { Loading @@ -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) { 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 */ } lookup_out: newInode = ERR_PTR(rc); } kfree(full_path); cifs_put_tlink(tlink); free_xid(xid); return ERR_PTR(rc); return d_splice_alias(newInode, direntry); } static int Loading Loading
fs/cifs/dir.c +18 −18 Original line number Diff line number Diff line Loading @@ -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)) { Loading @@ -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) { 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 */ } lookup_out: newInode = ERR_PTR(rc); } kfree(full_path); cifs_put_tlink(tlink); free_xid(xid); return ERR_PTR(rc); return d_splice_alias(newInode, direntry); } static int Loading