diff options
author | Neil Brown <neilb@suse.de> | 2007-10-23 17:09:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-23 19:41:21 -0400 |
commit | 432409eebcdec38ff6fa949f097b5438d588faa5 (patch) | |
tree | 4418076abd99c105dd0ea68e9d33c2dd2333b6c0 /fs/nfs | |
parent | a7aed1c2dc4939d1d61285c738ad32700d791692 (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>
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/direct.c | 6 |
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 | ||