discover: Add disable param for dm-snapshots
authorSamuel Mendoza-Jonas <sam.mj@au1.ibm.com>
Mon, 17 Aug 2015 04:33:25 +0000 (14:33 +1000)
committerSamuel Mendoza-Jonas <sam.mj@au1.ibm.com>
Tue, 18 Aug 2015 05:31:00 +0000 (15:31 +1000)
Add a debug-style nvram parameter to disallow the use of device-mapper
snapshots.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
discover/devmapper.c
discover/platform-powerpc.c
discover/platform.c
lib/types/types.h
utils/pb-config.c

index 1fd1215d91d802d495869930629dbfed37c01b49..e2ef0b59c279c294355ec28ff6045f150981495e 100644 (file)
@@ -6,6 +6,7 @@
 
 #include "libdevmapper.h"
 #include "devmapper.h"
+#include "platform.h"
 
 #define MERGE_INTERVAL_US      200000
 
@@ -320,6 +321,9 @@ int devmapper_init_snapshot(struct device_handler *handler,
 {
        struct ramdisk_device *ramdisk;
 
+       if (config_get()->disable_snapshots)
+               return 0;
+
        ramdisk = device_handler_get_ramdisk(handler);
        if (!ramdisk) {
                pb_log("No ramdisk available for snapshot %s\n",
index fc96305ad70bc56d71d5e002a5b03617a84a57a6..d45cced422917076e3743917a948fc6beefca170 100644 (file)
@@ -54,6 +54,7 @@ static const char *known_params[] = {
        "petitboot,language",
        "petitboot,debug?",
        "petitboot,write?",
+       "petitboot,snapshots?",
        NULL,
 };
 
@@ -553,6 +554,10 @@ static void populate_config(struct platform_powerpc *platform,
        val = get_param(platform, "petitboot,write?");
        if (val)
                config->allow_writes = !strcmp(val, "true");
+
+       val = get_param(platform, "petitboot,snapshots?");
+       if (val)
+               config->disable_snapshots = !strcmp(val, "false");
 }
 
 static char *iface_config_str(void *ctx, struct interface_config *config)
index b1d0f19bafadd8a1ca1059bfe530c04de26eb801..a6bd74c7a0757b0a2f2de8da38eac4c5e9ce8e81 100644 (file)
@@ -35,6 +35,9 @@ static void dump_config(struct config *config)
        if (config->safe_mode)
                pb_log(" safe mode: active\n");
 
+       if (config->disable_snapshots)
+               pb_log(" dm-snapshots disabled\n");
+
        for (i = 0; i < config->network.n_interfaces; i++) {
                struct interface_config *ifconf =
                        config->network.interfaces[i];
@@ -109,6 +112,7 @@ void config_set_defaults(struct config *config)
        config->safe_mode = false;
        config->lang = NULL;
        config->allow_writes = true;
+       config->disable_snapshots = false;
 
        config->n_autoboot_opts = 2;
        config->autoboot_opts = talloc_array(config, struct autoboot_option,
index f7e47522dcd818d6b2a226e469fd7ee48543f50e..0415206bcb95a657cda3cb6476799ccee6b61baa 100644 (file)
@@ -151,6 +151,7 @@ struct config {
        char                    *lang;
 
        /* not user-settable */
+       bool                    disable_snapshots;
        bool                    safe_mode;
        bool                    debug;
 };
index 009bec742330223ba966f811e680b94e19ea5c7c..c52180b71686dde5f91ab9920accefb481486e88 100644 (file)
@@ -79,6 +79,8 @@ static void print_config(void *ctx, struct config *config, const char *var)
                        config->safe_mode ? "enabled" : "disabled");
        print_one_config(ctx, var, "debug", "%s",
                        config->debug ? "enabled" : "disabled");
+       print_one_config(ctx, var, "dm-snapshots", "%s",
+                       config->disable_snapshots ? "disabled" : "enabled");
 }
 
 int main(int argc, char **argv)