On 10/16/22 19:21, Bagas Sanjaya wrote:
On 10/16/22 03:59, Phillip Lougher wrote:
Which identified the "squashfs: support reading fragments in readahead call" patch.
There is a race-condition introduced in that patch, which involves cache releasing and reuse.
The following diff will fix that race-condition. It would be great if someone could test and verify before sending it out as a patch.
Thanks
Phillip
diff --git a/fs/squashfs/file.c b/fs/squashfs/file.c index e56510964b22..6cc23178e9ad 100644 --- a/fs/squashfs/file.c +++ b/fs/squashfs/file.c @@ -506,8 +506,9 @@ static int squashfs_readahead_fragment(struct page **page, squashfs_i(inode)->fragment_size); struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info; unsigned int n, mask = (1 << (msblk->block_log - PAGE_SHIFT)) - 1;
- int error = buffer->error;
- if (buffer->error)
- if (error) goto out;
expected += squashfs_i(inode)->fragment_offset; @@ -529,7 +530,7 @@ static int squashfs_readahead_fragment(struct page **page, out: squashfs_cache_put(buffer);
- return buffer->error;
- return error;
} static void squashfs_readahead(struct readahead_control *ractl)
No Verneed warnings so far. However, I need to test for a longer time (a day) to check if any warnings are reported.
Thanks.
Also, since this regression is also found on linux-6.0.y stable branch, don't forget to Cc stable list.
Thanks.