1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-03 05:18:29 +03:00

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:
This commit is contained in:
Peter Rajnoha 2015-02-12 13:28:00 +01:00
parent 0e9f3dba75
commit d38d047eec

View File

@ -2736,7 +2736,8 @@ int process_each_pv(struct cmd_context *cmd,
* from all VGs are processed first, removing them from all_devices. Then * from all VGs are processed first, removing them from all_devices. Then
* any devs remaining in all_devices are processed. * 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; stack;
return ret; return ret;
} }