diff options
author | Steve Dickson <SteveD@redhat.com> | 2007-11-08 10:05:04 +0100 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-01-30 08:05:24 +0100 |
commit | ef818a28fac9bd214e676986d8301db0582b92a9 (patch) | |
tree | b1825d1ecdfa6b35951a61f6bc54363236c12cd0 /fs/nfs/unlink.c | |
parent | NFSv4: Clean up the OPEN/CLOSE serialisation code (diff) | |
download | linux-ef818a28fac9bd214e676986d8301db0582b92a9.tar.xz linux-ef818a28fac9bd214e676986d8301db0582b92a9.zip |
NFS: Stop sillyname renames and unmounts from racing
Added an active/deactive mechanism to the nfs_server structure
allowing async operations to hold off umount until the
operations are done.
Signed-off-by: Steve Dickson <steved@redhat.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/unlink.c')
-rw-r--r-- | fs/nfs/unlink.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/nfs/unlink.c b/fs/nfs/unlink.c index 431981d0265f..8e5428e0b86f 100644 --- a/fs/nfs/unlink.c +++ b/fs/nfs/unlink.c @@ -14,6 +14,8 @@ #include <linux/sched.h> #include <linux/wait.h> +#include "internal.h" + struct nfs_unlinkdata { struct hlist_node list; struct nfs_removeargs args; @@ -113,6 +115,7 @@ static void nfs_async_unlink_release(void *calldata) struct nfs_unlinkdata *data = calldata; nfs_dec_sillycount(data->dir); + nfs_sb_deactive(NFS_SERVER(data->dir)); nfs_free_unlinkdata(data); } @@ -153,6 +156,7 @@ static int nfs_do_call_unlink(struct dentry *parent, struct inode *dir, struct n nfs_dec_sillycount(dir); return 0; } + nfs_sb_active(NFS_SERVER(dir)); data->args.fh = NFS_FH(dir); nfs_fattr_init(&data->res.dir_attr); |