NFS: fix data_update accounting in NFS direct I/O path
^C against "iozone -I" is hitting the assertion in nfs_clear_inode().
Test plan:
"iozone -i0 -I -a -c" against a slow server, then control C. This should
not cause an oops.
Signed-off-by: Chuck Lever <cel@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
index 3de7c4b..737990d 100644
--- a/fs/nfs/direct.c
+++ b/fs/nfs/direct.c
@@ -219,6 +219,7 @@
} else
wake_up(&dreq->wait);
+ iput(dreq->inode);
kref_put(&dreq->kref, nfs_direct_req_release);
}
@@ -374,6 +375,7 @@
dreq->pages = pages;
dreq->npages = nr_pages;
+ igrab(inode);
dreq->inode = inode;
dreq->filp = iocb->ki_filp;
if (!is_sync_kiocb(iocb))
@@ -549,6 +551,7 @@
dreq->pages = pages;
dreq->npages = nr_pages;
+ igrab(inode);
dreq->inode = inode;
dreq->filp = iocb->ki_filp;
if (!is_sync_kiocb(iocb))