|
@@ -2884,7 +2884,15 @@ cifs_readdata_to_iov(struct cifs_readdata *rdata, struct iov_iter *iter)
|
|
|
for (i = 0; i < rdata->nr_pages; i++) {
|
|
|
struct page *page = rdata->pages[i];
|
|
|
size_t copy = min_t(size_t, remaining, PAGE_SIZE);
|
|
|
- size_t written = copy_page_to_iter(page, 0, copy, iter);
|
|
|
+ size_t written;
|
|
|
+
|
|
|
+ if (unlikely(iter->type & ITER_PIPE)) {
|
|
|
+ void *addr = kmap_atomic(page);
|
|
|
+
|
|
|
+ written = copy_to_iter(addr, copy, iter);
|
|
|
+ kunmap_atomic(addr);
|
|
|
+ } else
|
|
|
+ written = copy_page_to_iter(page, 0, copy, iter);
|
|
|
remaining -= written;
|
|
|
if (written < copy && iov_iter_count(iter) > 0)
|
|
|
break;
|