]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
imsm: Warn user about reboot risk
authorAdam Kwolek <adam.kwolek@intel.com>
Wed, 6 Apr 2011 02:38:50 +0000 (12:38 +1000)
committerNeilBrown <neilb@suse.de>
Wed, 6 Apr 2011 02:38:50 +0000 (12:38 +1000)
Current check-pointing implementation doesn't allow for interrupting reshape of boot arrays
due to checkpoint restore has to be done before system start.
There is problem with passing backup file name to array automatically mounted during boot time,
especially when scan mode is used.

Until IMSM check-pointing implementation will be introduced, warning about reboot risk
should be placed in mdadm.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
super-intel.c

index 62ccd150db6e7e316e4d8d01ee5553ad7eb366cb..010226db9abbffb5cd0682e929cef78aa0e621cc 100644 (file)
@@ -7251,6 +7251,30 @@ int imsm_takeover(struct supertype *st, struct geo_params *geo)
        return 0;
 }
 
+static int warn_user_about_risk(void)
+{
+       int rv = 0;
+
+       fprintf(stderr,
+               "\nThis is an experimental feature. Data on the RAID volume(s) "
+               "can be lost!!!\n\n"
+               "To continue command execution please make sure that\n"
+               "the grow process will not be interrupted. Use safe power\n"
+               "supply to avoid unexpected system reboot. Make sure that\n"
+               "reshaped container is not assembled automatically during\n"
+               "system boot.\n"
+               "If reshape is interrupted, assemble array manually\n"
+               "using e.g. '-Ac' option and up to date mdadm.conf file.\n"
+               "Assembly in scan mode is not possible in such case.\n"
+               "Growing container with boot array is not possible.\n"
+               "If boot array reshape is interrupted, whole file system\n"
+               "can be lost.\n\n");
+       rv = ask("Do you want to continue? ");
+       fprintf(stderr, "\n");
+
+       return rv;
+}
+
 static int imsm_reshape_super(struct supertype *st, long long size, int level,
                              int layout, int chunksize, int raid_disks,
                              int delta_disks, char *backup, char *dev,
@@ -7283,6 +7307,14 @@ static int imsm_reshape_super(struct supertype *st, long long size, int level,
                /* On container level we can only increase number of devices. */
                dprintf("imsm: info: Container operation\n");
                int old_raid_disks = 0;
+
+               /* this warning will be removed when imsm checkpointing
+                * will be implemented, and restoring from check-point
+                * operation will be transparent for reboot process
+                */
+               if (warn_user_about_risk() == 0)
+                       return ret_val;
+
                if (imsm_reshape_is_allowed_on_container(
                            st, &geo, &old_raid_disks)) {
                        struct imsm_update_reshape *u = NULL;