|
@@ -353,10 +353,12 @@ static ssize_t nfs_direct_wait(struct nfs_direct_req *dreq)
|
|
|
|
|
|
result = wait_for_completion_killable(&dreq->completion);
|
|
|
|
|
|
+ if (!result) {
|
|
|
+ result = dreq->count;
|
|
|
+ WARN_ON_ONCE(dreq->count < 0);
|
|
|
+ }
|
|
|
if (!result)
|
|
|
result = dreq->error;
|
|
|
- if (!result)
|
|
|
- result = dreq->count;
|
|
|
|
|
|
out:
|
|
|
return (ssize_t) result;
|
|
@@ -386,8 +388,10 @@ static void nfs_direct_complete(struct nfs_direct_req *dreq, bool write)
|
|
|
|
|
|
if (dreq->iocb) {
|
|
|
long res = (long) dreq->error;
|
|
|
- if (!res)
|
|
|
+ if (dreq->count != 0) {
|
|
|
res = (long) dreq->count;
|
|
|
+ WARN_ON_ONCE(dreq->count < 0);
|
|
|
+ }
|
|
|
dreq->iocb->ki_complete(dreq->iocb, res, 0);
|
|
|
}
|
|
|
|