All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Qu Wenruo <wqu@suse.com>
Cc: linux-btrfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	viro@zeniv.linux.org.uk, brauner@kernel.org, jack@suse.cz,
	linux-ext4@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net, ntfs3@lists.linux.dev,
	linux-xfs@vger.kernel.org
Subject: Re: [PATCH v4 1/6] fs: enhance and rename shutdown() callback to remove_bdev()
Date: Tue, 8 Jul 2025 09:02:52 +1000	[thread overview]
Message-ID: <aGxSHKeyldrR1Q0T@dread.disaster.area> (raw)
In-Reply-To: <de25bbdb572c75df38b1002d3779bf19e3ad0ff6.1751589725.git.wqu@suse.com>

On Fri, Jul 04, 2025 at 10:12:29AM +0930, Qu Wenruo wrote:
> Currently all the filesystems implementing the
> super_opearations::shutdown() callback can not afford losing a device.
> 
> Thus fs_bdev_mark_dead() will just call the shutdown() callback for the
> involved filesystem.
> 
> But it will no longer be the case, with multi-device filesystems like
> btrfs and bcachefs the filesystem can handle certain device loss without
> shutting down the whole filesystem.
> 
> To allow those multi-device filesystems to be integrated to use
> fs_holder_ops:
> 
> - Replace super_opearation::shutdown() with
>   super_opearations::remove_bdev()
>   To better describe when the callback is called.

This conflates cause with action.

The shutdown callout is an action that the filesystem must execute,
whilst "remove bdev" is a cause notification that might require an
action to be take.

Yes, the cause could be someone doing hot-unplug of the block
device, but it could also be something going wrong in software
layers below the filesystem. e.g. dm-thinp having an unrecoverable
corruption or ENOSPC errors.

We already have a "cause" notification: blk_holder_ops->mark_dead().

The generic fs action that is taken by this notification is
fs_bdev_mark_dead().  That action is to invalidate caches and shut
down the filesystem.

btrfs needs to do something different to a blk_holder_ops->mark_dead
notification. i.e. it needs an action that is different to
fs_bdev_mark_dead().

Indeed, this is how bcachefs already handles "single device
died" events for multi-device filesystems - see
bch2_fs_bdev_mark_dead().

Hence Btrfs should be doing the same thing as bcachefs. The
bdev_handle_ops structure exists precisly because it allows the
filesystem to handle block device events in the exact manner they
require....

> - Add a new @bdev parameter to remove_bdev() callback
>   To allow the fs to determine which device is missing, and do the
>   proper handling when needed.
> 
> For the existing shutdown callback users, the change is minimal.

Except for the change in API semantics. ->shutdown is an external
shutdown trigger for the filesystem, not a generic "block device
removed" notification.

Hooking blk_holder_ops->mark_dead means that btrfs can also provide
a ->shutdown implementation for when something external other than a
block device removal needs to shut down the filesystem....

-Dave.
-- 
Dave Chinner
david@fromorbit.com

WARNING: multiple messages have this Message-ID (diff)
From: Dave Chinner via Linux-f2fs-devel <linux-f2fs-devel@lists.sourceforge.net>
To: Qu Wenruo <wqu@suse.com>
Cc: brauner@kernel.org, ntfs3@lists.linux.dev, jack@suse.cz,
	linux-f2fs-devel@lists.sourceforge.net,
	linux-xfs@vger.kernel.org, viro@zeniv.linux.org.uk,
	linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org,
	linux-btrfs@vger.kernel.org
Subject: Re: [f2fs-dev] [PATCH v4 1/6] fs: enhance and rename shutdown() callback to remove_bdev()
Date: Tue, 8 Jul 2025 09:02:52 +1000	[thread overview]
Message-ID: <aGxSHKeyldrR1Q0T@dread.disaster.area> (raw)
In-Reply-To: <de25bbdb572c75df38b1002d3779bf19e3ad0ff6.1751589725.git.wqu@suse.com>

