diff options
Diffstat (limited to 'fs/cifs/file.c')
-rw-r--r-- | fs/cifs/file.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/cifs/file.c b/fs/cifs/file.c index 18a1e1d6671f..1cd0e2eefc66 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c | |||
@@ -2884,7 +2884,15 @@ cifs_readdata_to_iov(struct cifs_readdata *rdata, struct iov_iter *iter) | |||
2884 | for (i = 0; i < rdata->nr_pages; i++) { | 2884 | for (i = 0; i < rdata->nr_pages; i++) { |
2885 | struct page *page = rdata->pages[i]; | 2885 | struct page *page = rdata->pages[i]; |
2886 | size_t copy = min_t(size_t, remaining, PAGE_SIZE); | 2886 | size_t copy = min_t(size_t, remaining, PAGE_SIZE); |
2887 | size_t written = copy_page_to_iter(page, 0, copy, iter); | 2887 | size_t written; |
2888 | |||
2889 | if (unlikely(iter->type & ITER_PIPE)) { | ||
2890 | void *addr = kmap_atomic(page); | ||
2891 | |||
2892 | written = copy_to_iter(addr, copy, iter); | ||
2893 | kunmap_atomic(addr); | ||
2894 | } else | ||
2895 | written = copy_page_to_iter(page, 0, copy, iter); | ||
2888 | remaining -= written; | 2896 | remaining -= written; |
2889 | if (written < copy && iov_iter_count(iter) > 0) | 2897 | if (written < copy && iov_iter_count(iter) > 0) |
2890 | break; | 2898 | break; |