|
|
a9ef5a |
WHATS_NEW | 1 +
|
|
|
a9ef5a |
lib/commands/toolcontext.c | 64 +++++++++++++++++++++++++++-------------------
|
|
|
a9ef5a |
2 files changed, 39 insertions(+), 26 deletions(-)
|
|
|
a9ef5a |
|
|
|
a9ef5a |
diff --git a/WHATS_NEW b/WHATS_NEW
|
|
|
a9ef5a |
index 6441cc1..0e77789 100644
|
|
|
a9ef5a |
--- a/WHATS_NEW
|
|
|
a9ef5a |
+++ b/WHATS_NEW
|
|
|
a9ef5a |
@@ -16,6 +16,7 @@ Version 2.02.133 -
|
|
|
a9ef5a |
|
|
|
a9ef5a |
Version 2.02.131 -
|
|
|
a9ef5a |
=====================================
|
|
|
a9ef5a |
+ Fix devices/filter to be applied before disk-accessing filters. (2.02.112)
|
|
|
a9ef5a |
Fix vgimportclone cache_dir path name (2.02.115).
|
|
|
a9ef5a |
Disallow usage of --stripe and --stripesize when creating cache pool.
|
|
|
a9ef5a |
Swapping of LV identifiers handles more complex LVs.
|
|
|
a9ef5a |
diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c
|
|
|
a9ef5a |
index 11affee..c8d96ca 100644
|
|
|
a9ef5a |
--- a/lib/commands/toolcontext.c
|
|
|
a9ef5a |
+++ b/lib/commands/toolcontext.c
|
|
|
a9ef5a |
@@ -1069,7 +1069,7 @@ static struct dev_filter *_init_lvmetad_filter_chain(struct cmd_context *cmd)
|
|
|
a9ef5a |
nr_filt++;
|
|
|
a9ef5a |
}
|
|
|
a9ef5a |
|
|
|
a9ef5a |
- /* regex filter. Optional. */
|
|
|
a9ef5a |
+ /* global regex filter. Optional. */
|
|
|
a9ef5a |
if ((cn = find_config_tree_node(cmd, devices_global_filter_CFG, NULL))) {
|
|
|
a9ef5a |
if (!(filters[nr_filt] = regex_filter_create(cn->v))) {
|
|
|
a9ef5a |
log_error("Failed to create global regex device filter");
|
|
|
a9ef5a |
@@ -1078,6 +1078,17 @@ static struct dev_filter *_init_lvmetad_filter_chain(struct cmd_context *cmd)
|
|
|
a9ef5a |
nr_filt++;
|
|
|
a9ef5a |
}
|
|
|
a9ef5a |
|
|
|
a9ef5a |
+ /* regex filter. Optional. */
|
|
|
a9ef5a |
+ if (!lvmetad_used()) {
|
|
|
a9ef5a |
+ if ((cn = find_config_tree_node(cmd, devices_filter_CFG, NULL))) {
|
|
|
a9ef5a |
+ if (!(filters[nr_filt] = regex_filter_create(cn->v))) {
|
|
|
a9ef5a |
+ log_error("Failed to create regex device filter");
|
|
|
a9ef5a |
+ goto bad;
|
|
|
a9ef5a |
+ }
|
|
|
a9ef5a |
+ nr_filt++;
|
|
|
a9ef5a |
+ }
|
|
|
a9ef5a |
+ }
|
|
|
a9ef5a |
+
|
|
|
a9ef5a |
/* device type filter. Required. */
|
|
|
a9ef5a |
if (!(filters[nr_filt] = lvm_type_filter_create(cmd->dev_types))) {
|
|
|
a9ef5a |
log_error("Failed to create lvm type filter");
|
|
|
a9ef5a |
@@ -1145,26 +1156,24 @@ bad:
|
|
|
a9ef5a |
* md component filter -> fw raid filter
|
|
|
a9ef5a |
*
|
|
|
a9ef5a |
* - cmd->filter - the filter chain used for lvmetad responses:
|
|
|
a9ef5a |
- * persistent filter -> usable device filter(FILTER_MODE_POST_LVMETAD) ->
|
|
|
a9ef5a |
- * regex filter
|
|
|
a9ef5a |
+ * persistent filter -> regex_filter -> usable device filter(FILTER_MODE_POST_LVMETAD)
|
|
|
a9ef5a |
*
|
|
|
a9ef5a |
* - cmd->full_filter - the filter chain used for all the remaining situations:
|
|
|
a9ef5a |
- * lvmetad_filter -> filter
|
|
|
a9ef5a |
+ * cmd->lvmetad_filter -> cmd->filter
|
|
|
a9ef5a |
*
|
|
|
a9ef5a |
- * If lvmetad isnot used, there's just one filter chain:
|
|
|
a9ef5a |
+ * If lvmetad is not used, there's just one filter chain:
|
|
|
a9ef5a |
*
|
|
|
a9ef5a |
* - cmd->filter == cmd->full_filter:
|
|
|
a9ef5a |
- * persistent filter -> regex filter -> sysfs filter ->
|
|
|
a9ef5a |
- * global regex filter -> type filter ->
|
|
|
a9ef5a |
- * usable device filter(FILTER_MODE_NO_LVMETAD) ->
|
|
|
a9ef5a |
- * mpath component filter -> partitioned filter ->
|
|
|
a9ef5a |
- * md component filter -> fw raid filter
|
|
|
a9ef5a |
+ * persistent filter -> sysfs filter -> global regex filter ->
|
|
|
a9ef5a |
+ * regex_filter -> type filter -> usable device filter(FILTER_MODE_NO_LVMETAD) ->
|
|
|
a9ef5a |
+ * mpath component filter -> partitioned filter -> md component filter -> fw raid filter
|
|
|
a9ef5a |
*
|
|
|
a9ef5a |
*/
|
|
|
a9ef5a |
int init_filters(struct cmd_context *cmd, unsigned load_persistent_cache)
|
|
|
a9ef5a |
{
|
|
|
a9ef5a |
const char *dev_cache;
|
|
|
a9ef5a |
struct dev_filter *filter = NULL, *filter_components[2] = {0};
|
|
|
a9ef5a |
+ int nr_filt;
|
|
|
a9ef5a |
struct stat st;
|
|
|
a9ef5a |
const struct dm_config_node *cn;
|
|
|
a9ef5a |
struct timespec ts, cts;
|
|
|
a9ef5a |
@@ -1193,26 +1202,26 @@ int init_filters(struct cmd_context *cmd, unsigned load_persistent_cache)
|
|
|
a9ef5a |
*/
|
|
|
a9ef5a |
/* filter component 0 */
|
|
|
a9ef5a |
if (lvmetad_used()) {
|
|
|
a9ef5a |
- if (!(filter_components[0] = usable_filter_create(cmd->dev_types, FILTER_MODE_POST_LVMETAD))) {
|
|
|
a9ef5a |
+ nr_filt = 0;
|
|
|
a9ef5a |
+ if ((cn = find_config_tree_array(cmd, devices_filter_CFG, NULL))) {
|
|
|
a9ef5a |
+ if (!(filter_components[nr_filt] = regex_filter_create(cn->v))) {
|
|
|
a9ef5a |
+ log_verbose("Failed to create regex device filter.");
|
|
|
a9ef5a |
+ goto bad;
|
|
|
a9ef5a |
+ }
|
|
|
a9ef5a |
+ nr_filt++;
|
|
|
a9ef5a |
+ }
|
|
|
a9ef5a |
+ if (!(filter_components[nr_filt] = usable_filter_create(cmd->dev_types, FILTER_MODE_POST_LVMETAD))) {
|
|
|
a9ef5a |
log_verbose("Failed to create usable device filter.");
|
|
|
a9ef5a |
goto bad;
|
|
|
a9ef5a |
}
|
|
|
a9ef5a |
+ nr_filt++;
|
|
|
a9ef5a |
+ if (!(filter = composite_filter_create(nr_filt, 0, filter_components)))
|
|
|
a9ef5a |
+ goto_bad;
|
|
|
a9ef5a |
} else {
|
|
|
a9ef5a |
- filter_components[0] = cmd->lvmetad_filter;
|
|
|
a9ef5a |
+ filter = cmd->lvmetad_filter;
|
|
|
a9ef5a |
cmd->lvmetad_filter = NULL;
|
|
|
a9ef5a |
}
|
|
|
a9ef5a |
|
|
|
a9ef5a |
- /* filter component 1 */
|
|
|
a9ef5a |
- if ((cn = find_config_tree_array(cmd, devices_filter_CFG, NULL))) {
|
|
|
a9ef5a |
- if (!(filter_components[1] = regex_filter_create(cn->v)))
|
|
|
a9ef5a |
- goto_bad;
|
|
|
a9ef5a |
- /* we have two filter components - create composite filter */
|
|
|
a9ef5a |
- if (!(filter = composite_filter_create(2, 0, filter_components)))
|
|
|
a9ef5a |
- goto_bad;
|
|
|
a9ef5a |
- } else
|
|
|
a9ef5a |
- /* we have only one filter component - no need to create composite filter */
|
|
|
a9ef5a |
- filter = filter_components[0];
|
|
|
a9ef5a |
-
|
|
|
a9ef5a |
if (!(dev_cache = find_config_tree_str(cmd, devices_cache_CFG, NULL)))
|
|
|
a9ef5a |
goto_bad;
|
|
|
a9ef5a |
|
|
|
a9ef5a |
@@ -1224,9 +1233,12 @@ int init_filters(struct cmd_context *cmd, unsigned load_persistent_cache)
|
|
|
a9ef5a |
cmd->filter = filter;
|
|
|
a9ef5a |
|
|
|
a9ef5a |
if (lvmetad_used()) {
|
|
|
a9ef5a |
- filter_components[0] = cmd->lvmetad_filter;
|
|
|
a9ef5a |
- filter_components[1] = cmd->filter;
|
|
|
a9ef5a |
- if (!(cmd->full_filter = composite_filter_create(2, 0, filter_components)))
|
|
|
a9ef5a |
+ nr_filt = 0;
|
|
|
a9ef5a |
+ filter_components[nr_filt] = cmd->lvmetad_filter;
|
|
|
a9ef5a |
+ nr_filt++;
|
|
|
a9ef5a |
+ filter_components[nr_filt] = cmd->filter;
|
|
|
a9ef5a |
+ nr_filt++;
|
|
|
a9ef5a |
+ if (!(cmd->full_filter = composite_filter_create(nr_filt, 0, filter_components)))
|
|
|
a9ef5a |
goto_bad;
|
|
|
a9ef5a |
} else
|
|
|
a9ef5a |
cmd->full_filter = filter;
|