]> sourceware.org Git - lvm2.git/commitdiff
lvchange: resync attempts on raid0 cause segfaults
authorHeinz Mauelshagen <heinzm@redhat.com>
Tue, 12 Jul 2016 15:20:38 +0000 (17:20 +0200)
committerHeinz Mauelshagen <heinzm@redhat.com>
Tue, 12 Jul 2016 15:23:05 +0000 (17:23 +0200)
Resync attempts on raid0/raid0_meta via 'lvchange --resync ...'
cause segfaults.

'lvchange --syncaction ...' doesn't get rejected either.

Prohibit both on raid0/raid0_meta LVs.

- resolves rhbz1354656

tools/lvchange.c

index c5461f9f117b396be63d568233947848e30bc315..4b02ba951995caad26f2b4c77c956f96b364145e 100644 (file)
@@ -326,8 +326,9 @@ static int _lvchange_resync(struct cmd_context *cmd, struct logical_volume *lv)
 
        dm_list_init(&device_list);
 
-       if (!seg_is_mirror(seg) && !seg_is_raid(seg)) {
-               log_error("Unable to resync %s.  It is not RAID or mirrored.",
+       if (seg_is_any_raid0(seg) ||
+           (!seg_is_mirror(seg) && !seg_is_raid(seg))) {
+               log_error("Unable to resync %s.  It is not RAID4/5/6/10 or mirrored.",
                          display_lvname(lv));
                return 0;
        }
@@ -1179,9 +1180,17 @@ static int _lvchange_single(struct cmd_context *cmd, struct logical_volume *lv,
            !_lvchange_resync(cmd, lv))
                return_ECMD_FAILED;
 
-       if (arg_is_set(cmd, syncaction_ARG) &&
-           !lv_raid_message(lv, arg_str_value(cmd, syncaction_ARG, NULL)))
-               return_ECMD_FAILED;
+       if (arg_is_set(cmd, syncaction_ARG)) {
+               struct lv_segment *seg = first_seg(lv);
+
+               if (seg_is_any_raid0(seg)) {
+                       log_error("Unable to sync raid0 LV %s.", display_lvname(lv));
+                       return_ECMD_FAILED;
+               }
+               
+               if (!lv_raid_message(lv, arg_str_value(cmd, syncaction_ARG, NULL)))
+                       return_ECMD_FAILED;
+       }
 
        /* activation change */
        if (arg_is_set(cmd, activate_ARG)) {
This page took 0.040365 seconds and 5 git commands to generate.