The VFS changes were merged a short time ago to the in-development Linux 6.17 kernel. Among the notable changes there is a patch that will allow file-systems like Btrfs and Bcachefs to better handle losing a disk in their built-in RAID/multi-device capabilities.
A new method is being introduced in Linux 6.17 to allow multi-device file-systems like Btrfs with its native/built-in RAID capabilities to be informed when a block device is removed. Btrfs, for example, can handle surprise device (disk) removal but the existing Linux kernel handling doesn’t cope well. File-systems implementing the “shutdown” call can not allow losing a device and end up shutting down the whole file-system.
Qu Wenruo of SUSE explains with the queued patch:
“Currently all filesystems which implement super_operations::shutdown() 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, as multi-device filesystems like btrfs and bcachefs can handle certain device loss without the need to shutdown the whole filesystem.
To allow those multi-device filesystems to be integrated to use fs_holder_ops:
– Add a new super_operations::remove_bdev() callback
– Try ->remove_bdev() callback first inside fs_bdev_mark_dead() If the callback returned 0, meaning the fs can handling the device loss, then exit without doing anything else.
If there is no such callback or the callback returned non-zero value, continue to shutdown the filesystem as usual.
This means the new remove_bdev() should only do the check on whether the operation can continue, and if so do the fs specific handlings. The shutdown handling should still be handled by the existing ->shutdown() callback.
For all existing filesystems with shutdown callback, there is no change to the code nor behavior.
Btrfs is going to implement both the ->remove_bdev() and ->shutdown() callbacks soon.”
That new support was merged today to Linux 6.17 via this pull request.