mirror of
https://github.com/torvalds/linux
synced 2024-11-03 01:56:01 +00:00
btrfs: fix messages after changing compression level by remount
Reported by Forza on IRC that remounting with compression options does not reflect the change in level, or at least it does not appear to do so according to the messages: mount -o compress=zstd:1 /dev/sda /mnt mount -o remount,compress=zstd:15 /mnt does not print the change to the level to syslog: [ 41.366060] BTRFS info (device vda): use zstd compression, level 1 [ 41.368254] BTRFS info (device vda): disk space caching is enabled [ 41.390429] BTRFS info (device vda): disk space caching is enabled What really happens is that the message is lost but the level is actualy changed. There's another weird output, if compression is reset to 'no': [ 45.413776] BTRFS info (device vda): use no compression, level 4 To fix that, save the previous compression level and print the message in that case too and use separate message for 'no' compression. CC: stable@vger.kernel.org # 4.19+ Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
bf53d4687b
commit
27942c9971
1 changed files with 9 additions and 5 deletions
|
@ -517,6 +517,7 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
char *compress_type;
|
||||
bool compress_force = false;
|
||||
enum btrfs_compression_type saved_compress_type;
|
||||
int saved_compress_level;
|
||||
bool saved_compress_force;
|
||||
int no_compress = 0;
|
||||
|
||||
|
@ -598,6 +599,7 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
info->compress_type : BTRFS_COMPRESS_NONE;
|
||||
saved_compress_force =
|
||||
btrfs_test_opt(info, FORCE_COMPRESS);
|
||||
saved_compress_level = info->compress_level;
|
||||
if (token == Opt_compress ||
|
||||
token == Opt_compress_force ||
|
||||
strncmp(args[0].from, "zlib", 4) == 0) {
|
||||
|
@ -642,6 +644,8 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
no_compress = 0;
|
||||
} else if (strncmp(args[0].from, "no", 2) == 0) {
|
||||
compress_type = "no";
|
||||
info->compress_level = 0;
|
||||
info->compress_type = 0;
|
||||
btrfs_clear_opt(info->mount_opt, COMPRESS);
|
||||
btrfs_clear_opt(info->mount_opt, FORCE_COMPRESS);
|
||||
compress_force = false;
|
||||
|
@ -662,11 +666,11 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
*/
|
||||
btrfs_clear_opt(info->mount_opt, FORCE_COMPRESS);
|
||||
}
|
||||
if ((btrfs_test_opt(info, COMPRESS) &&
|
||||
(info->compress_type != saved_compress_type ||
|
||||
compress_force != saved_compress_force)) ||
|
||||
(!btrfs_test_opt(info, COMPRESS) &&
|
||||
no_compress == 1)) {
|
||||
if (no_compress == 1) {
|
||||
btrfs_info(info, "use no compression");
|
||||
} else if ((info->compress_type != saved_compress_type) ||
|
||||
(compress_force != saved_compress_force) ||
|
||||
(info->compress_level != saved_compress_level)) {
|
||||
btrfs_info(info, "%s %s compression, level %d",
|
||||
(compress_force) ? "force" : "use",
|
||||
compress_type, info->compress_level);
|
||||
|
|
Loading…
Reference in a new issue