On Fri, Jul 04, 2025 at 10:12:29AM +0930, Qu Wenruo wrote:
> Currently all the filesystems implementing the
> super_opearations::shutdown() callback can not afford losing a device.
> 
> Thus fs_bdev_mark_dead() will just call the shutdown() callback for the
> involved filesystem.
> 
> But it will no longer be the case, with multi-device filesystems like
> btrfs and bcachefs the filesystem can handle certain device loss without
> shutting down the whole filesystem.
> 
> To allow those multi-device filesystems to be integrated to use
> fs_holder_ops:
> 
> - Replace super_opearation::shutdown() with
>   super_opearations::remove_bdev()
>   To better describe when the callback is called.

This conflates cause with action.

The shutdown callout is an action that the filesystem must execute,
whilst "remove bdev" is a cause notification that might require an
action to be take.

Yes, the cause could be someone doing hot-unplug of the block
device, but it could also be something going wrong in software
layers below the filesystem. e.g. dm-thinp having an unrecoverable
corruption or ENOSPC errors.

We already have a "cause" notification: blk_holder_ops->mark_dead().

The generic fs action that is taken by this notification is
fs_bdev_mark_dead().  That action is to invalidate caches and shut
down the filesystem.

btrfs needs to do something different to a blk_holder_ops->mark_dead
notification. i.e. it needs an action that is different to
fs_bdev_mark_dead().

Indeed, this is how bcachefs already handles "single device
died" events for multi-device filesystems - see
bch2_fs_bdev_mark_dead().

Hence Btrfs should be doing the same thing as bcachefs. The
bdev_handle_ops structure exists precisly because it allows the
filesystem to handle block device events in the exact manner they
require....

> - Add a new @bdev parameter to remove_bdev() callback
>   To allow the fs to determine which device is missing, and do the
>   proper handling when needed.
> 
> For the existing shutdown callback users, the change is minimal.

Except for the change in API semantics. ->shutdown is an external
shutdown trigger for the filesystem, not a generic "block device
removed" notification.

Hooking blk_holder_ops->mark_dead means that btrfs can also provide
a ->shutdown implementation for when something external other than a
block device removal needs to shut down the filesystem....

