diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2011-03-25 14:15:11 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2011-03-27 17:48:07 +0200 |
commit | 4d65c520fb4abed970069d18c119cfe85624f46d (patch) | |
tree | 74671eb263380317f1e4a958a6a7f73749e98eec /include | |
parent | 16c29dafcc86024048f1dbb8349d31cb22c7c55a (diff) | |
download | linux-4d65c520fb4abed970069d18c119cfe85624f46d.tar.gz linux-4d65c520fb4abed970069d18c119cfe85624f46d.tar.bz2 linux-4d65c520fb4abed970069d18c119cfe85624f46d.zip |
NFS: Fix a hang in the writeback path
Now that the inode scalability patches have been merged, it is no longer
safe to call igrab() under the inode->i_lock.
Now that we no longer call nfs_clear_request() until the nfs_page is
being freed, we know that we are always holding a reference to the
nfs_open_context, which again holds a reference to the path, and so
the inode cannot be freed until the last nfs_page has been removed
from the radix tree and freed.
We can therefore skip the igrab()/iput() altogether.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/nfs_page.h | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h index 8023e4e25133..91af2e49fa3a 100644 --- a/include/linux/nfs_page.h +++ b/include/linux/nfs_page.h @@ -78,7 +78,6 @@ extern struct nfs_page *nfs_create_request(struct nfs_open_context *ctx, struct page *page, unsigned int offset, unsigned int count); -extern void nfs_clear_request(struct nfs_page *req); extern void nfs_release_request(struct nfs_page *req); |