diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-07-27 18:03:19 -0400 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-07-27 18:20:51 -0400 |
| commit | 744d18dbfae07482ea461701b0aaec3a75ec9224 (patch) | |
| tree | 53246e5fd448ebf21d8ce9c9fa973995166d985e | |
| parent | 31c9446993f412ecb7875e30bba4bc7f216ae016 (diff) | |
NFS: Ensure we call nfs_sb_deactive() after releasing the directory inode
In order to avoid the "Busy inodes after unmount" error message, we need to
ensure that nfs_async_unlink_release() releases the super block after the
call to nfs_free_unlinkdata().
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
| -rw-r--r-- | fs/nfs/unlink.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/nfs/unlink.c b/fs/nfs/unlink.c index 3adf8b266461..f089e5839d7d 100644 --- a/fs/nfs/unlink.c +++ b/fs/nfs/unlink.c | |||
| @@ -95,10 +95,11 @@ static void nfs_async_unlink_done(struct rpc_task *task, void *calldata) | |||
| 95 | static void nfs_async_unlink_release(void *calldata) | 95 | static void nfs_async_unlink_release(void *calldata) |
| 96 | { | 96 | { |
| 97 | struct nfs_unlinkdata *data = calldata; | 97 | struct nfs_unlinkdata *data = calldata; |
| 98 | struct super_block *sb = data->dir->i_sb; | ||
| 98 | 99 | ||
| 99 | nfs_dec_sillycount(data->dir); | 100 | nfs_dec_sillycount(data->dir); |
| 100 | nfs_sb_deactive(NFS_SERVER(data->dir)); | ||
| 101 | nfs_free_unlinkdata(data); | 101 | nfs_free_unlinkdata(data); |
| 102 | nfs_sb_deactive(NFS_SB(sb)); | ||
| 102 | } | 103 | } |
| 103 | 104 | ||
| 104 | static const struct rpc_call_ops nfs_unlink_ops = { | 105 | static const struct rpc_call_ops nfs_unlink_ops = { |
