From f1dd6983fb9c00514359b644fd3b297e3922a814 Mon Sep 17 00:00:00 2001 From: David Teigland Date: Thu, 4 Sep 2014 16:30:02 -0500 Subject: reporter: global lock needed before process_each_pv The block of code that acquires the global lock for process_each_pv() was in the wrong location given the way report_type is munged, and does not equal PVS until later in the function. --- tools/reporter.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tools/reporter.c b/tools/reporter.c index 32a0b0532..919a9aef4 100644 --- a/tools/reporter.c +++ b/tools/reporter.c @@ -283,19 +283,6 @@ static int _report(struct cmd_context *cmd, int argc, char **argv, if (args_are_pvs && argc) cmd->filter->wipe(cmd->filter); - /* - * This moved here as part of factoring it out of process_each_pv. - * We lock VG_GLOBAL to enable use of metadata cache. - * This can pause alongide pvscan or vgscan process for a while. - */ - if ((report_type == PVS || report_type == PVSEGS) && !lvmetad_active()) { - lock_global = 1; - if (!lock_vol(cmd, VG_GLOBAL, LCK_VG_READ, NULL)) { - log_error("Unable to obtain global lock."); - return ECMD_FAILED; - } - } - switch (report_type) { case DEVTYPES: keys = find_config_tree_str(cmd, report_devtypes_sort_CFG, NULL); @@ -423,6 +410,19 @@ static int _report(struct cmd_context *cmd, int argc, char **argv, else if (report_type & LVS) report_type = LVS; + /* + * This moved here as part of factoring it out of process_each_pv. + * We lock VG_GLOBAL to enable use of metadata cache. + * This can pause alongide pvscan or vgscan process for a while. + */ + if ((report_type == PVS || report_type == PVSEGS) && !lvmetad_active()) { + lock_global = 1; + if (!lock_vol(cmd, VG_GLOBAL, LCK_VG_READ, NULL)) { + log_error("Unable to obtain global lock."); + return ECMD_FAILED; + } + } + switch (report_type) { case DEVTYPES: r = _process_each_devtype(cmd, argc, report_handle); -- cgit v1.2.1