[lvm-devel] master - toollib: process_each_pv: do not acquire list of all devices if not necessary

Peter Rajnoha prajnoha at fedoraproject.org
Thu Feb 12 12:46:32 UTC 2015


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=d38d047eecc16fdcaab7e7452ac68d673afdf674
Commit:        d38d047eecc16fdcaab7e7452ac68d673afdf674
Parent:        0e9f3dba75af605934a130d9a0ae9517229b0661
Author:        Peter Rajnoha <prajnoha at redhat.com>
AuthorDate:    Thu Feb 12 13:28:00 2015 +0100
Committer:     Peter Rajnoha <prajnoha at redhat.com>
CommitterDate: Thu Feb 12 13:46:11 2015 +0100

toollib: process_each_pv: do not acquire list of all devices if not necessary

List of all devices is only needed if we want to process devices
which are not PVs (e.g. pvs -a). But if this is not the case, it's
useless to get the list of all devices and then discard it without
any use, which is exactly what happened in process_each_pv where
the code was never reached and the list was unused if we were
processing just PVs, not all PV-capable devices:

int process_each_pv(...)
{
	...
	process_all_devices = process_all_pvs &&
			      (cmd->command->flags & ENABLE_ALL_DEVS) &&
			      arg_count(cmd, all_ARG);
	...
	/*
	 * If the caller wants to process all devices (not just PVs), then all PVs
	 * from all VGs are processed first, removing them from all_devices.  Then
	 * any devs remaining in all_devices are processed.
	*/
	_get_all_devices(cmd, &all_devices);
	...
	ret = _process_pvs_in_vgs(...);
	...
	if (!process_all_devices)
		goto out;

        ret = _process_device_list(cmd, &all_devices, handle, process_single_pv);
	...
}

This patch adds missing check for "process_all_devices" and it gets the
list of all (including non-PV) devices only if needed:
---
 tools/toollib.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/tools/toollib.c b/tools/toollib.c
index bdf6494..410122c 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -2736,7 +2736,8 @@ int process_each_pv(struct cmd_context *cmd,
 	 * from all VGs are processed first, removing them from all_devices.  Then
 	 * any devs remaining in all_devices are processed.
 	 */
-	if ((ret = _get_all_devices(cmd, &all_devices) != ECMD_PROCESSED)) {
+	if (process_all_devices &&
+	    (ret = _get_all_devices(cmd, &all_devices) != ECMD_PROCESSED)) {
 		stack;
 		return ret;
 	}




More information about the lvm-devel mailing list