Commit 85e0df24 authored by Aneesh Kumar K.V's avatar Aneesh Kumar K.V Committed by Eric Van Hensbergen

fs/9p: Make sure we properly instantiate dentry.

For lookup if we get ENOENT error from the server we still
instantiate the dentry. We need to make sure we have dentry
operations set in that case so that a later dput on the dentry
does the expected. Without the patch we get the below error

#ln  -sf abc abclink
ln: creating symbolic link `abclink': No such file or directory

Now on the host do
$ touch abclink

Guest now gives ENOENT error.
# ls
ls: cannot access abclink: No such file or directory
Debugged-by: default avatarGautham R Shenoy <ego@in.ibm.com>
Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: default avatarEric Van Hensbergen <ericvh@gmail.com>
parent 4681dbda
...@@ -697,8 +697,8 @@ static struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry, ...@@ -697,8 +697,8 @@ static struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
if (IS_ERR(fid)) { if (IS_ERR(fid)) {
result = PTR_ERR(fid); result = PTR_ERR(fid);
if (result == -ENOENT) { if (result == -ENOENT) {
d_add(dentry, NULL); inode = NULL;
return NULL; goto inst_out;
} }
return ERR_PTR(result); return ERR_PTR(result);
...@@ -715,7 +715,8 @@ static struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry, ...@@ -715,7 +715,8 @@ static struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
if (result < 0) if (result < 0)
goto error; goto error;
if ((fid->qid.version) && (v9ses->cache)) inst_out:
if (v9ses->cache)
dentry->d_op = &v9fs_cached_dentry_operations; dentry->d_op = &v9fs_cached_dentry_operations;
else else
dentry->d_op = &v9fs_dentry_operations; dentry->d_op = &v9fs_dentry_operations;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment