]> git.hungrycats.org Git - linux/commit
btrfs: stripe_alloc: drop the mount options, the property is the interface 6.18/topics/stripe-alloc
authorZygo Blaxell <ce3g8jdj@umail.furryterror.org>
Sat, 19 Sep 2026 16:30:26 +0000 (12:30 -0400)
committerZygo Blaxell <ce3g8jdj@umail.furryterror.org>
Sat, 19 Sep 2026 16:30:26 +0000 (12:30 -0400)
commit64c3196baf3d375b4b3e40efa793421c665c6844
tree9f24d275dfa4e87624c25611a2ba22811b06df02
parentcd07965939670565a1ce4270ab7ab1e72eef3f08
btrfs: stripe_alloc: drop the mount options, the property is the interface

stripe_alloc and stripe_alloc_allow_rmw were mount options and filesystem
properties both.  Upstream will not take new mount options for this, and the
two interfaces have to be kept in step by hand -- a bug class this series has
already paid for twice, once when the property skipped the mixed-block-group
refusal the option made, and once when the two disagreed about a cache-less
filesystem.

Remove the options.  Nothing is lost:

 - btrfs_stripe_alloc_check_support(), which the property calls, already
   refuses everything btrfs_check_mountopts() refused -- v1 space cache,
   zoned, mixed block groups -- and one thing more, a v1 cache still present
   on disk from an earlier mount.  So the mount-time block was the weaker of
   the two checks, not the stronger.

 - The runtime state is untouched.  BTRFS_MOUNT_STRIPE_ALLOC and
   fs_info->stripe_rmw_opt stay; btrfs_enable_stripe_alloc() and the
   stripe_alloc_allow_rmw property already own them, and every
   btrfs_test_opt(fs_info, STRIPE_ALLOC) in the allocator is unchanged.

 - btrfs_parse_stripe_rmw() and btrfs_show_stripe_rmw() keep their other
   callers in props.c and block-group.c.

The mount-time report collapses to one source, so it no longer has to say
which of two things turned the policy on, and btrfs_fill_super() no longer has
to sample the flag before open_ctree() to tell them apart.  The remount path
loses its report with the option: a remount can no longer change the policy,
and the property announces its own changes.

Enabling the policy is now: mount, then

setfattr -n btrfs.stripe_alloc -v 1 /mnt

on the top-level root directory, which persists across mounts.
The "does not cover raid56 system chunks" warning moves from
btrfs_read_block_groups() to btrfs_enable_stripe_alloc(): block groups are
read before the root directory's properties apply, so with the option gone
the flag was always clear at the old call site and the warning could never
fire (bg-gate-test.sh caught it).

Assisted-by: Claude:claude-opus-5[1m]
Assisted-by: Claude:claude-fable-5-1
fs/btrfs/block-group.c
fs/btrfs/super.c