Re: [PATCH v2] jbd2: fix deadlock in jbd2_journal_cancel_revoke()
From: Theodore Ts'o
Date: Fri Apr 10 2026 - 11:33:16 EST
On Thu, 09 Apr 2026 19:42:03 +0800, Zhang Yi wrote:
> Commit f76d4c28a46a ("fs/jbd2: use sleeping version of
> __find_get_block()") changed jbd2_journal_cancel_revoke() to use
> __find_get_block_nonatomic() which holds the folio lock instead of
> i_private_lock. This breaks the lock ordering (folio -> buffer) and
> causes an ABBA deadlock when the filesystem blocksize < pagesize:
>
> T1 T2
> ext4_mkdir()
> ext4_init_new_dir()
> ext4_append()
> ext4_getblk()
> lock_buffer() <- A
> sync_blockdev()
> blkdev_writepages()
> writeback_iter()
> writeback_get_folio()
> folio_lock() <- B
> ext4_journal_get_create_access()
> jbd2_journal_cancel_revoke()
> __find_get_block_nonatomic()
> folio_lock() <- B
> block_write_full_folio()
> lock_buffer() <- A
>
> [...]
Applied, thanks!
[1/1] jbd2: fix deadlock in jbd2_journal_cancel_revoke()
commit: 981fcc5674e67158d24d23e841523eccba19d0e7
Best regards,
--
Theodore Ts'o <tytso@xxxxxxx>