]> sourceware.org Git - lvm2.git/commitdiff
striped: Add precise macros for original segtype.
authorAlasdair G Kergon <agk@redhat.com>
Thu, 4 Aug 2016 00:24:39 +0000 (01:24 +0100)
committerAlasdair G Kergon <agk@redhat.com>
Thu, 4 Aug 2016 00:24:39 +0000 (01:24 +0100)
The existing striped macros include raid0 segments.

lib/metadata/raid_manip.c
lib/metadata/segtype.h
lib/striped/striped.c
tools/lvconvert.c

index 9da05e5c8b662cba338a0340f7e9e34f074c08e6..1c03d3795a7220ca8efd06a48b806e6ac387f743 100644 (file)
@@ -2253,7 +2253,7 @@ static int _takeover_unsupported(TAKEOVER_FN_ARGS)
 {
        log_error("Converting the segment type for %s from %s to %s is not supported.",
                  display_lvname(lv), lvseg_name(first_seg(lv)),
-                 (segtype_is_striped(new_segtype) && !segtype_is_any_raid0(new_segtype) &&
+                 (segtype_is_striped_target(new_segtype) &&
                   (new_stripes == 1)) ? SEG_TYPE_NAME_LINEAR : new_segtype->name);
 
        return 0;
@@ -2263,7 +2263,7 @@ static int _takeover_unsupported_yet(const struct logical_volume *lv, const unsi
 {
        log_error("Converting the segment type for %s from %s to %s is not supported yet.",
                  display_lvname(lv), lvseg_name(first_seg(lv)),
-                 (segtype_is_striped(new_segtype) && !segtype_is_any_raid0(new_segtype) &&
+                 (segtype_is_striped_target(new_segtype) &&
                   (new_stripes == 1)) ? SEG_TYPE_NAME_LINEAR : new_segtype->name);
 
        return 0;
@@ -2701,7 +2701,7 @@ static unsigned _segtype_ix(const struct segment_type *segtype, uint32_t area_co
        int i = 2, j;
 
        /* Linear special case */
-       if (segtype_is_striped(segtype) && !segtype_is_any_raid0(segtype)) {
+       if (segtype_is_striped_target(segtype)) {
                if (area_count == 1)
                        return 0;       /* linear */
                return 1;       /* striped */
@@ -2772,7 +2772,7 @@ int lv_raid_convert(struct logical_volume *lv,
 
        log_verbose("Converting %s from %s to %s.",
                    display_lvname(lv), lvseg_name(first_seg(lv)),
-                   (segtype_is_striped(new_segtype) && !segtype_is_any_raid0(new_segtype) &&
+                   (segtype_is_striped_target(new_segtype) &&
                    (new_stripes == 1)) ? SEG_TYPE_NAME_LINEAR : new_segtype->name);
 
        /* FIXME If not active, prompt and activate */
index bf7c5eb3e31e006837200fe6a134be8ae9b583d0..0da2d94fc7a562e55d388a0891678d578902f101 100644 (file)
@@ -68,6 +68,8 @@ struct dev_manager;
 #define SEG_RAID6_N_6          0x0000000800000000ULL
 #define SEG_RAID6              SEG_RAID6_ZR
 
+#define SEG_STRIPED_TARGET     0x0000008000000000ULL
+
 #define SEG_UNKNOWN            0x8000000000000000ULL
 
 #define SEG_TYPE_NAME_LINEAR           "linear"
@@ -98,6 +100,7 @@ struct dev_manager;
 #define SEG_TYPE_NAME_RAID6_ZR         "raid6_zr"
 
 #define segtype_is_linear(segtype)     (!strcmp(segtype->name, SEG_TYPE_NAME_LINEAR))
+#define segtype_is_striped_target(segtype)     ((segtype)->flags & SEG_STRIPED_TARGET ? 1 : 0)
 #define segtype_is_cache(segtype)      ((segtype)->flags & SEG_CACHE ? 1 : 0)
 #define segtype_is_cache_pool(segtype) ((segtype)->flags & SEG_CACHE_POOL ? 1 : 0)
 #define segtype_is_mirrored(segtype)   ((segtype)->flags & SEG_AREAS_MIRRORED ? 1 : 0)
@@ -137,6 +140,7 @@ struct dev_manager;
          segtype_is_thin(segtype) || segtype_is_snapshot(segtype) || \
          (segtype_is_raid(segtype) && !segtype_is_raid1(segtype))) ? 1 : 0)
 
+#define seg_is_striped_target(seg)     segtype_is_striped_target((seg)->segtype)
 #define seg_is_cache(seg)      segtype_is_cache((seg)->segtype)
 #define seg_is_cache_pool(seg) segtype_is_cache_pool((seg)->segtype)
 #define seg_is_linear(seg)     (seg_is_striped(seg) && ((seg)->area_count == 1))
index 530e48eea5c32104bb0291ed908c9db164041844..7d19786e5388ffc9613c70663447931628de323d 100644 (file)
@@ -233,7 +233,7 @@ struct segment_type *init_striped_segtype(struct cmd_context *cmd)
 
        segtype->ops = &_striped_ops;
        segtype->name = SEG_TYPE_NAME_STRIPED;
-       segtype->flags =
+       segtype->flags = SEG_STRIPED_TARGET |
            SEG_CAN_SPLIT | SEG_AREAS_STRIPED | SEG_FORMAT1_SUPPORT;
 
        log_very_verbose("Initialised segtype: %s", segtype->name);
index 0aac89e26c7b6c71cc96e0b111f0912c87b141e6..8ea293de98779b906f32aeb7ce7e88eb7bfb4e5b 100644 (file)
@@ -1925,8 +1925,7 @@ static int _lvconvert_raid(struct logical_volume *lv, struct lvconvert_params *l
                        return 0;
                }
 
-               if (!seg_is_striped(seg) && !seg_is_any_raid0(seg) &&
-                   !lv_raid_percent(lv, &sync_percent)) {
+               if (!seg_is_striped(seg) && !lv_raid_percent(lv, &sync_percent)) {
                        log_error("Unable to determine sync status of %s.",
                                  display_lvname(lv));
                        return 0;
This page took 0.050753 seconds and 5 git commands to generate.