From 0a19238aa30a3a594abaa544c4972c880cefafe1 Mon Sep 17 00:00:00 2001 From: David Teigland Date: Thu, 26 Feb 2015 16:06:32 -0600 Subject: [PATCH] system_id: remove unwanted foreign error for some commands Commands that can never use foreign VGs begin with cmd->error_foreign_vgs = 1. This tells the vg_read lib layer to print an error as soon as a foreign VG is read. The toollib process_each layer also prints an error if a foreign VG is read, but is more selective about it. It won't print an error if the command did not explicitly name the foreign VG. We want to silently ignore foreign VGs unless a command attempts to use one explicitly. So, foreign VG errors are printed from two different layers: vg_read (lower layer) and process_each (upper layer). Commands that use toollib process_each, only want errors from the process_each layer, not from both layers. So, process_each disables the lower layer vg_read error message by setting error_foreign_vgs = 0. Commands that do not use toollib process_each, want errors from the vg_read layer, otherwise they would get no error message. The original cmd->error_foreign_vgs setting enables this error. (Commands that are allowed to operate on foreign VGs always begin with cmd->error_foreign_vgs = 0, and all the commands in this group use toollib process_each with the selective error reporting.) --- tools/toollib.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/toollib.c b/tools/toollib.c index 8b750d851..7d1c3803e 100644 --- a/tools/toollib.c +++ b/tools/toollib.c @@ -200,8 +200,8 @@ static int _ignore_vg(struct volume_group *vg, const char *vg_name, */ if (read_error & FAILED_SYSTEMID) { if (arg_vgnames && str_list_match_item(arg_vgnames, vg->name)) { - log_error("Skipping volume group %s with system ID %s", - vg->name, vg->system_id ? : vg->lvm1_system_id ? : ""); + log_error("Cannot access VG %s with system id \"%s\" with local system ID %s.", + vg->name, vg->system_id, vg->cmd->system_id); return 1; } else { read_error &= ~FAILED_SYSTEMID; /* Check for other errors */ @@ -1877,6 +1877,8 @@ int process_each_vg(struct cmd_context *cmd, int argc, char **argv, unsigned one_vgname_arg = (flags & ONE_VGNAME_ARG); int ret; + cmd->error_foreign_vgs = 0; + dm_list_init(&arg_tags); dm_list_init(&arg_vgnames); dm_list_init(&vgnameids_on_system); @@ -2277,6 +2279,8 @@ int process_each_lv(struct cmd_context *cmd, int argc, char **argv, uint32_t fla int enable_all_vgs = (cmd->command->flags & ALL_VGS_IS_DEFAULT); int ret; + cmd->error_foreign_vgs = 0; + dm_list_init(&arg_tags); dm_list_init(&arg_vgnames); dm_list_init(&arg_lvnames); @@ -2761,6 +2765,8 @@ int process_each_pv(struct cmd_context *cmd, int ret_max = ECMD_PROCESSED; int ret; + cmd->error_foreign_vgs = 0; + dm_list_init(&arg_tags); dm_list_init(&arg_pvnames); dm_list_init(&arg_devices);