diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/nfs/direct.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index e6ace0d93c71..9943a75bb6d1 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c | |||
| @@ -407,15 +407,18 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq, | |||
| 407 | pos += vec->iov_len; | 407 | pos += vec->iov_len; |
| 408 | } | 408 | } |
| 409 | 409 | ||
| 410 | /* | ||
| 411 | * If no bytes were started, return the error, and let the | ||
| 412 | * generic layer handle the completion. | ||
| 413 | */ | ||
| 414 | if (requested_bytes == 0) { | ||
| 415 | nfs_direct_req_release(dreq); | ||
| 416 | return result < 0 ? result : -EIO; | ||
| 417 | } | ||
| 418 | |||
| 410 | if (put_dreq(dreq)) | 419 | if (put_dreq(dreq)) |
| 411 | nfs_direct_complete(dreq); | 420 | nfs_direct_complete(dreq); |
| 412 | 421 | return 0; | |
| 413 | if (requested_bytes != 0) | ||
| 414 | return 0; | ||
| 415 | |||
| 416 | if (result < 0) | ||
| 417 | return result; | ||
| 418 | return -EIO; | ||
| 419 | } | 422 | } |
| 420 | 423 | ||
| 421 | static ssize_t nfs_direct_read(struct kiocb *iocb, const struct iovec *iov, | 424 | static ssize_t nfs_direct_read(struct kiocb *iocb, const struct iovec *iov, |
| @@ -841,15 +844,18 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq, | |||
| 841 | pos += vec->iov_len; | 844 | pos += vec->iov_len; |
| 842 | } | 845 | } |
| 843 | 846 | ||
| 847 | /* | ||
| 848 | * If no bytes were started, return the error, and let the | ||
| 849 | * generic layer handle the completion. | ||
| 850 | */ | ||
| 851 | if (requested_bytes == 0) { | ||
| 852 | nfs_direct_req_release(dreq); | ||
| 853 | return result < 0 ? result : -EIO; | ||
| 854 | } | ||
| 855 | |||
| 844 | if (put_dreq(dreq)) | 856 | if (put_dreq(dreq)) |
| 845 | nfs_direct_write_complete(dreq, dreq->inode); | 857 | nfs_direct_write_complete(dreq, dreq->inode); |
| 846 | 858 | return 0; | |
| 847 | if (requested_bytes != 0) | ||
| 848 | return 0; | ||
| 849 | |||
| 850 | if (result < 0) | ||
| 851 | return result; | ||
| 852 | return -EIO; | ||
| 853 | } | 859 | } |
| 854 | 860 | ||
| 855 | static ssize_t nfs_direct_write(struct kiocb *iocb, const struct iovec *iov, | 861 | static ssize_t nfs_direct_write(struct kiocb *iocb, const struct iovec *iov, |
