summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlasdair G Kergon <agk@redhat.com>2015-03-18 23:31:46 +0000
committerAlasdair G Kergon <agk@redhat.com>2015-03-18 23:31:46 +0000
commit5bf74f2997cedb481e0fac21e3aa30fc61f8e5b1 (patch)
treede1c3bf3e9a62096d09e0074675e82b13b611789
parent87941ccd1706ac9818f0f4828cade1d4cfae622d (diff)
downloadlvm2-5bf74f2997cedb481e0fac21e3aa30fc61f8e5b1.tar.gz
pvs: Hide inaccessible clustered PVs.
Inaccessible clustered PVs can be hidden from pvs -a in the same way as foreign PVs, rather than showing them as if they do not belong to a VG.
-rw-r--r--WHATS_NEW1
-rw-r--r--tools/toollib.c15
2 files changed, 14 insertions, 2 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 2e50b1844..b1829250d 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.118 -
=================================
+ Remove inaccessible clustered PVs from 'pvs -a'.
Don't invalidate cached orphan information while global lock is held.
Avoid rescan of all devices when requested pvscan for removed device.
Measure configuration timestamps with nanoseconds when available.
diff --git a/tools/toollib.c b/tools/toollib.c
index 12fe1e249..98e58798b 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -175,6 +175,7 @@ const char *skip_dev_dir(struct cmd_context *cmd, const char *vg_name,
* and the command option has been used to ignore clustered vgs.
*
* Case c covers the other errors returned when reading the VG.
+ * If *skip is 1, it's OK for the caller to read the list of PVs in the VG.
*/
static int _ignore_vg(struct volume_group *vg, const char *vg_name,
struct dm_list *arg_vgnames, int allow_inconsistent, int *skip)
@@ -211,7 +212,14 @@ static int _ignore_vg(struct volume_group *vg, const char *vg_name,
}
}
+ if ((read_error == FAILED_CLUSTERED)) {
+ *skip = 1;
+ stack; /* Error already logged */
+ return 1;
+ }
+
if (read_error != SUCCESS) {
+ *skip = 0;
log_error("Cannot process volume group %s", vg_name);
return 1;
}
@@ -2718,8 +2726,11 @@ static int _process_pvs_in_vgs(struct cmd_context *cmd, uint32_t flags,
if (_ignore_vg(vg, vg_name, NULL, flags & READ_ALLOW_INCONSISTENT, &skip)) {
stack;
ret_max = ECMD_FAILED;
- release_vg(vg);
- continue;
+ if (!skip) {
+ release_vg(vg);
+ continue;
+ }
+ /* Drop through to eliminate a clustered VG's PVs from the devices list */
}
/*