]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Manage.c
imsm: move expand verification code into new function
[thirdparty/mdadm.git] / Manage.c
index 6184d3f74a3973078aa2c8aac6a8d301d82e649f..f54de7c685ef76425eaa86896cb254cd15fec2bf 100644 (file)
--- a/Manage.c
+++ b/Manage.c
@@ -461,17 +461,6 @@ done:
                goto out;
        }
 
-       if (get_linux_version() < 2006028) {
-               /* prior to 2.6.28, KOBJ_CHANGE was not sent when an md array
-                * was stopped, so We'll do it here just to be sure.  Drop any
-                * partitions as well...
-                */
-               if (fd >= 0)
-                       ioctl(fd, BLKRRPART, 0);
-               if (mdi)
-                       sysfs_uevent(mdi, "change");
-       }
-
        if (devnm[0] && use_udev()) {
                struct map_ent *mp = map_by_devnm(&map, devnm);
                remove_devices(devnm, mp ? mp->path : NULL);
@@ -621,12 +610,6 @@ int attempt_re_add(int fd, int tfd, struct mddev_dev *dv,
                 * though.
                 */
                mdu_disk_info_t disc;
-               /* re-add doesn't work for version-1 superblocks
-                * before 2.6.18 :-(
-                */
-               if (array->major_version == 1 &&
-                   get_linux_version() <= 2006018)
-                       goto skip_re_add;
                disc.number = mdi.disk.number;
                if (md_get_disk_info(fd, &disc) != 0 ||
                    disc.major != 0 || disc.minor != 0)
@@ -1327,38 +1310,54 @@ bool is_remove_safe(mdu_array_info_t *array, const int fd, char *devname, const
        return is_enough;
 }
 
+/**
+ * Manage_subdevs() - Execute operation depending on devmode.
+ *
+ * @devname: name of the device.
+ * @fd: file descriptor.
+ * @devlist: list of sub-devices to manage.
+ * @verbose: verbose level.
+ * @test: test flag.
+ * @update: type of update.
+ * @force: force flag.
+ *
+ * This function executes operation defined by devmode
+ * for each dev from devlist.
+ * Devmode can be:
+ * 'a' - add the device
+ * 'S' - add the device as a spare - don't try re-add
+ * 'j' - add the device as a journal device
+ * 'A' - re-add the device
+ * 'r' - remove the device: HOT_REMOVE_DISK
+ *       device can be 'faulty' or 'detached' in which case all
+ *       matching devices are removed.
+ * 'f' - set the device faulty SET_DISK_FAULTY
+ *       device can be 'detached' in which case any device that
+ *       is inaccessible will be marked faulty.
+ * 'I' - remove device by using incremental fail
+ *       which is executed when device is removed surprisingly.
+ * 'R' - mark this device as wanting replacement.
+ * 'W' - this device is added if necessary and activated as
+ *       a replacement for a previous 'R' device.
+ * -----
+ * 'w' - 'W' will be changed to 'w' when it is paired with
+ *       a 'R' device.  If a 'W' is found while walking the list
+ *       it must be unpaired, and is an error.
+ * 'M' - this is created by a 'missing' target.  It is a slight
+ *       variant on 'A'
+ * 'F' - Another variant of 'A', where the device was faulty
+ *       so must be removed from the array first.
+ * 'c' - confirm the device as found (for clustered environments)
+ *
+ * For 'f' and 'r', the device can also be a kernel-internal
+ * name such as 'sdb'.
+ *
+ * Return: 0 on success, otherwise 1 or 2.
+ */
 int Manage_subdevs(char *devname, int fd,
                   struct mddev_dev *devlist, int verbose, int test,
                   enum update_opt update, int force)
 {
-       /* Do something to each dev.
-        * devmode can be
-        *  'a' - add the device
-        *  'S' - add the device as a spare - don't try re-add
-        *  'j' - add the device as a journal device
-        *  'A' - re-add the device
-        *  'r' - remove the device: HOT_REMOVE_DISK
-        *        device can be 'faulty' or 'detached' in which case all
-        *        matching devices are removed.
-        *  'f' - set the device faulty SET_DISK_FAULTY
-        *        device can be 'detached' in which case any device that
-        *        is inaccessible will be marked faulty.
-        *  'R' - mark this device as wanting replacement.
-        *  'W' - this device is added if necessary and activated as
-        *        a replacement for a previous 'R' device.
-        * -----
-        *  'w' - 'W' will be changed to 'w' when it is paired with
-        *        a 'R' device.  If a 'W' is found while walking the list
-        *        it must be unpaired, and is an error.
-        *  'M' - this is created by a 'missing' target.  It is a slight
-        *        variant on 'A'
-        *  'F' - Another variant of 'A', where the device was faulty
-        *        so must be removed from the array first.
-        *  'c' - confirm the device as found (for clustered environments)
-        *
-        * For 'f' and 'r', the device can also be a kernel-internal
-        * name such as 'sdb'.
-        */
        mdu_array_info_t array;
        unsigned long long array_size;
        struct mddev_dev *dv;