On Thu, 18 Jul 2024 19:53:36 +0800, libaokun@xxxxxxxxxxxxxxx wrote: > In __jbd2_log_wait_for_space(), we might call jbd2_cleanup_journal_tail() > to recover some journal space. But if an error occurs while executing > jbd2_cleanup_journal_tail() (e.g., an EIO), we don't stop waiting for free > space right away, we try other branches, and if j_committing_transaction > is NULL (i.e., the tid is 0), we will get the following complain: > > ============================================ > JBD2: I/O error when updating journal superblock for sdd-8. > __jbd2_log_wait_for_space: needed 256 blocks and only had 217 space available > __jbd2_log_wait_for_space: no way to get more journal space in sdd-8 > ------------[ cut here ]------------ > WARNING: CPU: 2 PID: 139804 at fs/jbd2/checkpoint.c:109 __jbd2_log_wait_for_space+0x251/0x2e0 > Modules linked in: > CPU: 2 PID: 139804 Comm: kworker/u8:3 Not tainted 6.6.0+ #1 > RIP: 0010:__jbd2_log_wait_for_space+0x251/0x2e0 > Call Trace: > <TASK> > add_transaction_credits+0x5d1/0x5e0 > start_this_handle+0x1ef/0x6a0 > jbd2__journal_start+0x18b/0x340 > ext4_dirty_inode+0x5d/0xb0 > __mark_inode_dirty+0xe4/0x5d0 > generic_update_time+0x60/0x70 > [...] > ============================================ > > [...] Applied, thanks! [1/1] jbd2: stop waiting for space when jbd2_cleanup_journal_tail() returns error commit: f5cacdc6f2bb2a9bf214469dd7112b43dd2dd68a Best regards, -- Theodore Ts'o <tytso@xxxxxxx>