]> xenbits.xensource.com Git - xenclient/kernel.git/commitdiff
commit 432409eebcdec38ff6fa949f097b5438d588faa5 bnx2i-host-params
authort_jeang <devnull@localhost>
Tue, 6 Jan 2009 12:06:00 +0000 (12:06 +0000)
committert_jeang <devnull@localhost>
Tue, 6 Jan 2009 12:06:00 +0000 (12:06 +0000)
Author: Neil Brown <neilb@suse.de>
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 <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>
fs/nfs/direct.c

index 3ac2e7f2693ccef7fb6a8dc975efef313198b604..d5b2d8d4948ccbb00cd306a1c50925efac1495a4 100644 (file)
@@ -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;