-Dave.
-- 
Dave Chinner
david@fromorbit.com


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

  parent reply	other threads:[~2025-07-07 23:02 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-04  0:42 [PATCH v4 0/6] btrfs: add remove_bdev() callback Qu Wenruo
2025-07-04  0:42 ` [PATCH v4 1/6] fs: enhance and rename shutdown() callback to remove_bdev() Qu Wenruo
2025-07-04  0:42   ` [f2fs-dev] " Qu Wenruo via Linux-f2fs-devel
2025-07-04  9:00   ` (subset) " Christian Brauner
2025-07-04  9:00     ` [f2fs-dev] " Christian Brauner via Linux-f2fs-devel
2025-07-04  9:05   ` Jan Kara
2025-07-04  9:05     ` [f2fs-dev] " Jan Kara
2025-07-07 23:02   ` Dave Chinner [this message]
2025-07-07 23:02     ` Dave Chinner via Linux-f2fs-devel
2025-07-07 23:22     ` Qu Wenruo
2025-07-07 23:22       ` [f2fs-dev] " Qu Wenruo via Linux-f2fs-devel
2025-07-08  0:45       ` Darrick J. Wong
2025-07-08  0:45         ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2025-07-08  2:09         ` Qu Wenruo
2025-07-08  2:09           ` [f2fs-dev] " Qu Wenruo via Linux-f2fs-devel
2025-07-08  3:06           ` Qu Wenruo
2025-07-08  3:06             ` [f2fs-dev] " Qu Wenruo via Linux-f2fs-devel
2025-07-08  5:05             ` Dave Chinner
2025-07-08  5:05               ` [f2fs-dev] " Dave Chinner via Linux-f2fs-devel
2025-07-08  5:41               ` Qu Wenruo
2025-07-08  5:41                 ` [f2fs-dev] " Qu Wenruo via Linux-f2fs-devel
2025-07-08  7:55         ` Christian Brauner
2025-07-08  7:55           ` [f2fs-dev] " Christian Brauner via Linux-f2fs-devel
2025-07-08 22:59           ` Dave Chinner
2025-07-08 22:59             ` [f2fs-dev] " Dave Chinner via Linux-f2fs-devel
2025-07-08 23:07             ` Qu Wenruo
2025-07-08 23:07               ` [f2fs-dev] " Qu Wenruo via Linux-f2fs-devel
2025-07-09  0:35               ` Kent Overstreet
2025-07-09  0:35                 ` [f2fs-dev] " Kent Overstreet
2025-07-09  0:55                 ` Qu Wenruo
2025-07-09  0:55                   ` [f2fs-dev] " Qu Wenruo via Linux-f2fs-devel
2025-07-09  1:13                   ` Kent Overstreet
2025-07-09  1:13                     ` [f2fs-dev] " Kent Overstreet
2025-07-10  8:33             ` Christian Brauner
2025-07-10  8:33               ` [f2fs-dev] " Christian Brauner via Linux-f2fs-devel
2025-07-10 10:54           ` Christoph Hellwig
2025-07-10 10:54             ` [f2fs-dev] " Christoph Hellwig
2025-07-08 10:20         ` Jan Kara
2025-07-08 10:20           ` [f2fs-dev] " Jan Kara
2025-07-08 20:20           ` Darrick J. Wong
2025-07-08 20:20             ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2025-07-08 22:12             ` Qu Wenruo
2025-07-08 22:12               ` [f2fs-dev] " Qu Wenruo via Linux-f2fs-devel
2025-07-10  8:40             ` Christian Brauner
2025-07-10  8:40               ` [f2fs-dev] " Christian Brauner via Linux-f2fs-devel
2025-07-10  9:54               ` Qu Wenruo
2025-07-10  9:54                 ` [f2fs-dev] " Qu Wenruo via Linux-f2fs-devel
2025-07-11  9:34                 ` Christian Brauner
2025-07-11  9:34                   ` [f2fs-dev] " Christian Brauner via Linux-f2fs-devel
2025-07-10 10:52         ` Christoph Hellwig
2025-07-10 10:52           ` [f2fs-dev] " Christoph Hellwig
2025-07-04  0:42 ` [PATCH v4 2/6] btrfs: introduce a new fs state, EMERGENCY_SHUTDOWN Qu Wenruo
2025-07-04  0:42 ` [PATCH v4 3/6] btrfs: reject file operations if in shutdown state Qu Wenruo
2025-07-05 14:10   ` David Sterba
2025-07-04  0:42 ` [PATCH v4 4/6] btrfs: reject delalloc ranges " Qu Wenruo
2025-07-04  0:42 ` [PATCH v4 5/6] btrfs: implement shutdown ioctl Qu Wenruo
2025-07-05 14:22   ` David Sterba
2025-07-06  3:37     ` Qu Wenruo
2025-07-07 20:51       ` David Sterba
2025-07-07 23:04         ` Qu Wenruo
2025-07-08  0:53           ` David Sterba
2025-07-04  0:42 ` [PATCH v4 6/6] btrfs: implement remove_bdev super operation callback Qu Wenruo
  -- strict thread matches above, loose matches on Subject: below --
2025-07-09 17:23 [PATCH v4 1/6] fs: enhance and rename shutdown() callback to remove_bdev() Jan Kara
2025-07-09 17:49 ` Kent Overstreet
2025-07-10 13:10   ` Jan Kara
2025-07-10 18:41     ` Kent Overstreet
2025-07-11 14:20       ` Jan Kara

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aGxSHKeyldrR1Q0T@dread.disaster.area \
    --to=david@fromorbit.com \
    --cc=brauner@kernel.org \
    --cc=jack@suse.cz \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=ntfs3@lists.linux.dev \
    --cc=viro@zeniv.linux.org.uk \
    --cc=wqu@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.