mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
Squashfs: Update squashfs_readahead() to not use page->index
This commit removes references to page->index in the pages returned from __readahead_batch(), and instead uses the 'start' variable. This does reveal a bug in the previous code in that 'start' was not updated every time around the loop. This is fixed in this commit. Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk> Link: https://lore.kernel.org/r/20240818235847.170468-3-phillip@squashfs.org.uk Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
2258e22f05
commit
6f09ffb1f4
@ -551,7 +551,6 @@ static void squashfs_readahead(struct readahead_control *ractl)
|
||||
return;
|
||||
|
||||
for (;;) {
|
||||
pgoff_t index;
|
||||
int res, bsize;
|
||||
u64 block = 0;
|
||||
unsigned int expected;
|
||||
@ -570,13 +569,8 @@ static void squashfs_readahead(struct readahead_control *ractl)
|
||||
if (readahead_pos(ractl) >= i_size_read(inode))
|
||||
goto skip_pages;
|
||||
|
||||
index = pages[0]->index >> shift;
|
||||
|
||||
if ((pages[nr_pages - 1]->index >> shift) != index)
|
||||
goto skip_pages;
|
||||
|
||||
if (index == file_end && squashfs_i(inode)->fragment_block !=
|
||||
SQUASHFS_INVALID_BLK) {
|
||||
if (start >> msblk->block_log == file_end &&
|
||||
squashfs_i(inode)->fragment_block != SQUASHFS_INVALID_BLK) {
|
||||
res = squashfs_readahead_fragment(pages, nr_pages,
|
||||
expected);
|
||||
if (res)
|
||||
@ -584,7 +578,7 @@ static void squashfs_readahead(struct readahead_control *ractl)
|
||||
continue;
|
||||
}
|
||||
|
||||
bsize = read_blocklist(inode, index, &block);
|
||||
bsize = read_blocklist(inode, start >> msblk->block_log, &block);
|
||||
if (bsize == 0)
|
||||
goto skip_pages;
|
||||
|
||||
@ -602,7 +596,7 @@ static void squashfs_readahead(struct readahead_control *ractl)
|
||||
|
||||
/* Last page (if present) may have trailing bytes not filled */
|
||||
bytes = res % PAGE_SIZE;
|
||||
if (index == file_end && bytes && last_page)
|
||||
if (start >> msblk->block_log == file_end && bytes && last_page)
|
||||
memzero_page(last_page, bytes,
|
||||
PAGE_SIZE - bytes);
|
||||
|
||||
@ -616,6 +610,8 @@ static void squashfs_readahead(struct readahead_control *ractl)
|
||||
unlock_page(pages[i]);
|
||||
put_page(pages[i]);
|
||||
}
|
||||
|
||||
start += readahead_batch_length(ractl);
|
||||
}
|
||||
|
||||
kfree(pages);
|
||||
|
Loading…
Reference in New Issue
Block a user