diff options
author | Matthew Wilcox (Oracle) <willy@infradead.org> | 2021-04-21 20:09:23 +0300 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2021-04-23 12:14:28 +0300 |
commit | f615bd5c4725fde94387d3f0f4e752b4c01a4592 (patch) | |
tree | 5de569f94479cac88c607373af4382568143d128 /mm/readahead.c | |
parent | c790fbf20a53e8297c97ddb1c0c9d41c060067f3 (diff) | |
download | linux-f615bd5c4725fde94387d3f0f4e752b4c01a4592.tar.xz |
mm/readahead: Handle ractl nr_pages being modified
Filesystems are not currently permitted to modify the number of pages
in the ractl. An upcoming patch to add readahead_expand() changes that
rule, so remove the check and resync the loop counter after every call
to the filesystem.
Tested-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: David Howells <dhowells@redhat.com>
Link: https://lore.kernel.org/r/20210420200116.3715790-1-willy@infradead.org/
Link: https://lore.kernel.org/r/20210421170923.4005574-1-willy@infradead.org/ # v2
Diffstat (limited to 'mm/readahead.c')
-rw-r--r-- | mm/readahead.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/mm/readahead.c b/mm/readahead.c index 2088569a947e..5b423ecc99f1 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -198,8 +198,6 @@ void page_cache_ra_unbounded(struct readahead_control *ractl, for (i = 0; i < nr_to_read; i++) { struct page *page = xa_load(&mapping->i_pages, index + i); - BUG_ON(index + i != ractl->_index + ractl->_nr_pages); - if (page && !xa_is_value(page)) { /* * Page already present? Kick off the current batch @@ -210,6 +208,7 @@ void page_cache_ra_unbounded(struct readahead_control *ractl, * not worth getting one just for that. */ read_pages(ractl, &page_pool, true); + i = ractl->_index + ractl->_nr_pages - index - 1; continue; } @@ -223,6 +222,7 @@ void page_cache_ra_unbounded(struct readahead_control *ractl, gfp_mask) < 0) { put_page(page); read_pages(ractl, &page_pool, true); + i = ractl->_index + ractl->_nr_pages - index - 1; continue; } if (i == nr_to_read - lookahead_size) |