Ritesh Harjani (IBM) <ritesh.list@xxxxxxxxx> writes: > Please ignore the previous email. > > "Theodore Ts'o" <tytso@xxxxxxx> writes: > >> On Mon, May 15, 2023 at 04:10:41PM +0530, Ritesh Harjani (IBM) wrote: >>> mpage_submit_folio() was converted to take folio. Even though >>> folio_size() in ext4 as of now is PAGE_SIZE, but it's better to >>> remove that assumption which I am assuming is a missed left over from >>> patch[1]. >>> >>> [1]: https://lore.kernel.org/linux-ext4/20230324180129.1220691-7-willy@xxxxxxxxxxxxx/ >>> >>> Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@xxxxxxxxx> >> >> I didn't notice this right away, because the failure is not 100% >> reliable, but this commit will sometimes cause "kvm-xfstests -c >> ext4/encrypt generic/068" to crash. Reverting the patch fixes the >> problem, so I plan to drop this patch from my tree. >> > > Sorry about the crash. I am now able to reproduce the problem on my > setup as well. I will debug this and will update once I have some more info. > > From the initial look, it looks like the problem might be occurring when > folio_pos(folio) itself is > i_size_read(inode). > > If that is indeed the case, then I think even doing this with folio > conversion (below code after folio conversion) looks incorrect for case > when size is not PAGE_SIZE aligned. > > However, I will spend some more time debugging this. I am still looking into this. I would like to make sure I go through all the paths where i_size can be modified. - buffered-IO - writeback - direct-IO - page fault - truncate - fallocate (punch/collapse) - evict (not relevant though) It is easily recreatable if we have one thread doing buffered-io + sync and other thread trying to truncate down inode->i_size. Kernel panic maybe is happening only with -O encrypt mkfs option + -o test_dummy_encryption mount option, but the size - folio_pos(folio) is definitely wrong because inode->i_size is not protected in writeback path. More on this later... -ritesh