X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=fs%2Fnfs%2Fdirect.c;h=125d71fc21fbb12bf53941c17a34400dba7f26a0;hb=7172c64a7cee4dfa95864f49c914f7ea8cf497c8;hp=76ca1cbc38f96e418f80ff69095480cef3b7b36c;hpb=3967a72a825e44bff5d10f516e90b6f59f59e599;p=linux-2.6.git diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index 76ca1cbc3..125d71fc2 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c @@ -532,10 +532,12 @@ static void nfs_direct_write_result(struct rpc_task *task, void *calldata) spin_lock(&dreq->lock); - if (likely(status >= 0)) - dreq->count += data->res.count; - else - dreq->error = task->tk_status; + if (unlikely(status < 0)) { + dreq->error = status; + goto out_unlock; + } + + dreq->count += data->res.count; if (data->res.verf->committed != NFS_FILE_SYNC) { switch (dreq->flags) { @@ -550,7 +552,7 @@ static void nfs_direct_write_result(struct rpc_task *task, void *calldata) } } } - +out_unlock: spin_unlock(&dreq->lock); }