]> www.infradead.org Git - nvme.git/commitdiff
btrfs: re-introduce 'norecovery' mount option
authorQu Wenruo <wqu@suse.com>
Tue, 21 May 2024 09:57:31 +0000 (19:27 +0930)
committerDavid Sterba <dsterba@suse.com>
Tue, 21 May 2024 13:27:17 +0000 (15:27 +0200)
Although 'norecovery' mount option was marked as deprecated for a long
time and a warning message was printed during the deprecation window,
it's still actively utilized by several projects that need a safer way
to mount a btrfs without any writes.

Furthermore this 'norecovery' mount option is supported by other major
filesystems, which makes it less clear what's our motivation to remove
it.

Re-introduce the 'norecovery' mount option, and output a message to recommend
'rescue=nologreplay' option.

Link: https://lore.kernel.org/linux-btrfs/ZkxZT0J-z0GYvfy8@gardel-login/#t
Link: https://github.com/systemd/systemd/pull/32892
Link: https://bugzilla.suse.com/show_bug.cgi?id=1222429
Reported-by: Lennart Poettering <lennart@poettering.net>
Reported-by: Jiri Slaby <jslaby@suse.com>
Fixes: a1912f712188 ("btrfs: remove code for inode_cache and recovery mount options")
CC: stable@vger.kernel.org # 6.8+
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/super.c

index 2dbc930a20f77131e96a5bfd048c00b9d2be0e20..f05cce7c8b8d1407d0e7e906ec739179e521710d 100644 (file)
@@ -119,6 +119,7 @@ enum {
        Opt_thread_pool,
        Opt_treelog,
        Opt_user_subvol_rm_allowed,
+       Opt_norecovery,
 
        /* Rescue options */
        Opt_rescue,
@@ -245,6 +246,8 @@ static const struct fs_parameter_spec btrfs_fs_parameters[] = {
        __fsparam(NULL, "nologreplay", Opt_nologreplay, fs_param_deprecated, NULL),
        /* Deprecated, with alias rescue=usebackuproot */
        __fsparam(NULL, "usebackuproot", Opt_usebackuproot, fs_param_deprecated, NULL),
+       /* For compatibility only, alias for "rescue=nologreplay". */
+       fsparam_flag("norecovery", Opt_norecovery),
 
        /* Debugging options. */
        fsparam_flag_no("enospc_debug", Opt_enospc_debug),
@@ -438,6 +441,11 @@ static int btrfs_parse_param(struct fs_context *fc, struct fs_parameter *param)
                "'nologreplay' is deprecated, use 'rescue=nologreplay' instead");
                btrfs_set_opt(ctx->mount_opt, NOLOGREPLAY);
                break;
+       case Opt_norecovery:
+               btrfs_info(NULL,
+"'norecovery' is for compatibility only, recommended to use 'rescue=nologreplay'");
+               btrfs_set_opt(ctx->mount_opt, NOLOGREPLAY);
+               break;
        case Opt_flushoncommit:
                if (result.negated)
                        btrfs_clear_opt(ctx->mount_opt, FLUSHONCOMMIT);