On Wed, 29 Jun 2022 19:26:46 +0800, Zhang Yi wrote: > When evicting an inode with default dioread_nolock, it could be raced by > the unwritten extents converting kworker after writeback some new > allocated dirty blocks. It convert unwritten extents to written, the > extents could be merged to upper level and free extent blocks, so it > could mark the inode dirty again even this inode has been marked > I_FREEING. But the inode->i_io_list check and warning in > ext4_evict_inode() missing this corner case. Fortunately, > ext4_evict_inode() will wait all extents converting finished before this > check, so it will not lead to inode use-after-free problem, every thing > is OK besides this warning. The WARN_ON_ONCE was originally designed > for finding inode use-after-free issues in advance, but if we add > current dioread_nolock case in, it will become not quite useful, so fix > this warning by just remove this check. > > [...] Applied, thanks! [1/2] ext4: silence the warning when evicting inode with dioread_nolock commit: bc12ac98ea2e1b70adc6478c8b473a0003b659d3 [2/2] ext4: check and assert if marking an no_delete evicting inode dirty commit: 318cdc822c63b6e2befcfdc2088378ae6fa18def Best regards, -- Theodore Ts'o <tytso@xxxxxxx>