[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <19b933e4928.7e19f7474492475.8810694155148118128@linux.beauty>
Date: Tue, 06 Jan 2026 20:18:11 +0800
From: Li Chen <me@...ux.beauty>
To: "Zhang Yi" <yi.zhang@...weicloud.com>
Cc: "linux-ext4" <linux-ext4@...r.kernel.org>,
"Theodore Ts'o" <tytso@....edu>,
"Andreas Dilger" <adilger.kernel@...ger.ca>,
"linux-kernel" <linux-kernel@...r.kernel.org>
Subject: Re: [RFC v3 1/2] ext4: fast_commit: assert i_data_sem only before
sleep
Hi Zhang Yi,
---- On Mon, 05 Jan 2026 20:18:42 +0800 Zhang Yi <yi.zhang@...weicloud.com> wrote ---
> Hi Li,
>
> On 12/24/2025 11:29 AM, Li Chen wrote:
> > ext4_fc_track_inode() can return without sleeping when
> > EXT4_STATE_FC_COMMITTING is already clear. The lockdep assertion for
> > ei->i_data_sem was done unconditionally before the wait loop, which can
> > WARN in call paths that hold i_data_sem even though we never block. Move
> > lockdep_assert_not_held(&ei->i_data_sem) into the actual sleep path,
> > right before schedule().
> >
> > Signed-off-by: Li Chen <me@...ux.beauty>
>
> Thank you for the fix patch! However, the solution does not seem to fix
> the issue. IIUC, the root cause of this issue is the following race
> condition (show only one case), and it may cause a real ABBA dead lock
> issue.
>
> ext4_map_blocks()
> hold i_data_sem // <- A
> ext4_mb_new_blocks()
> ext4_dirty_inode()
> ext4_fc_commit()
> ext4_fc_perform_commit()
> set EXT4_STATE_FC_COMMITTING <-B
> ext4_fc_write_inode_data()
> ext4_map_blocks()
> hold i_data_sem // <- A
> ext4_fc_track_inode()
> wait EXT4_STATE_FC_COMMITTING <- B
> jbd2_fc_end_commit()
> ext4_fc_cleanup()
> clear EXT4_STATE_FC_COMMITTING()
>
> Postponing the lockdep assertion to the point where sleeping is actually
> necessary does not resolve this deadlock issue, it merely masks the
> problem, right?
>
> I currently don't quite understand why only ext4_fc_track_inode() needs
> to wait for the inode being fast committed to be completed, instead of
> adding it to the FC_Q_STAGING list like other tracking operations. So
> now I don't have a good idea to fix this problem either. Perhaps we
> need to rethink the necessity of this waiting, or find a way to avoid
> acquiring i_data_sem during fast commit.
Thanks a lot for your kind review! I'll provide feedback tomorrow.
Regards,
Li
Powered by blists - more mailing lists