aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLatchesar Ionkov <lucho@ionkov.net>2006-01-08 04:04:59 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-01-08 23:14:05 -0500
commitd8da097afb765654c866062148fd98b11db9003e (patch)
tree35dc36ed893bceb63168eba245791b6d0a850698
parent3cf6429a26da5c4d7b795e6d0f8f56ed2e4fdfc0 (diff)
[PATCH] v9fs: fix fid management in v9fs_create
v9fs_create doesn't manage correctly the fids when it is called to create a directory.. The fid created by the create 9P call (newfid) and the one created by walking to already created file (wfidno) are not used consistently. This patch cleans up the usage of newfid and wfidno. Signed-off-by: Latchesar Ionkov <lucho@ionkov.net> Cc: Eric Van Hensbergen <ericvh@ericvh.myip.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--fs/9p/vfs_inode.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
index 466002a1fe32..f11edde6432e 100644
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -385,13 +385,14 @@ v9fs_create(struct inode *dir,
385 fid->iounit = iounit; 385 fid->iounit = iounit;
386 } else { 386 } else {
387 err = v9fs_t_clunk(v9ses, newfid); 387 err = v9fs_t_clunk(v9ses, newfid);
388 newfid = -1;
388 if (err < 0) 389 if (err < 0)
389 dprintk(DEBUG_ERROR, "clunk for mkdir failed: %d\n", err); 390 dprintk(DEBUG_ERROR, "clunk for mkdir failed: %d\n", err);
390 } 391 }
391 392
392 /* walk to the newly created file and put the fid in the dentry */ 393 /* walk to the newly created file and put the fid in the dentry */
393 wfidno = v9fs_get_idpool(&v9ses->fidpool); 394 wfidno = v9fs_get_idpool(&v9ses->fidpool);
394 if (newfid < 0) { 395 if (wfidno < 0) {
395 eprintk(KERN_WARNING, "no free fids available\n"); 396 eprintk(KERN_WARNING, "no free fids available\n");
396 return -ENOSPC; 397 return -ENOSPC;
397 } 398 }
@@ -408,7 +409,6 @@ v9fs_create(struct inode *dir,
408 fcall = NULL; 409 fcall = NULL;
409 410
410 if (!v9fs_fid_create(file_dentry, v9ses, wfidno, 0)) { 411 if (!v9fs_fid_create(file_dentry, v9ses, wfidno, 0)) {
411 v9fs_t_clunk(v9ses, newfid);
412 v9fs_put_idpool(wfidno, &v9ses->fidpool); 412 v9fs_put_idpool(wfidno, &v9ses->fidpool);
413 413
414 goto CleanUpFid; 414 goto CleanUpFid;
@@ -419,7 +419,7 @@ v9fs_create(struct inode *dir,
419 (perm & V9FS_DMDEVICE)) 419 (perm & V9FS_DMDEVICE))
420 return 0; 420 return 0;
421 421
422 result = v9fs_t_stat(v9ses, newfid, &fcall); 422 result = v9fs_t_stat(v9ses, wfidno, &fcall);
423 if (result < 0) { 423 if (result < 0) {
424 dprintk(DEBUG_ERROR, "stat error: %s(%d)\n", FCALL_ERROR(fcall), 424 dprintk(DEBUG_ERROR, "stat error: %s(%d)\n", FCALL_ERROR(fcall),
425 result); 425 result);