|
| 1 | +From 8cded62556a98153a07dacc34198c4e5553e1a12 Mon Sep 17 00:00:00 2001 |
| 2 | +From: Wenwu Hou <hwenwur@gmail.com> |
| 3 | +Date: Tue, 7 Jul 2026 17:31:27 +0800 |
| 4 | +Subject: [PATCH 2/2] cachefiles: convert cachefiles_page_copy() to use |
| 5 | + filemap_get_folios_contig() |
| 6 | + |
| 7 | +find_get_pages_contig() was removed in commit 48658d8509d2 ("filemap: |
| 8 | +remove find_get_pages_contig()"). Replace it with |
| 9 | +filemap_get_folios_contig(). |
| 10 | + |
| 11 | +No functional change intended. |
| 12 | + |
| 13 | +Signed-off-by: Wenwu Hou <hwenwur@gmail.com> |
| 14 | +--- |
| 15 | + fs/cachefiles/io.c | 36 ++++++++++++++++++------------------ |
| 16 | + 1 file changed, 18 insertions(+), 18 deletions(-) |
| 17 | + |
| 18 | +diff --git a/fs/cachefiles/io.c b/fs/cachefiles/io.c |
| 19 | +index 1e4db487a517..7e7439117a3e 100644 |
| 20 | +--- a/fs/cachefiles/io.c |
| 21 | ++++ b/fs/cachefiles/io.c |
| 22 | +@@ -71,44 +71,46 @@ static void cachefiles_read_complete(struct kiocb *iocb, long ret) |
| 23 | + |
| 24 | + static void cachefiles_page_copy(struct cachefiles_kiocb *ki, struct iov_iter *iter) |
| 25 | + { |
| 26 | +- struct address_space *mapping = ki->iocb.ki_filp->f_mapping; |
| 27 | ++ struct address_space *mapping = ki->iocb.ki_filp->f_mapping; |
| 28 | + struct kiocb *iocb = &ki->iocb; |
| 29 | + loff_t isize = i_size_read(mapping->host); |
| 30 | + loff_t end = min_t(loff_t, isize, iocb->ki_pos + iov_iter_count(iter)); |
| 31 | +- struct pagevec pv; |
| 32 | ++ struct folio_batch fbatch; |
| 33 | + pgoff_t index; |
| 34 | + unsigned int i; |
| 35 | + bool writably_mapped; |
| 36 | + int error = 0; |
| 37 | + |
| 38 | ++ folio_batch_init(&fbatch); |
| 39 | ++ |
| 40 | + while (iocb->ki_pos < end && !error) { |
| 41 | + index = iocb->ki_pos >> PAGE_SHIFT; |
| 42 | +- pv.nr = find_get_pages_contig(mapping, index, PAGEVEC_SIZE, pv.pages); |
| 43 | +- |
| 44 | +- if (pv.nr == 0) |
| 45 | ++ if (!filemap_get_folios_contig(mapping, &index, |
| 46 | ++ (end - 1) >> PAGE_SHIFT, &fbatch)) |
| 47 | + break; |
| 48 | + |
| 49 | + writably_mapped = mapping_writably_mapped(mapping); |
| 50 | + |
| 51 | +- for (i = 0; i < pv.nr; i++) { |
| 52 | +- struct page *page = pv.pages[i]; |
| 53 | +- unsigned int offset = iocb->ki_pos & ~PAGE_MASK; |
| 54 | +- unsigned int bytes = min_t(loff_t, end - iocb->ki_pos, |
| 55 | +- PAGE_SIZE - offset); |
| 56 | +- unsigned int copied; |
| 57 | ++ for (i = 0; i < folio_batch_count(&fbatch); i++) { |
| 58 | ++ struct folio *folio = fbatch.folios[i]; |
| 59 | ++ size_t fsize = folio_size(folio); |
| 60 | ++ size_t offset = iocb->ki_pos & (fsize - 1); |
| 61 | ++ size_t bytes = min_t(loff_t, end - iocb->ki_pos, |
| 62 | ++ fsize - offset); |
| 63 | ++ size_t copied; |
| 64 | + |
| 65 | +- if (page->index * PAGE_SIZE >= end) |
| 66 | ++ if (end < folio_pos(folio)) |
| 67 | + break; |
| 68 | + |
| 69 | +- if (!PageUptodate(page)) { |
| 70 | ++ if (!folio_test_uptodate(folio)) { |
| 71 | + error = -EFAULT; |
| 72 | + break; |
| 73 | + } |
| 74 | + |
| 75 | + if (writably_mapped) |
| 76 | +- flush_dcache_page(page); |
| 77 | ++ flush_dcache_folio(folio); |
| 78 | + |
| 79 | +- copied = copy_page_to_iter(page, offset, bytes, iter); |
| 80 | ++ copied = copy_folio_to_iter(folio, offset, bytes, iter); |
| 81 | + |
| 82 | + iocb->ki_pos += copied; |
| 83 | + if (copied < bytes) { |
| 84 | +@@ -117,10 +119,8 @@ static void cachefiles_page_copy(struct cachefiles_kiocb *ki, struct iov_iter *i |
| 85 | + } |
| 86 | + } |
| 87 | + |
| 88 | +- for (i = 0; i < pv.nr; i++) |
| 89 | +- put_page(pv.pages[i]); |
| 90 | ++ folio_batch_release(&fbatch); |
| 91 | + } |
| 92 | +- |
| 93 | + } |
| 94 | + |
| 95 | + /* |
| 96 | +-- |
| 97 | +2.43.0 |
| 98 | + |
0 commit comments