]> sourceware.org Git - lvm2.git/commitdiff
- Ignore suspended devices during repair (Milan).
authorPetr Rockai <prokai@redhat.com>
Mon, 15 Jun 2009 14:47:39 +0000 (14:47 +0000)
committerPetr Rockai <prokai@redhat.com>
Mon, 15 Jun 2009 14:47:39 +0000 (14:47 +0000)
- Call vgreduce --removemissing (without --force) automatically to clean up bad
  PVs (Milan).

daemons/dmeventd/plugins/mirror/dmeventd_mirror.c
tools/lvconvert.c
tools/vgreduce.c

index 4c9fcf5c4537f34ea65348fbd9c8fe3ae485cd74..ab7591d3f0969e4dedfb046cc7ce2c8331259862 100644 (file)
@@ -161,6 +161,12 @@ static int _remove_failed_devices(const char *device)
 
        r = lvm2_run(_lvm_handle, cmd_str);
 
+       if (r == 1) {
+               snprintf(cmd_str, CMD_SIZE, "vgreduce --removemissing %s", vg);
+               if (lvm2_run(_lvm_handle, cmd_str) != 1)
+                       syslog(LOG_ERR, "Unable to remove failed PVs from VG %s", vg);
+       }
+
        dm_pool_empty(_mem_pool);  /* FIXME: not safe with multiple threads */
        return (r == 1) ? 0 : -1;
 }
index 73aa6b2754e517ff01a36c28d09b2c7554dd8b58..b3d4d0686a94a0851179e589283119f83d97f650 100644 (file)
@@ -926,18 +926,22 @@ int lvconvert(struct cmd_context * cmd, int argc, char **argv)
        struct lvconvert_params lp;
        int ret = ECMD_FAILED;
        struct lvinfo info;
+       int saved_ignore_suspended_devices = ignore_suspended_devices();
 
        if (!_read_params(&lp, cmd, argc, argv)) {
                stack;
                return EINVALID_CMD_LINE;
        }
 
+       if (arg_count(cmd, repair_ARG))
+               init_ignore_suspended_devices(1);
+
        log_verbose("Checking for existing volume group \"%s\"", lp.vg_name);
 
        if (!(vg = vg_lock_and_read(cmd, lp.vg_name, NULL, LCK_VG_WRITE,
                                    CLUSTERED | EXPORTED_VG | LVM_WRITE,
                                    CORRECT_INCONSISTENT)))
-               return ECMD_FAILED;
+               goto out;
 
        if (!(lvl = find_lv_in_vg(vg, lp.lv_name))) {
                log_error("Logical volume \"%s\" not found in "
@@ -966,6 +970,7 @@ bad:
                                     lp.wait_completion ? 0 : 1U);
        }
 out:
+       init_ignore_suspended_devices(saved_ignore_suspended_devices);
        vg_release(vg);
        return ret;
 }
index 014d33793a224f64a51a39623f5e56ea15aacca6..1428a991d87a8100c7e32dcb16952c3b807d03d8 100644 (file)
@@ -466,6 +466,7 @@ int vgreduce(struct cmd_context *cmd, int argc, char **argv)
        int consistent = 1;
        int fixed = 1;
        int repairing = arg_count(cmd, removemissing_ARG);
+       int saved_ignore_suspended_devices = ignore_suspended_devices();
 
        if (!argc && !repairing) {
                log_error("Please give volume group name and "
@@ -515,6 +516,9 @@ int vgreduce(struct cmd_context *cmd, int argc, char **argv)
                return ECMD_FAILED;
        }
 
+       if (repairing)
+               init_ignore_suspended_devices(1);
+
        if ((!(vg = vg_read_internal(cmd, vg_name, NULL, &consistent)) || !consistent)
            && !repairing) {
                log_error("Volume group \"%s\" doesn't exist", vg_name);
@@ -574,6 +578,7 @@ int vgreduce(struct cmd_context *cmd, int argc, char **argv)
 
        }
 out:
+       init_ignore_suspended_devices(saved_ignore_suspended_devices);
        unlock_and_release_vg(cmd, vg, vg_name);
 
        return ret;
This page took 0.045995 seconds and 5 git commands to generate.