From: t_jeang Date: Tue, 6 Jan 2009 12:06:00 +0000 (+0000) Subject: commit 432409eebcdec38ff6fa949f097b5438d588faa5 X-Git-Tag: bnx2i-host-params X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=79db6804be23f16d48c9cec558f81549a47b3174;p=xenclient%2Fkernel.git commit 432409eebcdec38ff6fa949f097b5438d588faa5 Author: Neil Brown Date: Tue Oct 23 17:09:13 2007 -0400 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 Signed-off-by: Neil Brown Acked-by: Chuck Lever Signed-off-by: Trond Myklebust Signed-off-by: Linus Torvalds --- diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index 3ac2e7f2..d5b2d8d4 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c @@ -545,13 +545,13 @@ static void nfs_direct_write_result(struct rpc_task *task, void *calldata) spin_lock(&dreq->lock); - if (unlikely(dreq->error != 0)) - goto out_unlock; if (unlikely(status < 0)) { - /* An error has occured, so we should not commit */ + /* An error has occurred, so we should not commit */ dreq->flags = 0; dreq->error = status; } + if (unlikely(dreq->error != 0)) + goto out_unlock; dreq->count += data->res.count;