diff options
Diffstat (limited to 'lib/commands/toolcontext.c')
-rw-r--r-- | lib/commands/toolcontext.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c index 63b6811e5..0f5f8ada1 100644 --- a/lib/commands/toolcontext.c +++ b/lib/commands/toolcontext.c @@ -32,6 +32,7 @@ #include "lib/cache/lvmcache.h" #include "lib/format_text/archiver.h" #include "lib/lvmpolld/lvmpolld-client.h" +#include "lib/device/device_id.h" #include <locale.h> #include <sys/stat.h> @@ -1066,7 +1067,7 @@ static int _init_dev_cache(struct cmd_context *cmd) return 1; } -#define MAX_FILTERS 10 +#define MAX_FILTERS 11 static struct dev_filter *_init_filter_chain(struct cmd_context *cmd) { @@ -1085,6 +1086,9 @@ static struct dev_filter *_init_filter_chain(struct cmd_context *cmd) * sysfs filter. Only available on 2.6 kernels. Non-critical. * Listed first because it's very efficient at eliminating * unavailable devices. + * + * TODO: I suspect that using the lvm_type and device_id + * filters before this one may be more efficient. */ if (find_config_tree_bool(cmd, devices_sysfs_scan_CFG, NULL)) { if ((filters[nr_filt] = sysfs_filter_create())) @@ -1123,6 +1127,13 @@ static struct dev_filter *_init_filter_chain(struct cmd_context *cmd) } nr_filt++; + /* filter based on the device_ids saved in the lvm_devices file */ + if (!(filters[nr_filt] = deviceid_filter_create(cmd))) { + log_error("Failed to create deviceid device filter"); + goto bad; + } + nr_filt++; + /* usable device filter. Required. */ if (!(filters[nr_filt] = usable_filter_create(cmd, cmd->dev_types, FILTER_MODE_NO_LVMETAD))) { log_error("Failed to create usabled device filter"); @@ -1717,6 +1728,8 @@ struct cmd_context *create_toolcontext(unsigned is_clvmd, if (!_init_dev_cache(cmd)) goto_out; + device_ids_init(cmd); + memlock_init(cmd); if (!_init_formats(cmd)) @@ -1842,6 +1855,7 @@ int refresh_toolcontext(struct cmd_context *cmd) _destroy_segtypes(&cmd->segtypes); _destroy_formats(cmd, &cmd->formats); + device_ids_exit(cmd); if (!dev_cache_exit()) stack; _destroy_dev_types(cmd); @@ -1921,6 +1935,8 @@ int refresh_toolcontext(struct cmd_context *cmd) if (!_init_dev_cache(cmd)) return_0; + device_ids_init(cmd); + if (!_init_formats(cmd)) return_0; @@ -1970,6 +1986,7 @@ void destroy_toolcontext(struct cmd_context *cmd) _destroy_filters(cmd); if (cmd->mem) dm_pool_destroy(cmd->mem); + device_ids_exit(cmd); dev_cache_exit(); _destroy_dev_types(cmd); _destroy_tags(cmd); |