|
 |
26e710 |
lib/commands/toolcontext.h | 1 +
|
|
 |
26e710 |
lib/metadata/metadata-exported.h | 1 -
|
|
 |
26e710 |
lib/metadata/metadata.c | 42 ++++++++++++++++++++++----------
|
|
 |
26e710 |
tools/command.c | 1 +
|
|
 |
26e710 |
tools/commands.h | 29 +++++++++++-----------
|
|
 |
26e710 |
tools/lvmcmdline.c | 2 ++
|
|
 |
26e710 |
tools/pvchange.c | 7 +-----
|
|
 |
26e710 |
tools/pvresize.c | 7 +-----
|
|
 |
26e710 |
tools/toollib.c | 52 +++++++++++++++++++++++++++++++---------
|
|
 |
26e710 |
tools/tools.h | 2 ++
|
|
 |
26e710 |
tools/vgchange.c | 22 ++++-------------
|
|
 |
26e710 |
tools/vgck.c | 3 ---
|
|
 |
26e710 |
tools/vgimport.c | 6 ++---
|
|
 |
26e710 |
tools/vgimportclone.c | 4 ++--
|
|
 |
26e710 |
tools/vgreduce.c | 5 ++--
|
|
 |
26e710 |
tools/vgremove.c | 3 ---
|
|
 |
26e710 |
tools/vgrename.c | 3 +--
|
|
 |
26e710 |
tools/vgsplit.c | 12 ++++++++--
|
|
 |
26e710 |
18 files changed, 115 insertions(+), 87 deletions(-)
|
|
 |
26e710 |
|
|
 |
26e710 |
diff --git a/lib/commands/toolcontext.h b/lib/commands/toolcontext.h
|
|
 |
26e710 |
index 6e4530c..488752c 100644
|
|
 |
26e710 |
--- a/lib/commands/toolcontext.h
|
|
 |
26e710 |
+++ b/lib/commands/toolcontext.h
|
|
 |
26e710 |
@@ -148,6 +148,7 @@ struct cmd_context {
|
|
 |
26e710 |
unsigned unknown_system_id:1;
|
|
 |
26e710 |
unsigned include_historical_lvs:1; /* also process/report/display historical LVs */
|
|
 |
26e710 |
unsigned record_historical_lvs:1; /* record historical LVs */
|
|
 |
26e710 |
+ unsigned include_exported_vgs:1;
|
|
 |
26e710 |
unsigned include_foreign_vgs:1; /* report/display cmds can reveal foreign VGs */
|
|
 |
26e710 |
unsigned include_shared_vgs:1; /* report/display cmds can reveal lockd VGs */
|
|
 |
26e710 |
unsigned include_active_foreign_vgs:1; /* cmd should process foreign VGs with active LVs */
|
|
 |
26e710 |
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
|
|
 |
26e710 |
index 9029d3f..77b971b 100644
|
|
 |
26e710 |
--- a/lib/metadata/metadata-exported.h
|
|
 |
26e710 |
+++ b/lib/metadata/metadata-exported.h
|
|
 |
26e710 |
@@ -181,7 +181,6 @@
|
|
 |
26e710 |
#define MIRROR_SKIP_INIT_SYNC 0x00000010U /* skip initial sync */
|
|
 |
26e710 |
|
|
 |
26e710 |
/* vg_read and vg_read_for_update flags */
|
|
 |
26e710 |
-#define READ_ALLOW_EXPORTED 0x00020000U
|
|
 |
26e710 |
#define READ_OK_NOTFOUND 0x00040000U
|
|
 |
26e710 |
#define READ_WARN_INCONSISTENT 0x00080000U
|
|
 |
26e710 |
#define READ_FOR_UPDATE 0x00100000U /* A meta-flag, useful with toollib for_each_* functions. */
|
|
 |
26e710 |
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
|
|
 |
26e710 |
index 039a7d6..dc1b501 100644
|
|
 |
26e710 |
--- a/lib/metadata/metadata.c
|
|
 |
26e710 |
+++ b/lib/metadata/metadata.c
|
|
 |
26e710 |
@@ -593,9 +593,6 @@ int vg_remove_check(struct volume_group *vg)
|
|
 |
26e710 |
return 0;
|
|
 |
26e710 |
}
|
|
 |
26e710 |
|
|
 |
26e710 |
- if (!vg_check_status(vg, EXPORTED_VG))
|
|
 |
26e710 |
- return 0;
|
|
 |
26e710 |
-
|
|
 |
26e710 |
lv_count = vg_visible_lvs(vg);
|
|
 |
26e710 |
|
|
 |
