diff options
author | David Howells <dhowells@redhat.com> | 2007-04-26 18:59:35 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-04-26 18:59:35 -0400 |
commit | 260a980317dac80182dd76140cf67c6e81d6d3dd (patch) | |
tree | 84f3e919fd33be56aad4fc57f5cb844df1a6b952 /fs/afs/volume.c | |
parent | c35eccb1f614954b10cba3f74b7c301993b2f42e (diff) |
[AFS]: Add "directory write" support.
Add support for the create, link, symlink, unlink, mkdir, rmdir and
rename VFS operations to the in-kernel AFS filesystem.
Also:
(1) Fix dentry and inode revalidation. d_revalidate should only look at
state of the dentry. Revalidation of the contents of an inode pointed to
by a dentry is now separate.
(2) Fix afs_lookup() to hash negative dentries as well as positive ones.
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'fs/afs/volume.c')
-rw-r--r-- | fs/afs/volume.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/afs/volume.c b/fs/afs/volume.c index 15e13678c216..dd160cada45d 100644 --- a/fs/afs/volume.c +++ b/fs/afs/volume.c | |||
@@ -295,6 +295,7 @@ struct afs_server *afs_volume_pick_fileserver(struct afs_vnode *vnode) | |||
295 | * - releases the ref on the server struct that was acquired by picking | 295 | * - releases the ref on the server struct that was acquired by picking |
296 | * - records result of using a particular server to access a volume | 296 | * - records result of using a particular server to access a volume |
297 | * - return 0 to try again, 1 if okay or to issue error | 297 | * - return 0 to try again, 1 if okay or to issue error |
298 | * - the caller must release the server struct if result was 0 | ||
298 | */ | 299 | */ |
299 | int afs_volume_release_fileserver(struct afs_vnode *vnode, | 300 | int afs_volume_release_fileserver(struct afs_vnode *vnode, |
300 | struct afs_server *server, | 301 | struct afs_server *server, |
@@ -312,7 +313,8 @@ int afs_volume_release_fileserver(struct afs_vnode *vnode, | |||
312 | case 0: | 313 | case 0: |
313 | server->fs_act_jif = jiffies; | 314 | server->fs_act_jif = jiffies; |
314 | server->fs_state = 0; | 315 | server->fs_state = 0; |
315 | break; | 316 | _leave(""); |
317 | return 1; | ||
316 | 318 | ||
317 | /* the fileserver denied all knowledge of the volume */ | 319 | /* the fileserver denied all knowledge of the volume */ |
318 | case -ENOMEDIUM: | 320 | case -ENOMEDIUM: |
@@ -377,14 +379,12 @@ int afs_volume_release_fileserver(struct afs_vnode *vnode, | |||
377 | server->fs_act_jif = jiffies; | 379 | server->fs_act_jif = jiffies; |
378 | case -ENOMEM: | 380 | case -ENOMEM: |
379 | case -ENONET: | 381 | case -ENONET: |
380 | break; | 382 | /* tell the caller to accept the result */ |
383 | afs_put_server(server); | ||
384 | _leave(" [local failure]"); | ||
385 | return 1; | ||
381 | } | 386 | } |
382 | 387 | ||
383 | /* tell the caller to accept the result */ | ||
384 | afs_put_server(server); | ||
385 | _leave(""); | ||
386 | return 1; | ||
387 | |||
388 | /* tell the caller to loop around and try the next server */ | 388 | /* tell the caller to loop around and try the next server */ |
389 | try_next_server_upw: | 389 | try_next_server_upw: |
390 | up_write(&volume->server_sem); | 390 | up_write(&volume->server_sem); |