NFS: fix directio refcount bug on commit
authorFred Isaman <iisaman@netapp.com>
Fri, 8 Jun 2012 20:48:33 +0000 (16:48 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Sat, 9 Jun 2012 18:32:45 +0000 (14:32 -0400)
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>
fs/nfs/direct.c

index b5385a7efd569b0f4c61a12545c252f980a15bb2..05099890a929e8a754385a96bf3fefd39a42006b 100644 (file)
@@ -517,9 +517,9 @@ static void nfs_direct_commit_complete(struct nfs_commit_data *data)
                nfs_list_remove_request(req);
                if (dreq->flags == NFS_ODIRECT_RESCHED_WRITES) {
                        /* Note the rewrite will go through mds */
-                       kref_get(&req->wb_kref);
                        nfs_mark_request_commit(req, NULL, &cinfo);
-               }
+               } else
+                       nfs_release_request(req);
                nfs_unlock_and_release_request(req);
        }