Skip to content

Commit

Permalink
[PATCH] v9fs: fix fid management in v9fs_create
Browse files Browse the repository at this point in the history
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 <[email protected]>
Cc: Eric Van Hensbergen <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
lionkov authored and Linus Torvalds committed Jan 9, 2006
1 parent 3cf6429 commit d8da097
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions fs/9p/vfs_inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -385,13 +385,14 @@ v9fs_create(struct inode *dir,
fid->iounit = iounit;
} else {
err = v9fs_t_clunk(v9ses, newfid);
newfid = -1;
if (err < 0)
dprintk(DEBUG_ERROR, "clunk for mkdir failed: %d\n", err);
}

/* walk to the newly created file and put the fid in the dentry */
wfidno = v9fs_get_idpool(&v9ses->fidpool);
if (newfid < 0) {
if (wfidno < 0) {
eprintk(KERN_WARNING, "no free fids available\n");
return -ENOSPC;
}
Expand All @@ -408,7 +409,6 @@ v9fs_create(struct inode *dir,
fcall = NULL;

if (!v9fs_fid_create(file_dentry, v9ses, wfidno, 0)) {
v9fs_t_clunk(v9ses, newfid);
v9fs_put_idpool(wfidno, &v9ses->fidpool);

goto CleanUpFid;
Expand All @@ -419,7 +419,7 @@ v9fs_create(struct inode *dir,
(perm & V9FS_DMDEVICE))
return 0;

result = v9fs_t_stat(v9ses, newfid, &fcall);
result = v9fs_t_stat(v9ses, wfidno, &fcall);
if (result < 0) {
dprintk(DEBUG_ERROR, "stat error: %s(%d)\n", FCALL_ERROR(fcall),
result);
Expand Down

0 comments on commit d8da097

Please sign in to comment.