X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=fs%2Fnfs%2Fdirect.c;h=c7326c2af2c3d33df7a96497c427664d90f7861f;hb=e350817b7cfb8cce9db8ac4344744e0b4fbe52d0;hp=979b3c4dee6aedbb354faefd1aca8cf1b3be8789;hpb=1decabc1a70b97ef7412224df3dcb59d1227e3af;p=deliverable%2Flinux.git diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index 979b3c4dee6a..c7326c2af2c3 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c @@ -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); }