aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/direct.c
diff options
context:
space:
mode:
authorFred Isaman <iisaman@netapp.com>2012-06-08 16:48:33 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-06-09 14:32:45 -0400
commit906369e43c29001c39c7dfed8a01b9dff24ace75 (patch)
tree5b5323abf891a08907492a050909caaebbae0e89 /fs/nfs/direct.c
parent2d0dbc6ae8a5194aaecb9cfffb9053f38fce8b86 (diff)
NFS: fix directio refcount bug on commit
This reverts a hunk from commit 04277086577 "NFS: Clean up - Simplify reference counting in fs/nfs/direct.c" The cleanups in that patch affect the write path, but by the time processing hits commit the removed reference has been added back by nfs_scan_commit_list(). Without this reversion, any page that is sent to commit holds on to an unbalanced reference that is never freed. The immediate effect is an imbalance over the wire between OPENs and CLOSEs. Signed-off-by: Fred Isaman <iisaman@netapp.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/direct.c')
-rw-r--r--fs/nfs/direct.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
index b5385a7efd56..05099890a929 100644
--- a/fs/nfs/direct.c
+++ b/fs/nfs/direct.c
@@ -517,9 +517,9 @@ static void nfs_direct_commit_complete(struct nfs_commit_data *data)
517 nfs_list_remove_request(req); 517 nfs_list_remove_request(req);
518 if (dreq->flags == NFS_ODIRECT_RESCHED_WRITES) { 518 if (dreq->flags == NFS_ODIRECT_RESCHED_WRITES) {
519 /* Note the rewrite will go through mds */ 519 /* Note the rewrite will go through mds */
520 kref_get(&req->wb_kref);
521 nfs_mark_request_commit(req, NULL, &cinfo); 520 nfs_mark_request_commit(req, NULL, &cinfo);
522 } 521 } else
522 nfs_release_request(req);
523 nfs_unlock_and_release_request(req); 523 nfs_unlock_and_release_request(req);
524 } 524 }
525 525