Skip to content

Commit 3510e68

Browse files
fdmananakdave
authored andcommitted
btrfs: clear force-compress on remount when compress mount option is given
After the migration to use fs context for processing mount options we had a slight change in the semantics for remounting a filesystem that was mounted with compress-force. Before we could clear compress-force by passing only "-o compress[=algo]" during a remount, but after that change that does not work anymore, force-compress is still present and one needs to pass "-o compress-force=no,compress[=algo]" to the mount command. Example, when running on a kernel 6.8+: $ mount -o compress-force=zlib:9 /dev/sdi /mnt/sdi $ mount | grep sdi /dev/sdi on /mnt/sdi type btrfs (rw,relatime,compress-force=zlib:9,discard=async,space_cache=v2,subvolid=5,subvol=/) $ mount -o remount,compress=zlib:5 /mnt/sdi $ mount | grep sdi /dev/sdi on /mnt/sdi type btrfs (rw,relatime,compress-force=zlib:5,discard=async,space_cache=v2,subvolid=5,subvol=/) On a 6.7 kernel (or older): $ mount -o compress-force=zlib:9 /dev/sdi /mnt/sdi $ mount | grep sdi /dev/sdi on /mnt/sdi type btrfs (rw,relatime,compress-force=zlib:9,discard=async,space_cache=v2,subvolid=5,subvol=/) $ mount -o remount,compress=zlib:5 /mnt/sdi $ mount | grep sdi /dev/sdi on /mnt/sdi type btrfs (rw,relatime,compress=zlib:5,discard=async,space_cache=v2,subvolid=5,subvol=/) So update btrfs_parse_param() to clear "compress-force" when "compress" is given, providing the same semantics as kernel 6.7 and older. Reported-by: Roman Mamedov <[email protected]> Link: https://lore.kernel.org/linux-btrfs/20241014182416.13d0f8b0@nvm/ CC: [email protected] # 6.8+ Signed-off-by: Filipe Manana <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
1 parent bf9821b commit 3510e68

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

fs/btrfs/super.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,15 @@ static int btrfs_parse_param(struct fs_context *fc, struct fs_parameter *param)
340340
fallthrough;
341341
case Opt_compress:
342342
case Opt_compress_type:
343+
/*
344+
* Provide the same semantics as older kernels that don't use fs
345+
* context, specifying the "compress" option clears
346+
* "force-compress" without the need to pass
347+
* "compress-force=[no|none]" before specifying "compress".
348+
*/
349+
if (opt != Opt_compress_force && opt != Opt_compress_force_type)
350+
btrfs_clear_opt(ctx->mount_opt, FORCE_COMPRESS);
351+
343352
if (opt == Opt_compress || opt == Opt_compress_force) {
344353
ctx->compress_type = BTRFS_COMPRESS_ZLIB;
345354
ctx->compress_level = BTRFS_ZLIB_DEFAULT_LEVEL;

0 commit comments

Comments
 (0)