aboutsummaryrefslogtreecommitdiffstats
path: root/fs/9p/fid.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-04-05 16:42:54 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-04-05 16:42:54 -0400
commit749d229761ff0135cc4e16b8a28b41ae2f6b2c35 (patch)
tree25551c8cfb38319211f5ee59e78462a0f6fb85c4 /fs/9p/fid.c
parent795d580baec0d5386b83a8b557df47c20810e86b (diff)
parent3dc9fef67f6292692dba181a6d0fd0211bd0a607 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs: 9p: saving negative to unsigned char 9p: return on mutex_lock_interruptible() 9p: Creating files with names too long should fail with ENAMETOOLONG. 9p: Make sure we are able to clunk the cached fid on umount 9p: drop nlink remove fs/9p: Clunk the fid resulting from partial walk of the name 9p: documentation update 9p: Fix setting of protocol flags in v9fs_session_info structure.
Diffstat (limited to 'fs/9p/fid.c')
-rw-r--r--fs/9p/fid.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/9p/fid.c b/fs/9p/fid.c
index 82ee460e534d..7317b39b2815 100644
--- a/fs/9p/fid.c
+++ b/fs/9p/fid.c
@@ -111,7 +111,7 @@ struct p9_fid *v9fs_fid_lookup(struct dentry *dentry)
111{ 111{
112 int i, n, l, clone, any, access; 112 int i, n, l, clone, any, access;
113 u32 uid; 113 u32 uid;
114 struct p9_fid *fid; 114 struct p9_fid *fid, *old_fid = NULL;
115 struct dentry *d, *ds; 115 struct dentry *d, *ds;
116 struct v9fs_session_info *v9ses; 116 struct v9fs_session_info *v9ses;
117 char **wnames, *uname; 117 char **wnames, *uname;
@@ -184,10 +184,18 @@ struct p9_fid *v9fs_fid_lookup(struct dentry *dentry)
184 l = min(n - i, P9_MAXWELEM); 184 l = min(n - i, P9_MAXWELEM);
185 fid = p9_client_walk(fid, l, &wnames[i], clone); 185 fid = p9_client_walk(fid, l, &wnames[i], clone);
186 if (IS_ERR(fid)) { 186 if (IS_ERR(fid)) {
187 if (old_fid) {
188 /*
189 * If we fail, clunk fid which are mapping
190 * to path component and not the last component
191 * of the path.
192 */
193 p9_client_clunk(old_fid);
194 }
187 kfree(wnames); 195 kfree(wnames);
188 return fid; 196 return fid;
189 } 197 }
190 198 old_fid = fid;
191 i += l; 199 i += l;
192 clone = 0; 200 clone = 0;
193 } 201 }