|
@@ -788,7 +788,6 @@ struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
|
|
|
struct p9_fid *dfid, *fid;
|
|
|
struct inode *inode;
|
|
|
char *name;
|
|
|
- int result = 0;
|
|
|
|
|
|
p9_debug(P9_DEBUG_VFS, "dir: %p dentry: (%s) %p flags: %x\n",
|
|
|
dir, dentry->d_name.name, dentry, flags);
|
|
@@ -806,13 +805,11 @@ struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
|
|
|
name = (char *) dentry->d_name.name;
|
|
|
fid = p9_client_walk(dfid, 1, &name, 1);
|
|
|
if (IS_ERR(fid)) {
|
|
|
- result = PTR_ERR(fid);
|
|
|
- if (result == -ENOENT) {
|
|
|
- inode = NULL;
|
|
|
- goto inst_out;
|
|
|
+ if (fid == ERR_PTR(-ENOENT)) {
|
|
|
+ d_add(dentry, NULL);
|
|
|
+ return NULL;
|
|
|
}
|
|
|
-
|
|
|
- return ERR_PTR(result);
|
|
|
+ return ERR_CAST(fid);
|
|
|
}
|
|
|
/*
|
|
|
* Make sure we don't use a wrong inode due to parallel
|
|
@@ -824,12 +821,10 @@ struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
|
|
|
else
|
|
|
inode = v9fs_get_new_inode_from_fid(v9ses, fid, dir->i_sb);
|
|
|
if (IS_ERR(inode)) {
|
|
|
- result = PTR_ERR(inode);
|
|
|
- inode = NULL;
|
|
|
- goto error;
|
|
|
+ p9_client_clunk(fid);
|
|
|
+ return ERR_CAST(inode);
|
|
|
}
|
|
|
v9fs_fid_add(dentry, fid);
|
|
|
-inst_out:
|
|
|
/*
|
|
|
* If we had a rename on the server and a parallel lookup
|
|
|
* for the new name, then make sure we instantiate with
|
|
@@ -838,13 +833,9 @@ inst_out:
|
|
|
* k/b.
|
|
|
*/
|
|
|
res = d_materialise_unique(dentry, inode);
|
|
|
- if (!IS_ERR(res))
|
|
|
- return res;
|
|
|
- result = PTR_ERR(res);
|
|
|
-error:
|
|
|
- p9_client_clunk(fid);
|
|
|
-
|
|
|
- return ERR_PTR(result);
|
|
|
+ if (IS_ERR(res))
|
|
|
+ p9_client_clunk(fid);
|
|
|
+ return res;
|
|
|
}
|
|
|
|
|
|
static int
|