master - report: add lv_move_pv_uuid field
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=0a01c5aa360db1...
Commit: 0a01c5aa360db1e54b26ad8b9f7ae22abb6cef7b
Parent: f01b7afa19433e4d428478fd0bb5e5a33d45685e
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Mon Sep 21 14:01:41 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Mon Sep 21 14:22:03 2015 +0200
report: add lv_move_pv_uuid field
---
lib/metadata/lv.c | 24 +++++++++++++++++++-----
lib/metadata/lv.h | 1 +
lib/report/columns.h | 1 +
lib/report/properties.c | 2 ++
lib/report/report.c | 32 ++++++++++++++++++++++++++------
5 files changed, 49 insertions(+), 11 deletions(-)
diff --git a/lib/metadata/lv.c b/lib/metadata/lv.c
index 0bd455b..e32564f 100644
--- a/lib/metadata/lv.c
+++ b/lib/metadata/lv.c
@@ -458,11 +458,12 @@ char *lv_convert_lv_dup(struct dm_pool *mem, const struct logical_volume *lv)
return NULL;
}
-char *lv_move_pv_dup(struct dm_pool *mem, const struct logical_volume *lv)
+static char *_do_lv_move_pv_dup(struct dm_pool *mem, const struct logical_volume *lv,
+ int uuid)
{
struct logical_volume *mimage0_lv;
struct lv_segment *seg;
- const struct device *dev;
+ struct pv_segment *pvseg;
dm_list_iterate_items(seg, &lv->segments) {
if (seg->status & PVMOVE) {
@@ -473,17 +474,30 @@ char *lv_move_pv_dup(struct dm_pool *mem, const struct logical_volume *lv)
"Bad pvmove structure");
return NULL;
}
- dev = seg_dev(first_seg(mimage0_lv), 0);
+ pvseg = seg_pvseg(first_seg(mimage0_lv), 0);
} else /* Segment pvmove */
- dev = seg_dev(seg, 0);
+ pvseg = seg_pvseg(seg, 0);
- return dm_pool_strdup(mem, dev_name(dev));
+ if (uuid)
+ return pv_uuid_dup(mem, pvseg->pv);
+ else
+ return pv_name_dup(mem, pvseg->pv);
}
}
return NULL;
}
+char *lv_move_pv_dup(struct dm_pool *mem, const struct logical_volume *lv)
+{
+ return _do_lv_move_pv_dup(mem, lv, 0);
+}
+
+char *lv_move_pv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv)
+{
+ return _do_lv_move_pv_dup(mem, lv, 1);
+}
+
uint64_t lv_origin_size(const struct logical_volume *lv)
{
struct lv_segment *seg;
diff --git a/lib/metadata/lv.h b/lib/metadata/lv.h
index 875bb20..879dfe9 100644
--- a/lib/metadata/lv.h
+++ b/lib/metadata/lv.h
@@ -68,6 +68,7 @@ char *lv_path_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_dmpath_dup(struct dm_pool *mem, const struct logical_volume *lv);
uint64_t lv_origin_size(const struct logical_volume *lv);
char *lv_move_pv_dup(struct dm_pool *mem, const struct logical_volume *lv);
+char *lv_move_pv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_convert_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
int lv_kernel_major(const struct logical_volume *lv);
int lv_kernel_minor(const struct logical_volume *lv);
diff --git a/lib/report/columns.h b/lib/report/columns.h
index 27c1005..9578aac 100644
--- a/lib/report/columns.h
+++ b/lib/report/columns.h
@@ -78,6 +78,7 @@ FIELD(LVS, lv, NUM, "WBehind", lvid, 7, raidwritebehind, raid_write_behind, "For
FIELD(LVS, lv, NUM, "MinSync", lvid, 7, raidminrecoveryrate, raid_min_recovery_rate, "For RAID1, the minimum recovery I/O load in kiB/sec/disk.", 0)
FIELD(LVS, lv, NUM, "MaxSync", lvid, 7, raidmaxrecoveryrate, raid_max_recovery_rate, "For RAID1, the maximum recovery I/O load in kiB/sec/disk.", 0)
FIELD(LVS, lv, STR, "Move", lvid, 4, movepv, move_pv, "For pvmove, Source PV of temporary LV created by pvmove.", 0)
+FIELD(LVS, lv, STR, "Move UUID", lvid, 38, movepvuuid, move_pv_uuid, "For pvmove, the UUID of Source PV of temporary LV created by pvmove.", 0)
FIELD(LVS, lv, STR, "Convert", lvid, 7, convertlv, convert_lv, "For lvconvert, Name of temporary LV created by lvconvert.", 0)
FIELD(LVS, lv, STR, "Log", lvid, 3, loglv, mirror_log, "For mirrors, the LV holding the synchronisation log.", 0)
FIELD(LVS, lv, STR, "Log UUID", lvid, 38, loglvuuid, mirror_log_uuid, "For mirrors, the UUID of the LV holding the synchronisation log.", 0)
diff --git a/lib/report/properties.c b/lib/report/properties.c
index 6f55a56..5363e3d 100644
--- a/lib/report/properties.c
+++ b/lib/report/properties.c
@@ -324,6 +324,8 @@ GET_LV_STR_PROPERTY_FN(raid_sync_action, _raidsyncaction(lv))
#define _raid_sync_action_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(move_pv, lv_move_pv_dup(lv->vg->vgmem, lv))
#define _move_pv_set prop_not_implemented_set
+GET_LV_STR_PROPERTY_FN(move_pv_uuid, lv_move_pv_uuid_dup(lv->vg->vgmem, lv))
+#define _move_pv_uuid_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(convert_lv, lv_convert_lv_dup(lv->vg->vgmem, lv))
#define _convert_lv_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(lv_tags, lv_tags_dup(lv))
diff --git a/lib/report/report.c b/lib/report/report.c
index 4cbf824..b632629 100644
--- a/lib/report/report.c
+++ b/lib/report/report.c
@@ -1907,19 +1907,39 @@ static int _lvdescendants_disp(struct dm_report *rh, struct dm_pool *mem,
return _field_set_string_list(rh, field, descendants.result, private, 0);
}
-static int _movepv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
- struct dm_report_field *field,
- const void *data, void *private __attribute__((unused)))
+static int _do_movepv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)),
+ int uuid)
{
const struct logical_volume *lv = (const struct logical_volume *) data;
- const char *name;
+ const char *repstr;
- if ((name = lv_move_pv_dup(mem, lv)))
- return dm_report_field_string(rh, field, &name);
+ if (uuid)
+ repstr = lv_move_pv_uuid_dup(mem, lv);
+ else
+ repstr = lv_move_pv_dup(mem, lv);
+
+ if (repstr)
+ return dm_report_field_string(rh, field, &repstr);
return _field_set_value(field, "", NULL);
}
+static int _movepv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)))
+{
+ return _do_movepv_disp(rh, mem, field, data, private, 0);
+}
+
+static int _movepvuuid_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)))
+{
+ return _do_movepv_disp(rh, mem, field, data, private, 1);
+}
+
static int _convertlv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
struct dm_report_field *field,
const void *data, void *private __attribute__((unused)))
8 years, 7 months
master - pv: add 'mem' arg for pv_uuid_dup and pv_name_dup
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=f01b7afa19433e...
Commit: f01b7afa19433e4d428478fd0bb5e5a33d45685e
Parent: ffa7b37b281faaafaa5053d292502dafcdbf27f9
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Mon Sep 21 13:38:53 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Mon Sep 21 14:21:42 2015 +0200
pv: add 'mem' arg for pv_uuid_dup and pv_name_dup
---
lib/metadata/pv.c | 8 ++++----
lib/metadata/pv.h | 4 ++--
lib/report/properties.c | 4 ++--
liblvm/lvm_pv.c | 2 +-
4 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/lib/metadata/pv.c b/lib/metadata/pv.c
index 774cedb..ef95175 100644
--- a/lib/metadata/pv.c
+++ b/lib/metadata/pv.c
@@ -29,9 +29,9 @@ char *pv_fmt_dup(const struct physical_volume *pv)
return dm_pool_strdup(pv->vg->vgmem, pv->fmt->name);
}
-char *pv_name_dup(const struct physical_volume *pv)
+char *pv_name_dup(struct dm_pool *mem, const struct physical_volume *pv)
{
- return dm_pool_strdup(pv->vg->vgmem, dev_name(pv->dev));
+ return dm_pool_strdup(mem ? mem : pv->vg->vgmem, dev_name(pv->dev));
}
/*
@@ -42,9 +42,9 @@ struct id pv_id(const struct physical_volume *pv)
return pv_field(pv, id);
}
-char *pv_uuid_dup(const struct physical_volume *pv)
+char *pv_uuid_dup(struct dm_pool *mem, const struct physical_volume *pv)
{
- return id_format_and_copy(pv->vg->vgmem, &pv->id);
+ return id_format_and_copy(mem ? mem : pv->vg->vgmem, &pv->id);
}
char *pv_tags_dup(const struct physical_volume *pv)
diff --git a/lib/metadata/pv.h b/lib/metadata/pv.h
index 2d436cb..565d10e 100644
--- a/lib/metadata/pv.h
+++ b/lib/metadata/pv.h
@@ -68,12 +68,12 @@ struct physical_volume {
};
char *pv_fmt_dup(const struct physical_volume *pv);
-char *pv_name_dup(const struct physical_volume *pv);
+char *pv_name_dup(struct dm_pool *mem, const struct physical_volume *pv);
struct device *pv_dev(const struct physical_volume *pv);
const char *pv_vg_name(const struct physical_volume *pv);
char *pv_attr_dup(struct dm_pool *mem, const struct physical_volume *pv);
const char *pv_dev_name(const struct physical_volume *pv);
-char *pv_uuid_dup(const struct physical_volume *pv);
+char *pv_uuid_dup(struct dm_pool *mem, const struct physical_volume *pv);
char *pv_tags_dup(const struct physical_volume *pv);
uint64_t pv_size(const struct physical_volume *pv);
uint64_t pv_size_field(const struct physical_volume *pv);
diff --git a/lib/report/properties.c b/lib/report/properties.c
index b151190..6f55a56 100644
--- a/lib/report/properties.c
+++ b/lib/report/properties.c
@@ -149,11 +149,11 @@ static dm_percent_t _metadata_percent(const struct logical_volume *lv)
/* PV */
GET_PV_STR_PROPERTY_FN(pv_fmt, pv_fmt_dup(pv))
#define _pv_fmt_set prop_not_implemented_set
-GET_PV_STR_PROPERTY_FN(pv_uuid, pv_uuid_dup(pv))
+GET_PV_STR_PROPERTY_FN(pv_uuid, pv_uuid_dup(pv->vg->vgmem, pv))
#define _pv_uuid_set prop_not_implemented_set
GET_PV_NUM_PROPERTY_FN(dev_size, SECTOR_SIZE * pv_dev_size(pv))
#define _dev_size_set prop_not_implemented_set
-GET_PV_STR_PROPERTY_FN(pv_name, pv_name_dup(pv))
+GET_PV_STR_PROPERTY_FN(pv_name, pv_name_dup(pv->vg->vgmem, pv))
#define _pv_name_set prop_not_implemented_set
GET_PV_NUM_PROPERTY_FN(pv_mda_free, SECTOR_SIZE * pv_mda_free(pv))
#define _pv_mda_free_set prop_not_implemented_set
diff --git a/liblvm/lvm_pv.c b/liblvm/lvm_pv.c
index 5933e0a..fee1e8d 100644
--- a/liblvm/lvm_pv.c
+++ b/liblvm/lvm_pv.c
@@ -37,7 +37,7 @@ const char *lvm_pv_get_uuid(const pv_t pv)
{
const char *rc;
struct saved_env e = store_user_env(pv->vg->cmd);
- rc = pv_uuid_dup(pv);
+ rc = pv_uuid_dup(pv->vg->vgmem, pv);
restore_user_env(&e);
return rc;
}
8 years, 7 months
master - report: add lv_mirror_log_uuid field
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=ffa7b37b281faa...
Commit: ffa7b37b281faaafaa5053d292502dafcdbf27f9
Parent: f61a394be4304fbdbfb94376b4e818b5d64d3cfd
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Mon Sep 21 13:16:48 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Mon Sep 21 14:21:39 2015 +0200
report: add lv_mirror_log_uuid field
---
lib/metadata/lv.c | 24 ++++++++++++++++++++----
lib/metadata/lv.h | 1 +
lib/report/columns.h | 1 +
lib/report/properties.c | 2 ++
lib/report/report.c | 32 ++++++++++++++++++++++++++------
5 files changed, 50 insertions(+), 10 deletions(-)
diff --git a/lib/metadata/lv.c b/lib/metadata/lv.c
index 02fbd79..0bd455b 100644
--- a/lib/metadata/lv.c
+++ b/lib/metadata/lv.c
@@ -308,17 +308,33 @@ char *lv_modules_dup(struct dm_pool *mem, const struct logical_volume *lv)
return tags_format_and_copy(mem, modules);
}
-char *lv_mirror_log_dup(struct dm_pool *mem, const struct logical_volume *lv)
+static char *_do_lv_mirror_log_dup(struct dm_pool *mem, const struct logical_volume *lv,
+ int uuid)
{
struct lv_segment *seg;
- dm_list_iterate_items(seg, &lv->segments)
- if (seg_is_mirrored(seg) && seg->log_lv)
- return dm_pool_strdup(mem, seg->log_lv->name);
+ dm_list_iterate_items(seg, &lv->segments) {
+ if (seg_is_mirrored(seg) && seg->log_lv) {
+ if (uuid)
+ return lv_uuid_dup(mem, seg->log_lv);
+ else
+ return lv_name_dup(mem, seg->log_lv);
+ }
+ }
return NULL;
}
+char *lv_mirror_log_dup(struct dm_pool *mem, const struct logical_volume *lv)
+{
+ return _do_lv_mirror_log_dup(mem, lv, 0);
+}
+
+char *lv_mirror_log_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv)
+{
+ return _do_lv_mirror_log_dup(mem, lv, 1);
+}
+
static char *_do_lv_pool_lv_dup(struct dm_pool *mem, const struct logical_volume *lv,
int uuid)
{
diff --git a/lib/metadata/lv.h b/lib/metadata/lv.h
index 258d826..875bb20 100644
--- a/lib/metadata/lv.h
+++ b/lib/metadata/lv.h
@@ -72,6 +72,7 @@ char *lv_convert_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
int lv_kernel_major(const struct logical_volume *lv);
int lv_kernel_minor(const struct logical_volume *lv);
char *lv_mirror_log_dup(struct dm_pool *mem, const struct logical_volume *lv);
+char *lv_mirror_log_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_data_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_data_lv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_metadata_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
diff --git a/lib/report/columns.h b/lib/report/columns.h
index 4793eb6..27c1005 100644
--- a/lib/report/columns.h
+++ b/lib/report/columns.h
@@ -80,6 +80,7 @@ FIELD(LVS, lv, NUM, "MaxSync", lvid, 7, raidmaxrecoveryrate, raid_max_recovery_r
FIELD(LVS, lv, STR, "Move", lvid, 4, movepv, move_pv, "For pvmove, Source PV of temporary LV created by pvmove.", 0)
FIELD(LVS, lv, STR, "Convert", lvid, 7, convertlv, convert_lv, "For lvconvert, Name of temporary LV created by lvconvert.", 0)
FIELD(LVS, lv, STR, "Log", lvid, 3, loglv, mirror_log, "For mirrors, the LV holding the synchronisation log.", 0)
+FIELD(LVS, lv, STR, "Log UUID", lvid, 38, loglvuuid, mirror_log_uuid, "For mirrors, the UUID of the LV holding the synchronisation log.", 0)
FIELD(LVS, lv, STR, "Data", lvid, 4, datalv, data_lv, "For thin and cache pools, the LV holding the associated data.", 0)
FIELD(LVS, lv, STR, "Data UUID", lvid, 38, datalvuuid, data_lv_uuid, "For thin and cache pools, the UUID of the LV holding the associated data.", 0)
FIELD(LVS, lv, STR, "Meta", lvid, 4, metadatalv, metadata_lv, "For thin and cache pools, the LV holding the associated metadata.", 0)
diff --git a/lib/report/properties.c b/lib/report/properties.c
index d2760f2..b151190 100644
--- a/lib/report/properties.c
+++ b/lib/report/properties.c
@@ -330,6 +330,8 @@ GET_LV_STR_PROPERTY_FN(lv_tags, lv_tags_dup(lv))
#define _lv_tags_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(mirror_log, lv_mirror_log_dup(lv->vg->vgmem, lv))
#define _mirror_log_set prop_not_implemented_set
+GET_LV_STR_PROPERTY_FN(mirror_log_uuid, lv_mirror_log_uuid_dup(lv->vg->vgmem, lv))
+#define _mirror_log_uuid_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(lv_modules, lv_modules_dup(lv->vg->vgmem, lv))
#define _lv_modules_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(data_lv, lv_data_lv_dup(lv->vg->vgmem, lv))
diff --git a/lib/report/report.c b/lib/report/report.c
index 2e1a5ca..4cbf824 100644
--- a/lib/report/report.c
+++ b/lib/report/report.c
@@ -1555,19 +1555,39 @@ static int _segtype_disp(struct dm_report *rh __attribute__((unused)),
return _field_set_value(field, name, NULL);
}
-static int _loglv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
- struct dm_report_field *field,
- const void *data, void *private __attribute__((unused)))
+static int _do_loglv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)),
+ int uuid)
{
const struct logical_volume *lv = (const struct logical_volume *) data;
- const char *name;
+ const char *repstr = NULL;
- if ((name = lv_mirror_log_dup(mem, lv)))
- return dm_report_field_string(rh, field, &name);
+ if (uuid)
+ repstr = lv_mirror_log_uuid_dup(mem, lv);
+ else
+ repstr = lv_mirror_log_dup(mem, lv);
+
+ if (repstr)
+ return dm_report_field_string(rh, field, &repstr);
return _field_set_value(field, "", NULL);
}
+static int _loglv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)))
+{
+ return _do_loglv_disp(rh, mem, field, data, private, 0);
+}
+
+static int _loglvuuid_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)))
+{
+ return _do_loglv_disp(rh, mem, field, data, private, 1);
+}
+
static int _lvname_disp(struct dm_report *rh, struct dm_pool *mem,
struct dm_report_field *field,
const void *data, void *private __attribute__((unused)))
8 years, 7 months
master - report: add lv_data_lv_uuid field
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=f61a394be4304f...
Commit: f61a394be4304fbdbfb94376b4e818b5d64d3cfd
Parent: c2ea5b3dee29b072afc52d99bb6c6723072a36a2
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Mon Sep 21 13:07:28 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Mon Sep 21 14:21:21 2015 +0200
report: add lv_data_lv_uuid field
---
lib/metadata/lv.c | 23 +++++++++++++++++++++--
lib/metadata/lv.h | 1 +
lib/report/columns.h | 1 +
lib/report/properties.c | 2 ++
lib/report/report.c | 29 ++++++++++++++++++++++++-----
5 files changed, 49 insertions(+), 7 deletions(-)
diff --git a/lib/metadata/lv.c b/lib/metadata/lv.c
index 9604751..02fbd79 100644
--- a/lib/metadata/lv.c
+++ b/lib/metadata/lv.c
@@ -347,14 +347,33 @@ char *lv_pool_lv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv)
return _do_lv_pool_lv_dup(mem, lv, 1);
}
-char *lv_data_lv_dup(struct dm_pool *mem, const struct logical_volume *lv)
+static char *_do_lv_data_lv_dup(struct dm_pool *mem, const struct logical_volume *lv,
+ int uuid)
{
struct lv_segment *seg = (lv_is_thin_pool(lv) || lv_is_cache_pool(lv)) ?
first_seg(lv) : NULL;
- return seg ? dm_pool_strdup(mem, seg_lv(seg, 0)->name) : NULL;
+ if (seg) {
+ if (uuid)
+ return lv_uuid_dup(mem, seg_lv(seg, 0));
+ else
+ return lv_name_dup(mem, seg_lv(seg, 0));
+ }
+
+ return NULL;
+}
+
+char *lv_data_lv_dup(struct dm_pool *mem, const struct logical_volume *lv)
+{
+ return _do_lv_data_lv_dup(mem, lv, 0);
+}
+
+char *lv_data_lv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv)
+{
+ return _do_lv_data_lv_dup(mem, lv, 1);
}
+
static char *_do_lv_metadata_lv_dup(struct dm_pool *mem, const struct logical_volume *lv,
int uuid)
{
diff --git a/lib/metadata/lv.h b/lib/metadata/lv.h
index e8ced3b..258d826 100644
--- a/lib/metadata/lv.h
+++ b/lib/metadata/lv.h
@@ -73,6 +73,7 @@ int lv_kernel_major(const struct logical_volume *lv);
int lv_kernel_minor(const struct logical_volume *lv);
char *lv_mirror_log_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_data_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
+char *lv_data_lv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_metadata_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_metadata_lv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_pool_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
diff --git a/lib/report/columns.h b/lib/report/columns.h
index cf12451..4793eb6 100644
--- a/lib/report/columns.h
+++ b/lib/report/columns.h
@@ -81,6 +81,7 @@ FIELD(LVS, lv, STR, "Move", lvid, 4, movepv, move_pv, "For pvmove, Source PV of
FIELD(LVS, lv, STR, "Convert", lvid, 7, convertlv, convert_lv, "For lvconvert, Name of temporary LV created by lvconvert.", 0)
FIELD(LVS, lv, STR, "Log", lvid, 3, loglv, mirror_log, "For mirrors, the LV holding the synchronisation log.", 0)
FIELD(LVS, lv, STR, "Data", lvid, 4, datalv, data_lv, "For thin and cache pools, the LV holding the associated data.", 0)
+FIELD(LVS, lv, STR, "Data UUID", lvid, 38, datalvuuid, data_lv_uuid, "For thin and cache pools, the UUID of the LV holding the associated data.", 0)
FIELD(LVS, lv, STR, "Meta", lvid, 4, metadatalv, metadata_lv, "For thin and cache pools, the LV holding the associated metadata.", 0)
FIELD(LVS, lv, STR, "Meta UUID", lvid, 38, metadatalvuuid, metadata_lv_uuid, "For thin and cache pools, the UUID of the LV holding the associated metadata.", 0)
FIELD(LVS, lv, STR, "Pool", lvid, 4, poollv, pool_lv, "For thin volumes, the thin pool LV for this volume.", 0)
diff --git a/lib/report/properties.c b/lib/report/properties.c
index 24b5ca8..d2760f2 100644
--- a/lib/report/properties.c
+++ b/lib/report/properties.c
@@ -334,6 +334,8 @@ GET_LV_STR_PROPERTY_FN(lv_modules, lv_modules_dup(lv->vg->vgmem, lv))
#define _lv_modules_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(data_lv, lv_data_lv_dup(lv->vg->vgmem, lv))
#define _data_lv_set prop_not_implemented_set
+GET_LV_STR_PROPERTY_FN(data_lv_uuid, lv_data_lv_uuid_dup(lv->vg->vgmem, lv))
+#define _data_lv_uuid_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(metadata_lv, lv_metadata_lv_dup(lv->vg->vgmem, lv))
#define _metadata_lv_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(metadata_lv_uuid, lv_metadata_lv_uuid_dup(lv->vg->vgmem, lv))
diff --git a/lib/report/report.c b/lib/report/report.c
index 14c2d98..2e1a5ca 100644
--- a/lib/report/report.c
+++ b/lib/report/report.c
@@ -1624,19 +1624,38 @@ static int _lvparent_disp(struct dm_report *rh, struct dm_pool *mem,
return _field_set_value(field, repstr, NULL);
}
-static int _datalv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
- struct dm_report_field *field,
- const void *data, void *private __attribute__((unused)))
+static int _do_datalv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)),
+ int uuid)
{
const struct logical_volume *lv = (const struct logical_volume *) data;
const struct lv_segment *seg = (lv_is_pool(lv)) ? first_seg(lv) : NULL;
- if (seg)
- return _lvname_disp(rh, mem, field, seg_lv(seg, 0), private);
+ if (seg) {
+ if (uuid)
+ return _uuid_disp(rh, mem, field, &seg_lv(seg, 0)->lvid.id[1], private);
+ else
+ return _lvname_disp(rh, mem, field, seg_lv(seg, 0), private);
+ }
return _field_set_value(field, "", NULL);
}
+static int _datalv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)))
+{
+ return _do_datalv_disp(rh, mem, field, data, private, 0);
+}
+
+static int _datalvuuid_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)))
+{
+ return _do_datalv_disp(rh, mem, field, data, private, 1);
+}
+
static int _do_metadatalv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
struct dm_report_field *field,
const void *data, void *private __attribute__((unused)),
8 years, 7 months
master - report: add lv_metadata_lv_uuid field
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=c2ea5b3dee29b0...
Commit: c2ea5b3dee29b072afc52d99bb6c6723072a36a2
Parent: 199697accff0658a11420e263c1f85fb74cd39d3
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Mon Sep 21 12:59:08 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Mon Sep 21 14:20:58 2015 +0200
report: add lv_metadata_lv_uuid field
---
lib/metadata/lv.c | 22 ++++++++++++++++++++--
lib/metadata/lv.h | 1 +
lib/report/columns.h | 1 +
lib/report/properties.c | 2 ++
lib/report/report.c | 29 ++++++++++++++++++++++++-----
5 files changed, 48 insertions(+), 7 deletions(-)
diff --git a/lib/metadata/lv.c b/lib/metadata/lv.c
index 7f9f645..9604751 100644
--- a/lib/metadata/lv.c
+++ b/lib/metadata/lv.c
@@ -355,12 +355,30 @@ char *lv_data_lv_dup(struct dm_pool *mem, const struct logical_volume *lv)
return seg ? dm_pool_strdup(mem, seg_lv(seg, 0)->name) : NULL;
}
-char *lv_metadata_lv_dup(struct dm_pool *mem, const struct logical_volume *lv)
+static char *_do_lv_metadata_lv_dup(struct dm_pool *mem, const struct logical_volume *lv,
+ int uuid)
{
struct lv_segment *seg = (lv_is_thin_pool(lv) || lv_is_cache_pool(lv)) ?
first_seg(lv) : NULL;
- return seg ? dm_pool_strdup(mem, seg->metadata_lv->name) : NULL;
+ if (seg) {
+ if (uuid)
+ return lv_uuid_dup(mem, seg->metadata_lv);
+ else
+ return lv_name_dup(mem, seg->metadata_lv);
+ }
+
+ return NULL;
+}
+
+char *lv_metadata_lv_dup(struct dm_pool *mem, const struct logical_volume *lv)
+{
+ return _do_lv_metadata_lv_dup(mem, lv, 0);
+}
+
+char *lv_metadata_lv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv)
+{
+ return _do_lv_metadata_lv_dup(mem, lv, 1);
}
const char *lv_layer(const struct logical_volume *lv)
diff --git a/lib/metadata/lv.h b/lib/metadata/lv.h
index 47eedb2..e8ced3b 100644
--- a/lib/metadata/lv.h
+++ b/lib/metadata/lv.h
@@ -74,6 +74,7 @@ int lv_kernel_minor(const struct logical_volume *lv);
char *lv_mirror_log_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_data_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_metadata_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
+char *lv_metadata_lv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_pool_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_pool_lv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv);
diff --git a/lib/report/columns.h b/lib/report/columns.h
index 2c80904..cf12451 100644
--- a/lib/report/columns.h
+++ b/lib/report/columns.h
@@ -82,6 +82,7 @@ FIELD(LVS, lv, STR, "Convert", lvid, 7, convertlv, convert_lv, "For lvconvert, N
FIELD(LVS, lv, STR, "Log", lvid, 3, loglv, mirror_log, "For mirrors, the LV holding the synchronisation log.", 0)
FIELD(LVS, lv, STR, "Data", lvid, 4, datalv, data_lv, "For thin and cache pools, the LV holding the associated data.", 0)
FIELD(LVS, lv, STR, "Meta", lvid, 4, metadatalv, metadata_lv, "For thin and cache pools, the LV holding the associated metadata.", 0)
+FIELD(LVS, lv, STR, "Meta UUID", lvid, 38, metadatalvuuid, metadata_lv_uuid, "For thin and cache pools, the UUID of the LV holding the associated metadata.", 0)
FIELD(LVS, lv, STR, "Pool", lvid, 4, poollv, pool_lv, "For thin volumes, the thin pool LV for this volume.", 0)
FIELD(LVS, lv, STR, "Pool UUID", lvid, 38, poollvuuid, pool_lv_uuid, "For thin volumes, the UUID of the thin pool LV for this volume.", 0)
FIELD(LVS, lv, STR_LIST, "LV Tags", tags, 7, tags, lv_tags, "Tags, if any.", 0)
diff --git a/lib/report/properties.c b/lib/report/properties.c
index 3654a37..24b5ca8 100644
--- a/lib/report/properties.c
+++ b/lib/report/properties.c
@@ -336,6 +336,8 @@ GET_LV_STR_PROPERTY_FN(data_lv, lv_data_lv_dup(lv->vg->vgmem, lv))
#define _data_lv_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(metadata_lv, lv_metadata_lv_dup(lv->vg->vgmem, lv))
#define _metadata_lv_set prop_not_implemented_set
+GET_LV_STR_PROPERTY_FN(metadata_lv_uuid, lv_metadata_lv_uuid_dup(lv->vg->vgmem, lv))
+#define _metadata_lv_uuid_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(pool_lv, lv_pool_lv_dup(lv->vg->vgmem, lv))
#define _pool_lv_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(pool_lv_uuid, lv_pool_lv_uuid_dup(lv->vg->vgmem, lv))
diff --git a/lib/report/report.c b/lib/report/report.c
index 714f668..14c2d98 100644
--- a/lib/report/report.c
+++ b/lib/report/report.c
@@ -1637,19 +1637,38 @@ static int _datalv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__(
return _field_set_value(field, "", NULL);
}
-static int _metadatalv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
- struct dm_report_field *field,
- const void *data, void *private __attribute__((unused)))
+static int _do_metadatalv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)),
+ int uuid)
{
const struct logical_volume *lv = (const struct logical_volume *) data;
const struct lv_segment *seg = (lv_is_pool(lv)) ? first_seg(lv) : NULL;
- if (seg)
- return _lvname_disp(rh, mem, field, seg->metadata_lv, private);
+ if (seg) {
+ if (uuid)
+ return _uuid_disp(rh, mem, field, &seg->metadata_lv->lvid.id[1], private);
+ else
+ return _lvname_disp(rh, mem, field, seg->metadata_lv, private);
+ }
return _field_set_value(field, "", NULL);
}
+static int _metadatalv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)))
+{
+ return _do_metadatalv_disp(rh, mem, field, data, private, 0);
+}
+
+static int _metadatalvuuid_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)))
+{
+ return _do_metadatalv_disp(rh, mem, field, data, private, 1);
+}
+
static int _do_poollv_disp(struct dm_report *rh, struct dm_pool *mem,
struct dm_report_field *field,
const void *data, void *private,
8 years, 7 months
master - report: add lv_origin_uuid field
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=199697accff065...
Commit: 199697accff0658a11420e263c1f85fb74cd39d3
Parent: cb8f29d1473d993d890387fe24331c9b9fe4713c
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Mon Sep 21 12:44:29 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Mon Sep 21 14:20:36 2015 +0200
report: add lv_origin_uuid field
---
lib/metadata/lv.c | 36 ++++++++++++++++++++++++++----------
lib/metadata/lv.h | 2 ++
lib/report/columns.h | 1 +
lib/report/properties.c | 2 ++
lib/report/report.c | 42 ++++++++++++++++++++++++++++++------------
5 files changed, 61 insertions(+), 22 deletions(-)
diff --git a/lib/metadata/lv.c b/lib/metadata/lv.c
index b3ee72d..7f9f645 100644
--- a/lib/metadata/lv.c
+++ b/lib/metadata/lv.c
@@ -219,21 +219,37 @@ uint32_t lv_kernel_read_ahead(const struct logical_volume *lv)
return info.read_ahead;
}
-char *lv_origin_dup(struct dm_pool *mem, const struct logical_volume *lv)
+static char *_do_lv_origin_dup(struct dm_pool *mem, const struct logical_volume *lv,
+ int uuid)
{
- if (lv_is_cow(lv))
- return lv_name_dup(mem, origin_from_cow(lv));
+ struct logical_volume *origin;
- if (lv_is_cache(lv) && first_seg(lv)->origin)
- return lv_name_dup(mem, first_seg(lv)->origin);
- if (lv_is_thin_volume(lv) && first_seg(lv)->origin)
- return lv_name_dup(mem, first_seg(lv)->origin);
+ if (lv_is_cow(lv))
+ origin = origin_from_cow(lv);
+ else if (lv_is_cache(lv) && first_seg(lv)->origin)
+ origin = first_seg(lv)->origin;
+ 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
+ return NULL;
- if (lv_is_thin_volume(lv) && first_seg(lv)->external_lv)
- return lv_name_dup(mem, first_seg(lv)->external_lv);
+ if (uuid)
+ return lv_uuid_dup(mem, origin);
+ else
+ return lv_name_dup(mem, origin);
+}
- return NULL;
+char *lv_origin_dup(struct dm_pool *mem, const struct logical_volume *lv)
+{
+ return _do_lv_origin_dup(mem, lv, 0);
+}
+
+char *lv_origin_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv)
+{
+ return _do_lv_origin_dup(mem, lv, 1);
}
char *lv_name_dup(struct dm_pool *mem, const struct logical_volume *lv)
diff --git a/lib/metadata/lv.h b/lib/metadata/lv.h
index 3986457..47eedb2 100644
--- a/lib/metadata/lv.h
+++ b/lib/metadata/lv.h
@@ -83,6 +83,8 @@ char *lv_fullname_dup(struct dm_pool *mem, const struct logical_volume *lv);
struct logical_volume *lv_parent(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);
+
uint32_t lv_kernel_read_ahead(const struct logical_volume *lv);
const char *lvseg_name(const struct lv_segment *seg);
uint64_t lvseg_start(const struct lv_segment *seg);
diff --git a/lib/report/columns.h b/lib/report/columns.h
index d704101..2c80904 100644
--- a/lib/report/columns.h
+++ b/lib/report/columns.h
@@ -63,6 +63,7 @@ FIELD(LVS, lv, SIZ, "LSize", size, 5, size64, lv_size, "Size of LV in current un
FIELD(LVS, lv, SIZ, "MSize", lvid, 6, lvmetadatasize, lv_metadata_size, "For thin and cache pools, the size of the LV that holds the metadata.", 0)
FIELD(LVS, lv, NUM, "#Seg", lvid, 4, lvsegcount, seg_count, "Number of segments in LV.", 0)
FIELD(LVS, lv, STR, "Origin", lvid, 6, origin, origin, "For snapshots, the origin device of this LV.", 0)
+FIELD(LVS, lv, STR, "Origin UUID", lvid, 38, originuuid, origin_uuid, "For snapshots, the UUID of origin device of this LV.", 0)
FIELD(LVS, lv, SIZ, "OSize", lvid, 5, originsize, origin_size, "For snapshots, the size of the origin device of this LV.", 0)
FIELD(LVS, lv, STR_LIST, "Ancestors", lvid, 12, lvancestors, lv_ancestors, "Ancestors of this LV.", 0)
FIELD(LVS, lv, STR_LIST, "Descendants", lvid, 12, lvdescendants, lv_descendants, "Descendants of this LV.", 0)
diff --git a/lib/report/properties.c b/lib/report/properties.c
index ec5b415..3654a37 100644
--- a/lib/report/properties.c
+++ b/lib/report/properties.c
@@ -298,6 +298,8 @@ GET_LV_NUM_PROPERTY_FN(seg_count, dm_list_size(&lv->segments))
#define _seg_count_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(origin, lv_origin_dup(lv->vg->vgmem, lv))
#define _origin_set prop_not_implemented_set
+GET_LV_STR_PROPERTY_FN(origin_uuid, lv_origin_uuid_dup(lv->vg->vgmem, lv))
+#define _origin_uuid_set prop_not_implemented_set
GET_LV_NUM_PROPERTY_FN(origin_size, (SECTOR_SIZE * lv_origin_size(lv)))
#define _origin_size_set prop_not_implemented_set
#define _lv_ancestors_set prop_not_implemented_set
diff --git a/lib/report/report.c b/lib/report/report.c
index 26b7eac..714f668 100644
--- a/lib/report/report.c
+++ b/lib/report/report.c
@@ -1709,26 +1709,44 @@ static int _lvdmpath_disp(struct dm_report *rh, struct dm_pool *mem,
return _field_set_value(field, repstr, NULL);
}
-static int _origin_disp(struct dm_report *rh, struct dm_pool *mem,
- struct dm_report_field *field,
- const void *data, void *private)
+static int _do_origin_disp(struct dm_report *rh, struct dm_pool *mem,
+ struct dm_report_field *field,
+ const void *data, void *private,
+ int uuid)
{
const struct logical_volume *lv = (const struct logical_volume *) data;
const struct lv_segment *seg = first_seg(lv);
+ struct logical_volume *origin;
if (lv_is_cow(lv))
- return _lvname_disp(rh, mem, field, origin_from_cow(lv), private);
-
- if (lv_is_cache(lv) && !lv_is_pending_delete(lv))
- return _lvname_disp(rh, mem, field, seg_lv(seg, 0), private);
+ 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
+ return _field_set_value(field, "", NULL);
- if (lv_is_thin_volume(lv) && first_seg(lv)->origin)
- return _lvname_disp(rh, mem, field, first_seg(lv)->origin, private);
+ if (uuid)
+ return _uuid_disp(rh, mem, field, &origin->lvid.id[1], private);
+ else
+ return _lvname_disp(rh, mem, field, origin, private);
+}
- if (lv_is_thin_volume(lv) && first_seg(lv)->external_lv)
- return _lvname_disp(rh, mem, field, first_seg(lv)->external_lv, private);
+static int _origin_disp(struct dm_report *rh, struct dm_pool *mem,
+ struct dm_report_field *field,
+ const void *data, void *private)
+{
+ return _do_origin_disp(rh, mem, field, data, private, 0);
+}
- return _field_set_value(field, "", NULL);
+static int _originuuid_disp(struct dm_report *rh, struct dm_pool *mem,
+ struct dm_report_field *field,
+ const void *data, void *private)
+{
+ return _do_origin_disp(rh, mem, field, data, private, 1);
}
static int _find_ancestors(struct _str_list_append_baton *ancestors,
8 years, 7 months
master - report: add lv_pool_lv_uuid field
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=cb8f29d1473d99...
Commit: cb8f29d1473d993d890387fe24331c9b9fe4713c
Parent: 0e3042f488dd22b99b4ac0705a18bb03ee48a4d3
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Mon Sep 21 12:28:58 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Mon Sep 21 14:20:12 2015 +0200
report: add lv_pool_lv_uuid field
---
lib/metadata/lv.c | 24 ++++++++++++++++++++----
lib/metadata/lv.h | 2 ++
lib/report/columns.h | 1 +
lib/report/properties.c | 2 ++
lib/report/report.c | 29 ++++++++++++++++++++++++-----
5 files changed, 49 insertions(+), 9 deletions(-)
diff --git a/lib/metadata/lv.c b/lib/metadata/lv.c
index 3009149..b3ee72d 100644
--- a/lib/metadata/lv.c
+++ b/lib/metadata/lv.c
@@ -303,18 +303,34 @@ char *lv_mirror_log_dup(struct dm_pool *mem, const struct logical_volume *lv)
return NULL;
}
-char *lv_pool_lv_dup(struct dm_pool *mem, const struct logical_volume *lv)
+static char *_do_lv_pool_lv_dup(struct dm_pool *mem, const struct logical_volume *lv,
+ int uuid)
{
struct lv_segment *seg;
- dm_list_iterate_items(seg, &lv->segments)
+ dm_list_iterate_items(seg, &lv->segments) {
if (seg->pool_lv &&
- (seg_is_thin_volume(seg) || seg_is_cache(seg)))
- return dm_pool_strdup(mem, seg->pool_lv->name);
+ (seg_is_thin_volume(seg) || seg_is_cache(seg))) {
+ if (uuid)
+ return lv_uuid_dup(mem, seg->pool_lv);
+ else
+ return lv_name_dup(mem, seg->pool_lv);
+ }
+ }
return NULL;
}
+char *lv_pool_lv_dup(struct dm_pool *mem, const struct logical_volume *lv)
+{
+ return _do_lv_pool_lv_dup(mem, lv, 0);
+}
+
+char *lv_pool_lv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv)
+{
+ return _do_lv_pool_lv_dup(mem, lv, 1);
+}
+
char *lv_data_lv_dup(struct dm_pool *mem, const struct logical_volume *lv)
{
struct lv_segment *seg = (lv_is_thin_pool(lv) || lv_is_cache_pool(lv)) ?
diff --git a/lib/metadata/lv.h b/lib/metadata/lv.h
index bc82d3e..3986457 100644
--- a/lib/metadata/lv.h
+++ b/lib/metadata/lv.h
@@ -75,6 +75,8 @@ char *lv_mirror_log_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_data_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_metadata_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_pool_lv_dup(struct dm_pool *mem, const struct logical_volume *lv);
+char *lv_pool_lv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv);
+
char *lv_modules_dup(struct dm_pool *mem, const struct logical_volume *lv);
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);
diff --git a/lib/report/columns.h b/lib/report/columns.h
index fe9aad9..d704101 100644
--- a/lib/report/columns.h
+++ b/lib/report/columns.h
@@ -82,6 +82,7 @@ FIELD(LVS, lv, STR, "Log", lvid, 3, loglv, mirror_log, "For mirrors, the LV hold
FIELD(LVS, lv, STR, "Data", lvid, 4, datalv, data_lv, "For thin and cache pools, the LV holding the associated data.", 0)
FIELD(LVS, lv, STR, "Meta", lvid, 4, metadatalv, metadata_lv, "For thin and cache pools, the LV holding the associated metadata.", 0)
FIELD(LVS, lv, STR, "Pool", lvid, 4, poollv, pool_lv, "For thin volumes, the thin pool LV for this volume.", 0)
+FIELD(LVS, lv, STR, "Pool UUID", lvid, 38, poollvuuid, pool_lv_uuid, "For thin volumes, the UUID of the thin pool LV for this volume.", 0)
FIELD(LVS, lv, STR_LIST, "LV Tags", tags, 7, tags, lv_tags, "Tags, if any.", 0)
FIELD(LVS, lv, STR, "LProfile", lvid, 8, lvprofile, lv_profile, "Configuration profile attached to this LV.", 0)
FIELD(LVS, lv, STR, "Lock Args", lvid, 9, lvlockargs, lv_lockargs, "Lock args of the LV used by lvmlockd.", 0)
diff --git a/lib/report/properties.c b/lib/report/properties.c
index 4b2aff5..ec5b415 100644
--- a/lib/report/properties.c
+++ b/lib/report/properties.c
@@ -336,6 +336,8 @@ GET_LV_STR_PROPERTY_FN(metadata_lv, lv_metadata_lv_dup(lv->vg->vgmem, lv))
#define _metadata_lv_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(pool_lv, lv_pool_lv_dup(lv->vg->vgmem, lv))
#define _pool_lv_set prop_not_implemented_set
+GET_LV_STR_PROPERTY_FN(pool_lv_uuid, lv_pool_lv_uuid_dup(lv->vg->vgmem, lv))
+#define _pool_lv_uuid_set prop_not_implemented_set
GET_LV_NUM_PROPERTY_FN(data_percent, _data_percent(lv))
#define _data_percent_set prop_not_implemented_set
GET_LV_NUM_PROPERTY_FN(metadata_percent, _metadata_percent(lv))
diff --git a/lib/report/report.c b/lib/report/report.c
index 1c6ce5b..26b7eac 100644
--- a/lib/report/report.c
+++ b/lib/report/report.c
@@ -1650,20 +1650,39 @@ static int _metadatalv_disp(struct dm_report *rh, struct dm_pool *mem __attribut
return _field_set_value(field, "", NULL);
}
-static int _poollv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
- struct dm_report_field *field,
- const void *data, void *private __attribute__((unused)))
+static int _do_poollv_disp(struct dm_report *rh, struct dm_pool *mem,
+ struct dm_report_field *field,
+ const void *data, void *private,
+ int uuid)
{
const struct logical_volume *lv = (const struct logical_volume *) data;
struct lv_segment *seg = (lv_is_thin_volume(lv) || lv_is_cache(lv)) ?
first_seg(lv) : NULL;
- if (seg)
- return _lvname_disp(rh, mem, field, seg->pool_lv, private);
+ if (seg) {
+ if (uuid)
+ return _uuid_disp(rh, mem, field, &seg->pool_lv->lvid.id[1], private);
+ else
+ return _lvname_disp(rh, mem, field, seg->pool_lv, private);
+ }
return _field_set_value(field, "", NULL);
}
+static int _poollv_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)))
+{
+ return _do_poollv_disp(rh, mem, field, data, private, 0);
+}
+
+static int _poollvuuid_disp(struct dm_report *rh, struct dm_pool *mem,
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)))
+{
+ return _do_poollv_disp(rh, mem, field, data, private, 1);
+}
+
static int _lvpath_disp(struct dm_report *rh, struct dm_pool *mem,
struct dm_report_field *field,
const void *data, void *private __attribute__((unused)))
8 years, 7 months
master - lv: add 'mem' arg for lv_uuid_dup
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=0e3042f488dd22...
Commit: 0e3042f488dd22b99b4ac0705a18bb03ee48a4d3
Parent: f644431346465389bf1aaab0e9880cf0b1751c5a
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Mon Sep 21 12:23:03 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Mon Sep 21 12:25:31 2015 +0200
lv: add 'mem' arg for lv_uuid_dup
---
lib/metadata/lv.c | 4 ++--
lib/metadata/lv.h | 2 +-
lib/report/properties.c | 2 +-
liblvm/lvm_lv.c | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/lib/metadata/lv.c b/lib/metadata/lv.c
index c775077..3009149 100644
--- a/lib/metadata/lv.c
+++ b/lib/metadata/lv.c
@@ -479,9 +479,9 @@ char *lv_dmpath_dup(struct dm_pool *mem, const struct logical_volume *lv)
return repstr;
}
-char *lv_uuid_dup(const struct logical_volume *lv)
+char *lv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv)
{
- return id_format_and_copy(lv->vg->vgmem, &lv->lvid.id[1]);
+ return id_format_and_copy(mem ? mem : lv->vg->vgmem, &lv->lvid.id[1]);
}
char *lv_tags_dup(const struct logical_volume *lv)
diff --git a/lib/metadata/lv.h b/lib/metadata/lv.h
index a2b0f6f..bc82d3e 100644
--- a/lib/metadata/lv.h
+++ b/lib/metadata/lv.h
@@ -62,7 +62,7 @@ uint64_t lv_size(const struct logical_volume *lv);
uint64_t lv_metadata_size(const struct logical_volume *lv);
char *lv_attr_dup_with_info_and_seg_status(struct dm_pool *mem, const struct lv_with_info_and_seg_status *lvdm);
char *lv_attr_dup(struct dm_pool *mem, const struct logical_volume *lv);
-char *lv_uuid_dup(const struct logical_volume *lv);
+char *lv_uuid_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_tags_dup(const struct logical_volume *lv);
char *lv_path_dup(struct dm_pool *mem, const struct logical_volume *lv);
char *lv_dmpath_dup(struct dm_pool *mem, const struct logical_volume *lv);
diff --git a/lib/report/properties.c b/lib/report/properties.c
index e38359b..4b2aff5 100644
--- a/lib/report/properties.c
+++ b/lib/report/properties.c
@@ -264,7 +264,7 @@ GET_PV_NUM_PROPERTY_FN(pv_ba_size, SECTOR_SIZE * pv->ba_size)
#define _cache_write_misses_get prop_not_implemented_get
/* LV */
-GET_LV_STR_PROPERTY_FN(lv_uuid, lv_uuid_dup(lv))
+GET_LV_STR_PROPERTY_FN(lv_uuid, lv_uuid_dup(lv->vg->vgmem, lv))
#define _lv_uuid_set prop_not_implemented_set
GET_LV_STR_PROPERTY_FN(lv_name, lv_name_dup(lv->vg->vgmem, lv))
#define _lv_name_set prop_not_implemented_set
diff --git a/liblvm/lvm_lv.c b/liblvm/lvm_lv.c
index 33af348..95d8492 100644
--- a/liblvm/lvm_lv.c
+++ b/liblvm/lvm_lv.c
@@ -56,7 +56,7 @@ const char *lvm_lv_get_uuid(const lv_t lv)
{
const char *rc;
struct saved_env e = store_user_env(lv->vg->cmd);
- rc = lv_uuid_dup(lv);
+ rc = lv_uuid_dup(lv->vg->vgmem, lv);
restore_user_env(&e);
return rc;
}
8 years, 7 months
master - cleanup: report: reuse existing _uuid_disp fn to report pv_uuid field
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=f6444313464653...
Commit: f644431346465389bf1aaab0e9880cf0b1751c5a
Parent: 83a52c07b7c7f36a084a21cce148061c1e77cd21
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Mon Sep 21 11:34:03 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Mon Sep 21 12:13:01 2015 +0200
cleanup: report: reuse existing _uuid_disp fn to report pv_uuid field
---
lib/report/report.c | 32 +++++++++++++++-----------------
1 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/lib/report/report.c b/lib/report/report.c
index 4fd311a..1c6ce5b 100644
--- a/lib/report/report.c
+++ b/lib/report/report.c
@@ -1271,6 +1271,18 @@ static int _chars_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((
return dm_report_field_string(rh, field, (const char * const *) &data);
}
+static int _uuid_disp(struct dm_report *rh __attribute__((unused)), struct dm_pool *mem,
+ struct dm_report_field *field,
+ const void *data, void *private __attribute__((unused)))
+{
+ char *repstr;
+
+ if (!(repstr = id_format_and_copy(mem, data)))
+ return_0;
+
+ return _field_set_value(field, repstr, NULL);
+}
+
static int _dev_name_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
struct dm_report_field *field,
const void *data, void *private __attribute__((unused)))
@@ -2187,30 +2199,16 @@ static int _vglockargs_disp(struct dm_report *rh, struct dm_pool *mem,
return _string_disp(rh, mem, field, &repstr, private);
}
-static int _uuid_disp(struct dm_report *rh __attribute__((unused)), struct dm_pool *mem,
- struct dm_report_field *field,
- const void *data, void *private __attribute__((unused)))
-{
- char *repstr;
-
- if (!(repstr = id_format_and_copy(mem, data)))
- return_0;
-
- return _field_set_value(field, repstr, NULL);
-}
-
static int _pvuuid_disp(struct dm_report *rh __attribute__((unused)), struct dm_pool *mem,
struct dm_report_field *field,
const void *data, void *private __attribute__((unused)))
{
const struct label *label = (const struct label *) data;
- const char *repstr = "";
- if (label->dev &&
- !(repstr = id_format_and_copy(mem, (const struct id *) label->dev->pvid)))
- return_0;
+ if (!label->dev)
+ return _field_set_value(field, "", NULL);
- return _field_set_value(field, repstr, NULL);
+ return _uuid_disp(rh, mem, field, label->dev->pvid, private);
}
static int _pvmdas_disp(struct dm_report *rh, struct dm_pool *mem,
8 years, 7 months
master - tests: check dmsetup remove --force
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=83a52c07b7c7f3...
Commit: 83a52c07b7c7f36a084a21cce148061c1e77cd21
Parent: 7d1dd5f52d26ebe15dd6de211001ece975be2c7c
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Sep 18 17:34:23 2015 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri Sep 18 17:45:46 2015 +0200
tests: check dmsetup remove --force
---
test/shell/snapshot-remove-dmsetup.sh | 65 +++++++++++++++++++++++++++++++++
1 files changed, 65 insertions(+), 0 deletions(-)
diff --git a/test/shell/snapshot-remove-dmsetup.sh b/test/shell/snapshot-remove-dmsetup.sh
new file mode 100644
index 0000000..b5aad1f
--- /dev/null
+++ b/test/shell/snapshot-remove-dmsetup.sh
@@ -0,0 +1,65 @@
+#!/bin/sh
+# Copyright (C) 2015 Red Hat, Inc. All rights reserved.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions
+# of the GNU General Public License v.2.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# check if 'dmsetup --noflush' will work properly for mounted snapshot
+
+. lib/inittest
+
+which mkfs.ext2 || skip
+
+test -e LOCAL_LVMETAD && skip
+test -e LOCAL_LVMPOLLD && skip
+test -e LOCAL_CLVMD && skip
+
+aux prepare_vg 5
+
+# Create stacked device
+lvcreate --type snapshot -s -L10 -n $lv1 $vg --virtualsize 100M
+aux extend_filter_LVMTEST
+vgcreate $vg1 "$DM_DEV_DIR"/$vg/$lv1
+
+
+lvcreate -L20 -n $lv1 $vg1
+lvcreate -L10 -n snap -s $vg1/$lv1
+
+mkfs.ext2 "$DM_DEV_DIR/$vg1/snap"
+mkdir mnt
+mount -o errors=remount-ro "$DM_DEV_DIR/$vg1/snap" mnt
+
+# intetionally suspend layer bellow
+dmsetup suspend $vg-$lv1
+
+# now this should pass without blocking
+dmsetup suspend --noflush --nolockfs $vg1-snap
+
+# unlock device below
+dmsetup resume $vg-$lv1
+# so this will pass without blocking on udev
+# otherwise --noudevsync would be needed
+dmsetup resume $vg1-snap
+
+
+# Try how force removal works
+dmsetup suspend $vg-$lv1
+# needs to fail as device is still open
+not dmsetup remove --force $vg1-snap
+dmsetup resume $vg-$lv1
+
+# check it really is now 'error' target
+dmsetup table $vg1-snap | tee out
+grep error out
+
+umount mnt || true
+
+lvremove -f $vg1
+
+vgremove -ff $vg1
+vgremove -ff $vg
8 years, 7 months