]> sourceware.org Git - lvm2.git/commitdiff
lv: add common lv_origin_lv fn for use in report and dup, use brackets for invisible...
authorPeter Rajnoha <prajnoha@redhat.com>
Tue, 12 Jan 2016 09:52:34 +0000 (10:52 +0100)
committerPeter Rajnoha <prajnoha@redhat.com>
Wed, 13 Jan 2016 10:19:45 +0000 (11:19 +0100)
The common lv_origin_lv fn avoids code duplication and also
the reporting part now uses _lvname_disp and _uuid_disp to display
name and uuid respectively, including brackets for the name if the
dev is invisible.

lib/metadata/lv.c
lib/metadata/lv.h
lib/report/report.c

index e1cf5cd2bb0bdbf3d0ad1c653ad3a35760a0e8ef..a190ae0b4c0085820d019c305f69404f95df80eb 100644 (file)
@@ -236,11 +236,9 @@ uint32_t lv_kernel_read_ahead(const struct logical_volume *lv)
        return info.read_ahead;
 }
 
-static char *_do_lv_origin_dup(struct dm_pool *mem, const struct logical_volume *lv,
-                              int uuid)
+struct logical_volume *lv_origin_lv(const struct logical_volume *lv)
 {
-       struct logical_volume *origin;
-
+       struct logical_volume *origin = NULL;
 
        if (lv_is_cow(lv))
                origin = origin_from_cow(lv);
@@ -250,13 +248,22 @@ static char *_do_lv_origin_dup(struct dm_pool *mem, const struct logical_volume
                origin = first_seg(lv)->origin;
        else if (lv_is_thin_volume(lv) && first_seg(lv)->external_lv)
                origin = first_seg(lv)->external_lv;
-       else
+
+       return origin;
+}
+
+static char *_do_lv_origin_dup(struct dm_pool *mem, const struct logical_volume *lv,
+                              int uuid)
+{
+       struct logical_volume *origin_lv = lv_origin_lv(lv);
+
+       if (!lv)
                return NULL;
 
        if (uuid)
-               return lv_uuid_dup(mem, origin);
+               return lv_uuid_dup(mem, origin_lv);
        else
-               return lv_name_dup(mem, origin);
+               return lv_name_dup(mem, origin_lv);
 }
 
 char *lv_origin_dup(struct dm_pool *mem, const struct logical_volume *lv)
index afecd0a18d789d5bf592d084d4d608006149267e..e346059e52042d75b5ce0dff98b71b44b3171496 100644 (file)
@@ -87,6 +87,7 @@ char *lv_name_dup(struct dm_pool *mem, const struct logical_volume *lv);
 char *lv_fullname_dup(struct dm_pool *mem, const struct logical_volume *lv);
 struct logical_volume *lv_parent(const struct logical_volume *lv);
 struct logical_volume *lv_convert_lv(const struct logical_volume *lv);
+struct logical_volume *lv_origin_lv(const struct logical_volume *lv);
 char *lv_parent_dup(struct dm_pool *mem, const struct logical_volume *lv);
 char *lv_origin_dup(struct dm_pool *mem, const struct logical_volume *lv);
 char *lv_origin_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv);
index dad163bee01cedd291d4eb1a60e6fc41c2dac067..9ffaf73321209ff2081d1699154d848002e5f335 100644 (file)
@@ -1795,24 +1795,15 @@ static int _do_origin_disp(struct dm_report *rh, struct dm_pool *mem,
                           int uuid)
 {
        const struct logical_volume *lv = (const struct logical_volume *) data;
-       const struct lv_segment *seg = first_seg(lv);
-       struct logical_volume *origin;
+       struct logical_volume *origin_lv = lv_origin_lv(lv);
 
-       if (lv_is_cow(lv))
-               origin = origin_from_cow(lv);
-       else if (lv_is_cache(lv) && !lv_is_pending_delete(lv))
-               origin = seg_lv(seg, 0);
-       else if (lv_is_thin_volume(lv) && first_seg(lv)->origin)
-               origin = first_seg(lv)->origin;
-       else if (lv_is_thin_volume(lv) && first_seg(lv)->external_lv)
-               origin = first_seg(lv)->external_lv;
-       else
+       if (!origin_lv)
                return _field_set_value(field, "", NULL);
 
        if (uuid)
-               return _uuid_disp(rh, mem, field, &origin->lvid.id[1], private);
+               return _uuid_disp(rh, mem, field, &origin_lv->lvid.id[1], private);
        else
-               return _lvname_disp(rh, mem, field, origin, private);
+               return _lvname_disp(rh, mem, field, origin_lv, private);
 }
 
 static int _origin_disp(struct dm_report *rh, struct dm_pool *mem,
This page took 0.040156 seconds and 5 git commands to generate.