diff --git a/[refs] b/[refs] index 577277572c43..d03d4bcad2d9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b6dff26a08189932eeb0fa4261e09e733b0fc540 +refs/heads/master: eda3cef8dd2b83875affe82595db9d0c278879b2 diff --git a/trunk/fs/nfs/direct.c b/trunk/fs/nfs/direct.c index 9f7f8b9ea1e2..1e873fcab947 100644 --- a/trunk/fs/nfs/direct.c +++ b/trunk/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); }