aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2007-10-23 17:09:13 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-23 19:41:21 -0400
commit432409eebcdec38ff6fa949f097b5438d588faa5 (patch)
tree4418076abd99c105dd0ea68e9d33c2dd2333b6c0
parenta7aed1c2dc4939d1d61285c738ad32700d791692 (diff)
NFS: Fix for bug in handling of errors for O_DIRECT writes
Commit eda3cef8dd2b83875affe82595db9d0c278879b2 ("NFS: Fix error handling in nfs_direct_write_result()") ensured that if a WRITE returns an error, then data->res.verf->committed is not tested (as it is not initialised). Then commit 60fa3f769f7651a60125a0f44e3ffe3246d7cf39 ("NFS: Fix two bugs in the O_DIRECT write code") inadvertently reverted this while fixing other problems. So move the test so that we never examine ->committed in an error case, and fix a speeling error while we are there. Cc: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de> Acked-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--fs/nfs/direct.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
index 32fe97211eea..afcab007a22b 100644
--- a/fs/nfs/direct.c
+++ b/fs/nfs/direct.c
@@ -549,13 +549,13 @@ static void nfs_direct_write_result(struct rpc_task *task, void *calldata)
549 549
550 spin_lock(&dreq->lock); 550 spin_lock(&dreq->lock);
551 551
552 if (unlikely(dreq->error != 0))
553 goto out_unlock;
554 if (unlikely(status < 0)) { 552 if (unlikely(status < 0)) {
555 /* An error has occured, so we should not commit */ 553 /* An error has occurred, so we should not commit */
556 dreq->flags = 0; 554 dreq->flags = 0;
557 dreq->error = status; 555 dreq->error = status;
558 } 556 }
557 if (unlikely(dreq->error != 0))
558 goto out_unlock;
559 559
560 dreq->count += data->res.count; 560 dreq->count += data->res.count;
561 561