btrfs: add extra warning if delayed iput is added when it's not allowed
authorQu Wenruo <wqu@suse.com>
Mon, 10 Mar 2025 05:14:56 +0000 (15:44 +1030)
committerDavid Sterba <dsterba@suse.com>
Tue, 18 Mar 2025 19:35:52 +0000 (20:35 +0100)
commit19e60b2a95f5d6b77d972c7bec35a11e70fd118c
tree8ec95f607b4b20824d59ec96df9733cc77e97741
parent0aaaf10ae9aef82bf6589ced2510ff4e249cb3af
btrfs: add extra warning if delayed iput is added when it's not allowed

Since I have triggered the ASSERT() on the delayed iput too many times,
now is the time to add some extra debug warnings for delayed iput.

All delayed iputs should be queued after all ordered extents finish
their IO and all involved workqueues are flushed.

Thus after the btrfs_run_delayed_iputs() inside close_ctree(), there
should be no more delayed puts added.

So introduce a new BTRFS_FS_STATE_NO_DELAYED_IPUT, set after the above
mentioned timing.  And all btrfs_add_delayed_iput() will check that flag
and give a WARN_ON_ONCE().

Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c
fs/btrfs/fs.h
fs/btrfs/inode.c