Skip to content

Commit

Permalink
fs/9p: Always ask new inode in lookup for cache mode disabled
Browse files Browse the repository at this point in the history
This make sure we don't end up reusing the unlinked inode object.
The ideal way is to use inode i_generation. But i_generation is
not available in userspace always.

Signed-off-by: Aneesh Kumar K.V <[email protected]>
  • Loading branch information
kvaneesh authored and ericvh committed Sep 6, 2011
1 parent f88657c commit 73f5071
Showing 1 changed file with 21 additions and 7 deletions.
28 changes: 21 additions & 7 deletions fs/9p/vfs_inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -825,6 +825,7 @@ static int v9fs_vfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
struct nameidata *nameidata)
{
struct dentry *res;
struct super_block *sb;
struct v9fs_session_info *v9ses;
struct p9_fid *dfid, *fid;
Expand Down Expand Up @@ -856,22 +857,35 @@ struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,

return ERR_PTR(result);
}

inode = v9fs_get_inode_from_fid(v9ses, fid, dir->i_sb);
/*
* Make sure we don't use a wrong inode due to parallel
* unlink. For cached mode create calls request for new
* inode. But with cache disabled, lookup should do this.
*/
if (v9ses->cache)
inode = v9fs_get_inode_from_fid(v9ses, fid, dir->i_sb);
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;
}

result = v9fs_fid_add(dentry, fid);
if (result < 0)
goto error_iput;

inst_out:
d_add(dentry, inode);
return NULL;

/*
* If we had a rename on the server and a parallel lookup
* for the new name, then make sure we instantiate with
* the new name. ie look up for a/b, while on server somebody
* moved b under k and client parallely did a lookup for
* k/b.
*/
res = d_materialise_unique(dentry, inode);
if (!IS_ERR(res))
return res;
result = PTR_ERR(res);
error_iput:
iput(inode);
error:
Expand Down

0 comments on commit 73f5071

Please sign in to comment.