26e710 |
if (lv_count) {
|
|
 |
26e710 |
@@ -3709,12 +3706,6 @@ uint32_t vg_bad_status_bits(const struct volume_group *vg, uint64_t status)
|
|
 |
26e710 |
/* Return because other flags are considered undefined. */
|
|
 |
26e710 |
return FAILED_CLUSTERED;
|
|
 |
26e710 |
|
|
 |
26e710 |
- if ((status & EXPORTED_VG) &&
|
|
 |
26e710 |
- vg_is_exported(vg)) {
|
|
 |
26e710 |
- log_error("Volume group %s is exported", vg->name);
|
|
 |
26e710 |
- failure |= FAILED_EXPORTED;
|
|
 |
26e710 |
- }
|
|
 |
26e710 |
-
|
|
 |
26e710 |
if ((status & LVM_WRITE) &&
|
|
 |
26e710 |
!(vg->status & LVM_WRITE)) {
|
|
 |
26e710 |
log_error("Volume group %s is read-only", vg->name);
|
|
 |
26e710 |
@@ -3733,7 +3724,7 @@ uint32_t vg_bad_status_bits(const struct volume_group *vg, uint64_t status)
|
|
 |
26e710 |
/**
|
|
 |
26e710 |
* vg_check_status - check volume group status flags and log error
|
|
 |
26e710 |
* @vg - volume group to check status flags
|
|
 |
26e710 |
- * @status - specific status flags to check (e.g. EXPORTED_VG)
|
|
 |
26e710 |
+ * @status - specific status flags to check
|
|
 |
26e710 |
*/
|
|
 |
26e710 |
int vg_check_status(const struct volume_group *vg, uint64_t status)
|
|
 |
26e710 |
{
|
|
 |
26e710 |
@@ -3914,6 +3905,28 @@ static int _access_vg_systemid(struct cmd_context *cmd, struct volume_group *vg)
|
|
 |
26e710 |
return 0;
|
|
 |
26e710 |
}
|
|
 |
26e710 |
|
|
 |
26e710 |
+static int _access_vg_exported(struct cmd_context *cmd, struct volume_group *vg)
|
|
 |
26e710 |
+{
|
|
 |
26e710 |
+ if (!vg_is_exported(vg))
|
|
 |
26e710 |
+ return 1;
|
|
 |
26e710 |
+
|
|
 |
26e710 |
+ if (cmd->include_exported_vgs)
|
|
 |
26e710 |
+ return 1;
|
|
 |
26e710 |
+
|
|
 |
26e710 |
+ /*
|
|
 |
26e710 |
+ * Some commands want the error printed by vg_read, others by ignore_vg.
|
|
 |
26e710 |
+ * Those using ignore_vg may choose to skip the error.
|
|
 |
26e710 |
+ */
|
|
 |
26e710 |
+ if (cmd->vg_read_print_access_error) {
|
|
 |
26e710 |
+ log_error("Volume group %s is exported", vg->name);
|
|
 |
26e710 |
+ return 0;
|
|
 |
26e710 |
+ }
|
|
 |
26e710 |
+
|
|
 |
26e710 |
+ /* Silently ignore exported vgs. */
|
|
 |
26e710 |
+
|
|
 |
26e710 |
+ return 0;
|
|
 |
26e710 |
+}
|
|
 |
26e710 |
+
|
|
 |
26e710 |
/*
|
|
 |
26e710 |
* Test the validity of a VG handle returned by vg_read() or vg_read_for_update().
|
|
 |
26e710 |
*/
|
|
 |
26e710 |
@@ -4883,8 +4896,7 @@ struct volume_group *vg_read(struct cmd_context *cmd, const char *vg_name, const
|
|
 |
26e710 |
goto_bad;
|
|
 |
26e710 |
}
|
|
 |
26e710 |
|
|
 |
26e710 |
- if (writing && !(read_flags & READ_ALLOW_EXPORTED) && vg_is_exported(vg)) {
|
|
 |
26e710 |
- log_error("Volume group %s is exported", vg->name);
|
|
 |
26e710 |
+ if (!_access_vg_exported(cmd, vg)) {
|
|
 |
26e710 |
failure |= FAILED_EXPORTED;
|
|
 |
26e710 |
goto_bad;
|
|
 |
26e710 |
}
|
|
 |
26e710 |
@@ -4895,6 +4907,12 @@ struct volume_group *vg_read(struct cmd_context *cmd, const char *vg_name, const
|
|
 |
26e710 |
goto_bad;
|
|
 |
26e710 |
}
|
|
 |
26e710 |
|
|
 |
26e710 |
+ if (writing && !(vg->status & LVM_WRITE)) {
|
|
 |
26e710 |
+ log_error("Volume group %s is read-only", vg->name);
|
|
 |
26e710 |
+ failure |= FAILED_READ_ONLY;
|
|
 |
26e710 |
+ goto_bad;
|
|
 |
26e710 |
+ }
|
|
 |
26e710 |
+
|
|
 |
26e710 |
if (!cmd->handles_missing_pvs && (missing_pv_dev || missing_pv_flag) && writing) {
|
|
 |
26e710 |
log_error("Cannot change VG %s while PVs are missing.", vg->name);
|
|
 |
26e710 |
log_error("See vgreduce --removemissing and vgextend --restoremissing.");
|
|
 |
26e710 |
diff --git a/tools/command.c b/tools/command.c
|
|
 |
26e710 |
index bdd18d6..724040e 100644
|
|
 |
26e710 |
--- a/tools/command.c
|
|
 |
26e710 |
+++ b/tools/command.c
|
|
 |
26e710 |
@@ -137,6 +137,7 @@ static inline int configtype_arg(struct cmd_context *cmd __attribute__((unused))
|
|
 |
26e710 |
#define GET_VGNAME_FROM_OPTIONS 0x00001000
|
|
 |
26e710 |
#define CAN_USE_ONE_SCAN 0x00002000
|
|
 |
26e710 |
#define ALLOW_HINTS 0x00004000
|
|
 |
26e710 |
+#define ALLOW_EXPORTED 0x00008000
|
|
 |
26e710 |
|
|
 |
26e710 |
|
|
 |
26e710 |
/* create foo_CMD enums for command def ID's in command-lines.in */
|
|
 |
26e710 |
diff --git a/tools/commands.h b/tools/commands.h
|
|
 |
26e710 |
index 4006fab..c1670ae 100644
|
|
 |
26e710 |
--- a/tools/commands.h
|
|
 |
26e710 |
+++ b/tools/commands.h
|
|
 |
26e710 |
@@ -35,7 +35,7 @@ xx(help,
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(fullreport,
|
|
 |
26e710 |
"Display full report",
|
|
 |
26e710 |
- PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | LOCKD_VG_SH | ALLOW_HINTS)
|
|
 |
26e710 |
+ PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | LOCKD_VG_SH | ALLOW_HINTS | ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(lastlog,
|
|
 |
26e710 |
"Display last command's log report",
|
|
 |
26e710 |
@@ -71,7 +71,7 @@ xx(lvmconfig,
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(lvmdiskscan,
|
|
 |
26e710 |
"List devices that may be used as physical volumes",
|
|
 |
26e710 |
- PERMITTED_READ_ONLY | ENABLE_ALL_DEVS)
|
|
 |
26e710 |
+ PERMITTED_READ_ONLY | ENABLE_ALL_DEVS | ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(lvmsadc,
|
|
 |
26e710 |
"Collect activity data",
|
|
 |
26e710 |
@@ -115,7 +115,7 @@ xx(pvresize,
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(pvck,
|
|
 |
26e710 |
"Check metadata on physical volumes",
|
|
 |
26e710 |
- LOCKD_VG_SH)
|
|
 |
26e710 |
+ LOCKD_VG_SH | ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(pvcreate,
|
|
 |
26e710 |
"Initialize physical volume(s) for use by LVM",
|
|
 |
26e710 |
@@ -127,7 +127,7 @@ xx(pvdata,
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(pvdisplay,
|
|
 |
26e710 |
"Display various attributes of physical volume(s)",
|
|
 |
26e710 |
- PERMITTED_READ_ONLY | ENABLE_ALL_DEVS | ENABLE_DUPLICATE_DEVS | LOCKD_VG_SH | CAN_USE_ONE_SCAN | ALLOW_HINTS)
|
|
 |
26e710 |
+ PERMITTED_READ_ONLY | ENABLE_ALL_DEVS | ENABLE_DUPLICATE_DEVS | LOCKD_VG_SH | CAN_USE_ONE_SCAN | ALLOW_HINTS | ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
/* ALL_VGS_IS_DEFAULT is for polldaemon to find pvmoves in-progress using process_each_vg. */
|
|
 |
26e710 |
|
|
 |
26e710 |
@@ -145,11 +145,11 @@ xx(pvremove,
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(pvs,
|
|
 |
26e710 |
"Display information about physical volumes",
|
|
 |
26e710 |
- PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | ENABLE_ALL_DEVS | ENABLE_DUPLICATE_DEVS | LOCKD_VG_SH | CAN_USE_ONE_SCAN | ALLOW_HINTS)
|
|
 |
26e710 |
+ PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | ENABLE_ALL_DEVS | ENABLE_DUPLICATE_DEVS | LOCKD_VG_SH | CAN_USE_ONE_SCAN | ALLOW_HINTS | ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(pvscan,
|
|
 |
26e710 |
"List all physical volumes",
|
|
 |
26e710 |
- PERMITTED_READ_ONLY | LOCKD_VG_SH)
|
|
 |
26e710 |
+ PERMITTED_READ_ONLY | LOCKD_VG_SH | ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(segtypes,
|
|
 |
26e710 |
"List available segment types",
|
|
 |
26e710 |
@@ -165,11 +165,11 @@ xx(tags,
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(vgcfgbackup,
|
|
 |
26e710 |
"Backup volume group configuration(s)",
|
|
 |
26e710 |
- PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | LOCKD_VG_SH)
|
|
 |
26e710 |
+ PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | LOCKD_VG_SH | ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(vgcfgrestore,
|
|
 |
26e710 |
"Restore volume group configuration",
|
|
 |
26e710 |
- 0)
|
|
 |
26e710 |
+ ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(vgchange,
|
|
 |
26e710 |
"Change volume group attributes",
|
|
 |
26e710 |
@@ -189,7 +189,7 @@ xx(vgcreate,
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(vgdisplay,
|
|
 |
26e710 |
"Display volume group information",
|
|
 |
26e710 |
- PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | LOCKD_VG_SH | CAN_USE_ONE_SCAN | ALLOW_HINTS)
|
|
 |
26e710 |
+ PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | LOCKD_VG_SH | CAN_USE_ONE_SCAN | ALLOW_HINTS | ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(vgexport,
|
|
 |
26e710 |
"Unregister volume group(s) from the system",
|
|
 |
26e710 |
@@ -201,10 +201,11 @@ xx(vgextend,
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(vgimport,
|
|
 |
26e710 |
"Register exported volume group with system",
|
|
 |
26e710 |
- ALL_VGS_IS_DEFAULT)
|
|
 |
26e710 |
+ ALL_VGS_IS_DEFAULT | ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(vgimportclone,
|
|
 |
26e710 |
- "Import a VG from cloned PVs", 0)
|
|
 |
26e710 |
+ "Import a VG from cloned PVs",
|
|
 |
26e710 |
+ ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(vgmerge,
|
|
 |
26e710 |
"Merge volume groups",
|
|
 |
26e710 |
@@ -224,15 +225,15 @@ xx(vgremove,
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(vgrename,
|
|
 |
26e710 |
"Rename a volume group",
|
|
 |
26e710 |
- ALLOW_UUID_AS_NAME)
|
|
 |
26e710 |
+ ALLOW_UUID_AS_NAME | ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(vgs,
|
|
 |
26e710 |
"Display information about volume groups",
|
|
 |
26e710 |
- PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | LOCKD_VG_SH | CAN_USE_ONE_SCAN | ALLOW_HINTS)
|
|
 |
26e710 |
+ PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | LOCKD_VG_SH | CAN_USE_ONE_SCAN | ALLOW_HINTS | ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(vgscan,
|
|
 |
26e710 |
"Search for all volume groups",
|
|
 |
26e710 |
- PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | LOCKD_VG_SH)
|
|
 |
26e710 |
+ PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | LOCKD_VG_SH | ALLOW_EXPORTED)
|
|
 |
26e710 |
|
|
 |
26e710 |
xx(vgsplit,
|
|
 |
26e710 |
"Move physical volumes into a new or existing volume group",
|
|
 |
26e710 |
diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c
|
|
 |
26e710 |
index 3fec702..30f9d81 100644
|
|
 |
26e710 |
--- a/tools/lvmcmdline.c
|
|
 |
26e710 |
+++ b/tools/lvmcmdline.c
|
|
 |
26e710 |
@@ -2315,6 +2315,8 @@ static int _get_current_settings(struct cmd_context *cmd)
|
|
 |
26e710 |
if (cmd->cname->flags & CAN_USE_ONE_SCAN)
|
|
 |
26e710 |
cmd->can_use_one_scan = 1;
|
|
 |
26e710 |
|
|
 |
26e710 |
+ cmd->include_exported_vgs = (cmd->cname->flags & ALLOW_EXPORTED) ? 1 : 0;
|
|
 |
26e710 |
+
|
|
 |
26e710 |
cmd->scan_lvs = find_config_tree_bool(cmd, devices_scan_lvs_CFG, NULL);
|
|
 |
26e710 |
|
|
 |
26e710 |
/*
|
|
 |
26e710 |
diff --git a/tools/pvchange.c b/tools/pvchange.c
|
|
 |
26e710 |
index f37fd91..1ece34a 100644
|
|
 |
26e710 |
--- a/tools/pvchange.c
|
|
 |
26e710 |
+++ b/tools/pvchange.c
|
|
 |
26e710 |
@@ -35,11 +35,6 @@ static int _pvchange_single(struct cmd_context *cmd, struct volume_group *vg,
|
|
 |
26e710 |
|
|
 |
26e710 |
params->total++;
|
|
 |
26e710 |
|
|
 |
26e710 |
- if (vg && vg_is_exported(vg)) {
|
|
 |
26e710 |
- log_error("Volume group %s is exported", vg->name);
|
|
 |
26e710 |
- goto bad;
|
|
 |
26e710 |
- }
|
|
 |
26e710 |
-
|
|
 |
26e710 |
/*
|
|
 |
26e710 |
* The primary location of this check is in vg_write(), but it needs
|
|
 |
26e710 |
* to be copied here to prevent the pv_write() which is called before
|
|
 |
26e710 |
@@ -239,7 +234,7 @@ int pvchange(struct cmd_context *cmd, int argc, char **argv)
|
|
 |
26e710 |
|
|
 |
26e710 |
clear_hint_file(cmd);
|
|
 |
26e710 |
|
|
 |
26e710 |
- ret = process_each_pv(cmd, argc, argv, NULL, 0, READ_FOR_UPDATE | READ_ALLOW_EXPORTED, handle, _pvchange_single);
|
|
 |
26e710 |
+ ret = process_each_pv(cmd, argc, argv, NULL, 0, READ_FOR_UPDATE, handle, _pvchange_single);
|
|
 |
26e710 |
|
|
 |
26e710 |
log_print_unless_silent("%d physical volume%s changed / %d physical volume%s not changed",
|
|
 |
26e710 |
params.done, params.done == 1 ? "" : "s",
|
|
 |
26e710 |
diff --git a/tools/pvresize.c b/tools/pvresize.c
|
|
 |
26e710 |
index c7e750d..2c7f543 100644
|
|
 |
26e710 |
--- a/tools/pvresize.c
|
|
 |
26e710 |
+++ b/tools/pvresize.c
|
|
 |
26e710 |
@@ -36,11 +36,6 @@ static int _pvresize_single(struct cmd_context *cmd,
|
|
 |
26e710 |
}
|
|
 |
26e710 |
params->total++;
|
|
 |
26e710 |
|
|
 |
26e710 |
- if (vg && vg_is_exported(vg)) {
|
|
 |
26e710 |
- log_error("Volume group %s is exported", vg->name);
|
|
 |
26e710 |
- return ECMD_FAILED;
|
|
 |
26e710 |
- }
|
|
 |
26e710 |
-
|
|
 |
26e710 |
/*
|
|
 |
26e710 |
* Needed to change a property on an orphan PV.
|
|
 |
26e710 |
* i.e. the global lock is only needed for orphans.
|
|
 |
26e710 |
@@ -93,7 +88,7 @@ int pvresize(struct cmd_context *cmd, int argc, char **argv)
|
|
 |
26e710 |
|
|
 |
26e710 |
handle->custom_handle = ¶m;;
|
|
 |
26e710 |
|
|
 |
26e710 |
- ret = process_each_pv(cmd, argc, argv, NULL, 0, READ_FOR_UPDATE | READ_ALLOW_EXPORTED, handle, _pvresize_single);
|
|
 |
26e710 |
+ ret = process_each_pv(cmd, argc, argv, NULL, 0, READ_FOR_UPDATE, handle, _pvresize_single);
|
|
 |
26e710 |
|
|
 |
26e710 |
log_print_unless_silent("%d physical volume(s) resized or updated / %d physical volume(s) "
|
|
 |
26e710 |
"not resized", params.done, params.total - params.done);
|
|
 |
26e710 |
diff --git a/tools/toollib.c b/tools/toollib.c
|
|
 |
26e710 |
index 506ad2d..b2313f8 100644
|
|
 |
26e710 |
--- a/tools/toollib.c
|
|
 |
26e710 |
+++ b/tools/toollib.c
|
|
 |
26e710 |
@@ -223,6 +223,17 @@ static int _ignore_vg(struct cmd_context *cmd,
|
|
 |
26e710 |
}
|
|
 |
26e710 |
}
|
|
 |
26e710 |
|
|
 |
26e710 |
+ if (read_error & FAILED_EXPORTED) {
|
|
 |
26e710 |
+ if (arg_vgnames && str_list_match_item(arg_vgnames, vg_name)) {
|
|
 |
26e710 |
+ log_error("Volume group %s is exported", vg_name);
|
|
 |
26e710 |
+ return 1;
|
|
 |
26e710 |
+ } else {
|
|
 |
26e710 |
+ read_error &= ~FAILED_EXPORTED; /* Check for other errors */
|
|
 |
26e710 |
+ log_verbose("Skipping exported volume group %s", vg_name);
|
|
 |
26e710 |
+ *skip = 1;
|
|
 |
26e710 |
+ }
|
|
 |
26e710 |
+ }
|
|
 |
26e710 |
+
|
|
 |
26e710 |
/*
|
|
 |
26e710 |
* Commands that operate on "all vgs" shouldn't be bothered by
|
|
 |
26e710 |
* skipping a foreign VG, and the command shouldn't fail when
|
|
 |
26e710 |
@@ -3032,11 +3043,6 @@ int process_each_lv_in_vg(struct cmd_context *cmd, struct volume_group *vg,
|
|
 |
26e710 |
dm_list_init(&final_lvs);
|
|
 |
26e710 |
dm_list_init(&found_arg_lvnames);
|
|
 |
26e710 |
|
|
 |
26e710 |
- if (!vg_check_status(vg, EXPORTED_VG)) {
|
|
 |
26e710 |
- ret_max = ECMD_FAILED;
|
|
 |
26e710 |
- goto_out;
|
|
 |
26e710 |
- }
|
|
 |
26e710 |
-
|
|
 |
26e710 |
if (tags_in && !dm_list_empty(tags_in))
|
|
 |
26e710 |
tags_supplied = 1;
|
|
 |
26e710 |
|
|
 |
26e710 |
@@ -4161,6 +4167,7 @@ static int _process_pvs_in_vg(struct cmd_context *cmd,
|
|
 |
26e710 |
int process_all_pvs,
|
|
 |
26e710 |
int process_all_devices,
|
|
 |
26e710 |
int skip,
|
|
 |
26e710 |
+ uint32_t error_flags,
|
|
 |
26e710 |
struct processing_handle *handle,
|
|
 |
26e710 |
process_single_pv_fn_t process_single_pv)
|
|
 |
26e710 |
{
|
|
 |
26e710 |
@@ -4216,21 +4223,42 @@ static int _process_pvs_in_vg(struct cmd_context *cmd,
|
|
 |
26e710 |
}
|
|
 |
26e710 |
|
|
 |
26e710 |
process_pv = process_all_pvs;
|
|
 |
26e710 |
+ dil = NULL;
|
|
 |
26e710 |
|
|
 |
26e710 |
/* Remove each arg_devices entry as it is processed. */
|
|
 |
26e710 |
|
|
 |
26e710 |
- if (!process_pv && !dm_list_empty(arg_devices) &&
|
|
 |
26e710 |
- (dil = _device_list_find_dev(arg_devices, pv->dev))) {
|
|
 |
26e710 |
- process_pv = 1;
|
|
 |
26e710 |
- _device_list_remove(arg_devices, dil->dev);
|
|
 |
26e710 |
+ if (arg_devices && !dm_list_empty(arg_devices)) {
|
|
 |
26e710 |
+ if ((dil = _device_list_find_dev(arg_devices, pv->dev)))
|
|
 |
26e710 |
+ _device_list_remove(arg_devices, dil->dev);
|
|
 |
26e710 |
}
|
|
 |
26e710 |
|
|
 |
26e710 |
+ if (!process_pv && dil)
|
|
 |
26e710 |
+ process_pv = 1;
|
|
 |
26e710 |
+
|
|
 |
26e710 |
if (!process_pv && !dm_list_empty(arg_tags) &&
|
|
 |
26e710 |
str_list_match_list(arg_tags, &pv->tags, NULL))
|
|
 |
26e710 |
process_pv = 1;
|
|
 |
26e710 |
|
|
 |
26e710 |
process_pv = process_pv && select_match_pv(cmd, handle, vg, pv) && _select_matches(handle);
|
|
 |
26e710 |
|
|
 |
26e710 |
+ /*
|
|
 |
26e710 |
+ * The command has asked to process a specific PV
|
|
 |
26e710 |
+ * named on the command line, but the VG containing
|
|
 |
26e710 |
+ * that PV cannot be accessed. In this case report
|
|
 |
26e710 |
+ * and return an error. If the inaccessible PV is
|
|
 |
26e710 |
+ * not explicitly named on the command line, it is
|
|
 |
26e710 |
+ * silently skipped.
|
|
 |
26e710 |
+ */
|
|
 |
26e710 |
+ if (process_pv && skip && dil && error_flags) {
|
|
 |
26e710 |
+ if (error_flags & FAILED_EXPORTED)
|
|
 |
26e710 |
+ log_error("Cannot use PV %s in exported VG %s.", pv_name, vg->name);
|
|
 |
26e710 |
+ if (error_flags & FAILED_SYSTEMID)
|
|
 |
26e710 |
+ log_error("Cannot use PV %s in foreign VG %s.", pv_name, vg->name);
|
|
 |
26e710 |
+ if (error_flags & (FAILED_LOCK_TYPE | FAILED_LOCK_MODE))
|
|
 |
26e710 |
+ log_error("Cannot use PV %s in shared VG %s.", pv_name, vg->name);
|
|
 |
26e710 |
+ ret_max = ECMD_FAILED;
|
|
 |
26e710 |
+ }
|
|
 |
26e710 |
+
|
|
 |
26e710 |
if (process_pv) {
|
|
 |
26e710 |
if (skip)
|
|
 |
26e710 |
log_verbose("Skipping PV %s in VG %s.", pv_name, vg->name);
|
|
 |
26e710 |
@@ -4352,6 +4380,8 @@ static int _process_pvs_in_vgs(struct cmd_context *cmd, uint32_t read_flags,
|
|
 |
26e710 |
|
|
 |
26e710 |
log_debug("Processing PVs in VG %s", vg_name);
|
|
 |
26e710 |
|
|
 |
26e710 |
+ error_flags = 0;
|
|
 |
26e710 |
+
|
|
 |
26e710 |
vg = vg_read(cmd, vg_name, vg_uuid, read_flags, lockd_state, &error_flags, &error_vg);
|
|
 |
26e710 |
if (_ignore_vg(cmd, error_flags, error_vg, vg_name, NULL, read_flags, &skip, ¬found)) {
|
|
 |
26e710 |
stack;
|
|
 |
26e710 |
@@ -4359,7 +4389,7 @@ static int _process_pvs_in_vgs(struct cmd_context *cmd, uint32_t read_flags,
|
|
 |
26e710 |
report_log_ret_code(ret_max);
|
|
 |
26e710 |
if (!skip)
|
|
 |
26e710 |
goto endvg;
|
|
 |
26e710 |
- /* Drop through to eliminate a clustered VG's PVs from the devices list */
|
|
 |
26e710 |
+ /* Drop through to eliminate unmpermitted PVs from the devices list */
|
|
 |
26e710 |
}
|
|
 |
26e710 |
if (notfound)
|
|
 |
26e710 |
goto endvg;
|
|
 |
26e710 |
@@ -4370,7 +4400,7 @@ static int _process_pvs_in_vgs(struct cmd_context *cmd, uint32_t read_flags,
|
|
 |
26e710 |
*/
|
|
 |
26e710 |
|
|
 |
26e710 |
ret = _process_pvs_in_vg(cmd, vg ? vg : error_vg, all_devices, arg_devices, arg_tags,
|
|
 |
26e710 |
- process_all_pvs, process_all_devices, skip,
|
|
 |
26e710 |
+ process_all_pvs, process_all_devices, skip, error_flags,
|
|
 |
26e710 |
handle, process_single_pv);
|
|
 |
26e710 |
if (ret != ECMD_PROCESSED)
|
|
 |
26e710 |
stack;
|
|
 |
26e710 |
diff --git a/tools/tools.h b/tools/tools.h
|
|
 |
26e710 |
index 69132a5..b78c471 100644
|
|
 |
26e710 |
--- a/tools/tools.h
|
|
 |
26e710 |
+++ b/tools/tools.h
|
|
 |
26e710 |
@@ -136,6 +136,8 @@ struct arg_value_group_list {
|
|
 |
26e710 |
#define CAN_USE_ONE_SCAN 0x00002000
|
|
 |
26e710 |
/* Command can use hints file */
|
|
 |
26e710 |
#define ALLOW_HINTS 0x00004000
|
|
 |
26e710 |
+/* Command can access exported vg. */
|
|
 |
26e710 |
+#define ALLOW_EXPORTED 0x00008000
|
|
 |
26e710 |
|
|
 |
26e710 |
|
|
 |
26e710 |
void usage(const char *name);
|
|
 |
26e710 |
diff --git a/tools/vgchange.c b/tools/vgchange.c
|
|
 |
26e710 |
index a17f456..1ef94d6 100644
|
|
 |
26e710 |
--- a/tools/vgchange.c
|
|
 |
26e710 |
+++ b/tools/vgchange.c
|
|
 |
26e710 |
@@ -630,13 +630,6 @@ static int _vgchange_single(struct cmd_context *cmd, const char *vg_name,
|
|
 |
26e710 |
{ detachprofile_ARG, &_vgchange_profile },
|
|
 |
26e710 |
};
|
|
 |
26e710 |
|
|
 |
26e710 |
- if (vg_is_exported(vg)) {
|
|
 |
26e710 |
- if (cmd->command->command_enum == vgchange_monitor_CMD)
|
|
 |
26e710 |
- return ECMD_PROCESSED;
|
|
 |
26e710 |
- log_error("Volume group \"%s\" is exported", vg_name);
|
|
 |
26e710 |
- return ECMD_FAILED;
|
|
 |
26e710 |
- }
|
|
 |
26e710 |
-
|
|
 |
26e710 |
/*
|
|
 |
26e710 |
* FIXME: DEFAULT_BACKGROUND_POLLING should be "unspecified".
|
|
 |
26e710 |
* If --poll is explicitly provided use it; otherwise polling
|
|
 |
26e710 |
@@ -982,11 +975,6 @@ static int _vgchange_locktype_single(struct cmd_context *cmd, const char *vg_nam
|
|
 |
26e710 |
struct volume_group *vg,
|
|
 |
26e710 |
struct processing_handle *handle)
|
|
 |
26e710 |
{
|
|
 |
26e710 |
- if (vg_is_exported(vg)) {
|
|
 |
26e710 |
- log_error("Volume group \"%s\" is exported", vg_name);
|
|
 |
26e710 |
- return ECMD_FAILED;
|
|
 |
26e710 |
- }
|
|
 |
26e710 |
-
|
|
 |
26e710 |
if (!archive(vg))
|
|
 |
26e710 |
return_ECMD_FAILED;
|
|
 |
26e710 |
|
|
 |
26e710 |
@@ -1145,11 +1133,14 @@ int vgchange_lock_start_stop_cmd(struct cmd_context *cmd, int argc, char **argv)
|
|
 |
26e710 |
|
|
 |
26e710 |
/* Disable the lockd_gl in process_each_vg. */
|
|
 |
26e710 |
cmd->lockd_gl_disable = 1;
|
|
 |
26e710 |
+ } else {
|
|
 |
26e710 |
+ /* If the VG was started when it was exported, allow it to be stopped. */
|
|
 |
26e710 |
+ cmd->include_exported_vgs = 1;
|
|
 |
26e710 |
}
|
|
 |
26e710 |
|
|
 |
26e710 |
handle->custom_handle = &vp;
|
|
 |
26e710 |
|
|
 |
26e710 |
- ret = process_each_vg(cmd, argc, argv, NULL, NULL, READ_ALLOW_EXPORTED, 0, handle, &_vgchange_lock_start_stop_single);
|
|
 |
26e710 |
+ ret = process_each_vg(cmd, argc, argv, NULL, NULL, 0, 0, handle, &_vgchange_lock_start_stop_single);
|
|
 |
26e710 |
|
|
 |
26e710 |
/* Wait for lock-start ops that were initiated in vgchange_lockstart. */
|
|
 |
26e710 |
|
|
 |
26e710 |
@@ -1178,11 +1169,6 @@ static int _vgchange_systemid_single(struct cmd_context *cmd, const char *vg_nam
|
|
 |
26e710 |
struct volume_group *vg,
|
|
 |
26e710 |
struct processing_handle *handle)
|
|
 |
26e710 |
{
|
|
 |
26e710 |
- if (vg_is_exported(vg)) {
|
|
 |
26e710 |
- log_error("Volume group \"%s\" is exported", vg_name);
|
|
 |
26e710 |
- return ECMD_FAILED;
|
|
 |
26e710 |
- }
|
|
 |
26e710 |
-
|
|
 |
26e710 |
if (!archive(vg))
|
|
 |
26e710 |
return_ECMD_FAILED;
|
|
 |
26e710 |
|
|
 |
26e710 |
diff --git a/tools/vgck.c b/tools/vgck.c
|
|
 |
26e710 |
index 90fc5a3..46ad594 100644
|
|
 |
26e710 |
--- a/tools/vgck.c
|
|
 |
26e710 |
+++ b/tools/vgck.c
|
|
 |
26e710 |
@@ -71,9 +71,6 @@ static int vgck_single(struct cmd_context *cmd __attribute__((unused)),
|
|
 |
26e710 |
struct volume_group *vg,
|
|
 |
26e710 |
struct processing_handle *handle __attribute__((unused)))
|
|
 |
26e710 |
{
|
|
 |
26e710 |
- if (!vg_check_status(vg, EXPORTED_VG))
|
|
 |
26e710 |
- return_ECMD_FAILED;
|
|
 |
26e710 |
-
|
|
 |
26e710 |
if (!vg_validate(vg))
|
|
 |
26e710 |
return_ECMD_FAILED;
|
|
 |
26e710 |
|
|
 |
26e710 |
diff --git a/tools/vgimport.c b/tools/vgimport.c
|
|
 |
26e710 |
index 26c6363..0d8b0f2 100644
|
|
 |
26e710 |
--- a/tools/vgimport.c
|
|
 |
26e710 |
+++ b/tools/vgimport.c
|
|
 |
26e710 |
@@ -87,8 +87,6 @@ int vgimport(struct cmd_context *cmd, int argc, char **argv)
|
|
 |
26e710 |
cmd->handles_missing_pvs = 1;
|
|
 |
26e710 |
}
|
|
 |
26e710 |
|
|
 |
26e710 |
- return process_each_vg(cmd, argc, argv, NULL, NULL,
|
|
 |
26e710 |
- READ_FOR_UPDATE | READ_ALLOW_EXPORTED,
|
|
 |
26e710 |
- 0, NULL,
|
|
 |
26e710 |
- &_vgimport_single);
|
|
 |
26e710 |
+ return process_each_vg(cmd, argc, argv, NULL, NULL, READ_FOR_UPDATE,
|
|
 |
26e710 |
+ 0, NULL, &_vgimport_single);
|
|
 |
26e710 |
}
|
|
 |
26e710 |
diff --git a/tools/vgimportclone.c b/tools/vgimportclone.c
|
|
 |
26e710 |
index a3af841..be01861 100644
|
|
 |
26e710 |
--- a/tools/vgimportclone.c
|
|
 |
26e710 |
+++ b/tools/vgimportclone.c
|
|
 |
26e710 |
@@ -235,7 +235,7 @@ int vgimportclone(struct cmd_context *cmd, int argc, char **argv)
|
|
 |
26e710 |
|
|
 |
26e710 |
log_debug("Finding devices to import.");
|
|
 |
26e710 |
cmd->cname->flags |= ENABLE_DUPLICATE_DEVS;
|
|
 |
26e710 |
- process_each_pv(cmd, argc, argv, NULL, 0, READ_ALLOW_EXPORTED, handle, _vgimportclone_pv_single);
|
|
 |
26e710 |
+ process_each_pv(cmd, argc, argv, NULL, 0, 0, handle, _vgimportclone_pv_single);
|
|
 |
26e710 |
|
|
 |
26e710 |
if (vp.found_args != argc) {
|
|
 |
26e710 |
log_error("Failed to find all devices.");
|
|
 |
26e710 |
@@ -342,7 +342,7 @@ retry_name:
|
|
 |
26e710 |
|
|
 |
26e710 |
clear_hint_file(cmd);
|
|
 |
26e710 |
|
|
 |
26e710 |
- ret = process_each_vg(cmd, 0, NULL, vp.old_vgname, NULL, READ_FOR_UPDATE | READ_ALLOW_EXPORTED, 0, handle, _vgimportclone_vg_single);
|
|
 |
26e710 |
+ ret = process_each_vg(cmd, 0, NULL, vp.old_vgname, NULL, READ_FOR_UPDATE, 0, handle, _vgimportclone_vg_single);
|
|
 |
26e710 |
|
|
 |
26e710 |
unlock_vg(cmd, NULL, vp.new_vgname);
|
|
 |
26e710 |
out:
|
|
 |
26e710 |
diff --git a/tools/vgreduce.c b/tools/vgreduce.c
|
|
 |
26e710 |
index bc1f5b6..b001ccb 100644
|
|
 |
26e710 |
--- a/tools/vgreduce.c
|
|
 |
26e710 |
+++ b/tools/vgreduce.c
|
|
 |
26e710 |
@@ -135,7 +135,7 @@ static int _vgreduce_single(struct cmd_context *cmd, struct volume_group *vg,
|
|
 |
26e710 |
{
|
|
 |
26e710 |
int r;
|
|
 |
26e710 |
|
|
 |
26e710 |
- if (!vg_check_status(vg, EXPORTED_VG | LVM_WRITE | RESIZEABLE_VG))
|
|
 |
26e710 |
+ if (!vg_check_status(vg, LVM_WRITE | RESIZEABLE_VG))
|
|
 |
26e710 |
return ECMD_FAILED;
|
|
 |
26e710 |
|
|
 |
26e710 |
r = vgreduce_single(cmd, vg, pv, 1);
|
|
 |
26e710 |
@@ -250,8 +250,7 @@ int vgreduce(struct cmd_context *cmd, int argc, char **argv)
|
|
 |
26e710 |
|
|
 |
26e710 |
init_ignore_suspended_devices(1);
|
|
 |
26e710 |
|
|
 |
26e710 |
- process_each_vg(cmd, 0, NULL, vg_name, NULL,
|
|
 |
26e710 |
- READ_FOR_UPDATE | READ_ALLOW_EXPORTED,
|
|
 |
26e710 |
+ process_each_vg(cmd, 0, NULL, vg_name, NULL, READ_FOR_UPDATE,
|
|
 |
26e710 |
0, handle, &_vgreduce_repair_single);
|
|
 |
26e710 |
|
|
 |
26e710 |
if (vp.already_consistent) {
|
|
 |
26e710 |
diff --git a/tools/vgremove.c b/tools/vgremove.c
|
|
 |
26e710 |
index 23640f6..8f73297 100644
|
|
 |
26e710 |
--- a/tools/vgremove.c
|
|
 |
26e710 |
+++ b/tools/vgremove.c
|
|
 |
26e710 |
@@ -42,9 +42,6 @@ static int _vgremove_single(struct cmd_context *cmd, const char *vg_name,
|
|
 |
26e710 |
unsigned lv_count, missing;
|
|
 |
26e710 |
int ret;
|
|
 |
26e710 |
|
|
 |
26e710 |
- if (!vg_check_status(vg, EXPORTED_VG))
|
|
 |
26e710 |
- return_ECMD_FAILED;
|
|
 |
26e710 |
-
|
|
 |
26e710 |
lv_count = vg_visible_lvs(vg);
|
|
 |
26e710 |
|
|
 |
26e710 |
if (lv_count) {
|
|
 |
26e710 |
diff --git a/tools/vgrename.c b/tools/vgrename.c
|
|
 |
26e710 |
index 4735e8b..8b76d0b 100644
|
|
 |
26e710 |
--- a/tools/vgrename.c
|
|
 |
26e710 |
+++ b/tools/vgrename.c
|
|
 |
26e710 |
@@ -233,8 +233,7 @@ int vgrename(struct cmd_context *cmd, int argc, char **argv)
|
|
 |
26e710 |
|
|
 |
26e710 |
handle->custom_handle = &vp;
|
|
 |
26e710 |
|
|
 |
26e710 |
- ret = process_each_vg(cmd, 0, NULL, vg_name_old, NULL,
|
|
 |
26e710 |
- READ_FOR_UPDATE | READ_ALLOW_EXPORTED,
|
|
 |
26e710 |
+ ret = process_each_vg(cmd, 0, NULL, vg_name_old, NULL, READ_FOR_UPDATE,
|
|
 |
26e710 |
0, handle, _vgrename_single);
|
|
 |
26e710 |
|
|
 |
26e710 |
/* Needed if process_each_vg returns error before calling _single. */
|
|
 |
26e710 |
diff --git a/tools/vgsplit.c b/tools/vgsplit.c
|
|
 |
26e710 |
index 61cb13b..1bcc308 100644
|
|
 |
26e710 |
--- a/tools/vgsplit.c
|
|
 |
26e710 |
+++ b/tools/vgsplit.c
|
|
 |
26e710 |
@@ -665,8 +665,16 @@ int vgsplit(struct cmd_context *cmd, int argc, char **argv)
|
|
 |
26e710 |
if (!test_mode()) {
|
|
 |
26e710 |
unlock_vg(cmd, NULL, vg_name_to);
|
|
 |
26e710 |
release_vg(vg_to);
|
|
 |
26e710 |
- vg_to = vg_read_for_update(cmd, vg_name_to, NULL,
|
|
 |
26e710 |
- READ_ALLOW_EXPORTED, 0);
|
|
 |
26e710 |
+
|
|
 |
26e710 |
+ /*
|
|
 |
26e710 |
+ * This command uses the exported vg flag internally, but
|
|
 |
26e710 |
+ * exported VGs are not allowed to be split from the command
|
|
 |
26e710 |
+ * level, so ALLOW_EXPORTED is not set in commands.h.
|
|
 |
26e710 |
+ */
|
|
 |
26e710 |
+ cmd->include_exported_vgs = 1;
|
|
 |
26e710 |
+
|
|
 |
26e710 |
+ vg_to = vg_read_for_update(cmd, vg_name_to, NULL, 0, 0);
|
|
 |
26e710 |
+
|
|
 |
26e710 |
if (vg_read_error(vg_to)) {
|
|
 |
26e710 |
log_error("Volume group \"%s\" became inconsistent: "
|
|
 |
26e710 |
"please fix manually", vg_name_to);
|