fs/9p: Clunk the fid resulting from partial walk of the name
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
This commit is contained in:
Родитель
9208d24253
Коммит
5b0fa207d1
12
fs/9p/fid.c
12
fs/9p/fid.c
|
@ -110,7 +110,7 @@ struct p9_fid *v9fs_fid_lookup(struct dentry *dentry)
|
|||
{
|
||||
int i, n, l, clone, any, access;
|
||||
u32 uid;
|
||||
struct p9_fid *fid;
|
||||
struct p9_fid *fid, *old_fid = NULL;
|
||||
struct dentry *d, *ds;
|
||||
struct v9fs_session_info *v9ses;
|
||||
char **wnames, *uname;
|
||||
|
@ -183,10 +183,18 @@ struct p9_fid *v9fs_fid_lookup(struct dentry *dentry)
|
|||
l = min(n - i, P9_MAXWELEM);
|
||||
fid = p9_client_walk(fid, l, &wnames[i], clone);
|
||||
if (IS_ERR(fid)) {
|
||||
if (old_fid) {
|
||||
/*
|
||||
* If we fail, clunk fid which are mapping
|
||||
* to path component and not the last component
|
||||
* of the path.
|
||||
*/
|
||||
p9_client_clunk(old_fid);
|
||||
}
|
||||
kfree(wnames);
|
||||
return fid;
|
||||
}
|
||||
|
||||
old_fid = fid;
|
||||
i += l;
|
||||
clone = 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче