]> sourceware.org Git - lvm2.git/commitdiff
filters: check for mpath before opening devs
authorAlasdair G Kergon <agk@redhat.com>
Tue, 13 Aug 2013 22:26:58 +0000 (23:26 +0100)
committerAlasdair G Kergon <agk@redhat.com>
Tue, 13 Aug 2013 22:26:58 +0000 (23:26 +0100)
Split out the partitioned device filter that needs to open the device
and move the multipath filter in front of it.

When a device is multipathed, sending I/O to the underlying paths may
cause problems, the most obvious being I/O errors visible to lvm if a
path is down.

Revert the incorrect <backtrace> messages added when a device doesn't
pass a filter.

Log each filter initialisation to show sequence.

Avoid duplicate 'Using $device' debug messages.

21 files changed:
WHATS_NEW
include/.symlinks.in
lib/Makefile.in
lib/commands/toolcontext.c
lib/device/dev-cache.c
lib/filters/filter-composite.c
lib/filters/filter-composite.h [deleted file]
lib/filters/filter-md.c
lib/filters/filter-md.h [deleted file]
lib/filters/filter-mpath.c
lib/filters/filter-mpath.h [deleted file]
lib/filters/filter-partitioned.c [new file with mode: 0644]
lib/filters/filter-persistent.c
lib/filters/filter-persistent.h [deleted file]
lib/filters/filter-regex.c
lib/filters/filter-regex.h [deleted file]
lib/filters/filter-sysfs.c
lib/filters/filter-sysfs.h [deleted file]
lib/filters/filter-type.c [moved from lib/filters/filter.c with 72% similarity]
lib/filters/filter.h
tools/tools.h

index 49360b2ff46015db2f6b052da2ccab9568cb5de4..67c4b185597d1d66359fcda3d72dad5b8173b9bb 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,8 @@
 Version 2.02.101 - 
 ===================================
+  Move mpath device filter before partitioned filter (which opens devices).
+  Split partitioned filter out of lvm_type filter.
+  Merge filter*.h into a single filter.h.
   Require confirmation for vgchange -c when no VGs listed explicitly.
   Also skip /var and /var/log by default in blkdeactivate when unmounting.
   Add support for bind mounts in blkdeactivate.
index 0fdcdb0bf7945c839ffdce9cd7cfbe5b2036a3db..6de35b8414b88bbe4d9fe5bd2a6bf864eb88fb3e 100644 (file)
 @top_srcdir@/lib/device/dev-type.h
 @top_srcdir@/lib/device/device.h
 @top_srcdir@/lib/display/display.h
-@top_srcdir@/lib/filters/filter-composite.h
-@top_srcdir@/lib/filters/filter-md.h
-@top_srcdir@/lib/filters/filter-mpath.h
-@top_srcdir@/lib/filters/filter-persistent.h
-@top_srcdir@/lib/filters/filter-regex.h
-@top_srcdir@/lib/filters/filter-sysfs.h
 @top_srcdir@/lib/filters/filter.h
 @top_srcdir@/lib/format1/format1.h
 @top_srcdir@/lib/format_pool/format_pool.h
index a58605c3ce0319025fe782cfecfd6b5e0d2ace28..8fdc194416a3492a8c79a38322ec80f509c14270 100644 (file)
@@ -66,7 +66,8 @@ SOURCES =\
        filters/filter-sysfs.c \
        filters/filter-md.c \
        filters/filter-mpath.c \
-       filters/filter.c \
+       filters/filter-partitioned.c \
+       filters/filter-type.c \
        format_text/archive.c \
        format_text/archiver.c \
        format_text/export.c \
index 48fc48926cbe2234f7ad831284b1fcd01bba2a51..65371b110e0e49e9abde8c2b0ecec9cd9b1c00d8 100644 (file)
 #include "lvm-string.h"
 #include "activate.h"
 #include "filter.h"
-#include "filter-composite.h"
-#include "filter-md.h"
-#include "filter-mpath.h"
-#include "filter-persistent.h"
-#include "filter-regex.h"
-#include "filter-sysfs.h"
 #include "label.h"
 #include "lvm-file.h"
 #include "format-text.h"
@@ -35,7 +29,6 @@
 #include "segtype.h"
 #include "lvmcache.h"
 #include "lvmetad.h"
-#include "dev-cache.h"
 #include "archiver.h"
 
 #ifdef HAVE_LIBDL
@@ -824,7 +817,7 @@ static int _init_dev_cache(struct cmd_context *cmd)
        return 1;
 }
 
-#define MAX_FILTERS 5
+#define MAX_FILTERS 6
 
 static struct dev_filter *_init_filter_components(struct cmd_context *cmd)
 {
@@ -853,7 +846,6 @@ static struct dev_filter *_init_filter_components(struct cmd_context *cmd)
        if (!(cn = find_config_tree_node(cmd, devices_filter_CFG, NULL)))
                log_very_verbose("devices/filter not found in config file: "
                                 "no regex filter installed");
-
        else if (!(filters[nr_filt] = regex_filter_create(cn->v))) {
                log_error("Failed to create regex device filter");
                goto bad;
@@ -867,6 +859,19 @@ static struct dev_filter *_init_filter_components(struct cmd_context *cmd)
        }
        nr_filt++;
 
+       /* mpath component filter. Optional, non-critical. */
+       if (find_config_tree_bool(cmd, devices_multipath_component_detection_CFG, NULL)) {
+               if ((filters[nr_filt] = mpath_filter_create(cmd->dev_types)))
+                       nr_filt++;
+       }
+
+       /* partitioned device filter. Required. */
+       if (!(filters[nr_filt] = partitioned_filter_create(cmd->dev_types))) {
+               log_error("Failed to create partitioned device filter");
+               goto bad;
+       }
+       nr_filt++;
+
        /* md component filter. Optional, non-critical. */
        if (find_config_tree_bool(cmd, devices_md_component_detection_CFG, NULL)) {
                init_md_filtering(1);
@@ -874,12 +879,6 @@ static struct dev_filter *_init_filter_components(struct cmd_context *cmd)
                        nr_filt++;
        }
 
-       /* mpath component filter. Optional, non-critical. */
-       if (find_config_tree_bool(cmd, devices_multipath_component_detection_CFG, NULL)) {
-               if ((filters[nr_filt] = mpath_filter_create(cmd->dev_types)))
-                       nr_filt++;
-       }
-
        /* Only build a composite filter if we really need it. */
        if (nr_filt == 1)
                return filters[0];
@@ -888,6 +887,7 @@ static struct dev_filter *_init_filter_components(struct cmd_context *cmd)
                goto_bad;
 
        return composite;
+
 bad:
        while (--nr_filt >= 0)
                 filters[nr_filt]->destroy(filters[nr_filt]);
index 24046ca66f48e1790920a2c559722c6557178c99..46e5d6593c301b715bbff508dcf51bc2d57217b1 100644 (file)
  */
 
 #include "lib.h"
-#include "dev-cache.h"
 #include "lvm-types.h"
 #include "btree.h"
-#include "filter.h"
 #include "config.h"
 #include "toolcontext.h"
 
@@ -923,8 +921,11 @@ struct device *dev_cache_get(const char *name, struct dev_filter *f)
                }
        }
 
-       return (d && (!f || (d->flags & DEV_REGULAR) ||
-                     f->passes_filter(f, d))) ? d : NULL;
+       if (!d || (f && !(d->flags & DEV_REGULAR) && !(f->passes_filter(f, d))))
+               return NULL;
+
+       log_debug_devs("Using %s", dev_name(d));
+       return d;
 }
 
 static struct device *_dev_cache_seek_devt(dev_t dev)
@@ -1007,8 +1008,10 @@ struct device *dev_iter_get(struct dev_iter *iter)
        while (iter->current) {
                struct device *d = _iter_next(iter);
                if (!iter->filter || (d->flags & DEV_REGULAR) ||
-                   iter->filter->passes_filter(iter->filter, d))
+                   iter->filter->passes_filter(iter->filter, d)) {
+                       log_debug_devs("Using %s", dev_name(d));
                        return d;
+               }
        }
 
        return NULL;
index 47d147ed394503d4e64ded88e638d33f89a2fc3b..a6ba71aef70d3433d184f8dfd74f4710a3c7f9b9 100644 (file)
@@ -14,7 +14,7 @@
  */
 
 #include "lib.h"
-#include "filter-composite.h"
+#include "filter.h"
 
 static int _and_p(struct dev_filter *f, struct device *dev)
 {
@@ -22,9 +22,7 @@ static int _and_p(struct dev_filter *f, struct device *dev)
 
        for (filters = (struct dev_filter **) f->private; *filters; ++filters)
                if (!(*filters)->passes_filter(*filters, dev))
-                       return_0;
-
-       log_debug_devs("Using %s", dev_name(dev));
+                       return 0;       /* No 'stack': a filter, not an error. */
 
        return 1;
 }
@@ -92,5 +90,7 @@ struct dev_filter *composite_filter_create(int n, struct dev_filter **filters)
        cft->use_count = 0;
        cft->private = filters_copy;
 
+       log_debug_devs("Composite filter initialised.");
+
        return cft;
 }
diff --git a/lib/filters/filter-composite.h b/lib/filters/filter-composite.h
deleted file mode 100644 (file)
index 75c0b1f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.  
- * Copyright (C) 2004 Red Hat, Inc. All rights reserved.
- *
- * This file is part of LVM2.
- *
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License v.2.1.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef _LVM_FILTER_COMPOSITE_H
-#define _LVM_FILTER_COMPOSITE_H
-
-#include "dev-cache.h"
-
-struct dev_filter *composite_filter_create(int n, struct dev_filter **filters);
-
-#endif
index b18cd071588a03abbb0582580c4dfe437ab981af..0089f936358330ff13fbfce314829bb1c2392c97 100644 (file)
@@ -14,7 +14,7 @@
  */
 
 #include "lib.h"
-#include "filter-md.h"
+#include "filter.h"
 
 #ifdef linux
 
@@ -64,6 +64,8 @@ struct dev_filter *md_filter_create(struct dev_types *dt)
        f->use_count = 0;
        f->private = dt;
 
+       log_debug_devs("MD filter initialised.");
+
        return f;
 }
 
diff --git a/lib/filters/filter-md.h b/lib/filters/filter-md.h
deleted file mode 100644 (file)
index 79e4f0e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2004 Luca Berra
- *
- * This file is part of LVM2.
- *
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License v.2.1.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef _LVM_FILTER_MD_H
-#define _LVM_FILTER_MD_H
-
-#include "dev-cache.h"
-#include "dev-type.h"
-
-struct dev_filter *md_filter_create(struct dev_types *dt);
-
-#endif
-
index 2502f301d9a5f788fd276fad9fdac79358207734..1db22644ecc5a82a9c82fed371a6d1c77faf9970 100644 (file)
@@ -13,7 +13,7 @@
  */
 
 #include "lib.h"
-#include "filter-mpath.h"
+#include "filter.h"
 #include "activate.h"
 
 #ifdef linux
@@ -228,6 +228,8 @@ struct dev_filter *mpath_filter_create(struct dev_types *dt)
        f->use_count = 0;
        f->private = dt;
 
+       log_debug_devs("mpath filter initialised.");
+
        return f;
 }
 
diff --git a/lib/filters/filter-mpath.h b/lib/filters/filter-mpath.h
deleted file mode 100644 (file)
index 5665f3b..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2011 Red Hat, Inc. All rights reserved.
- *
- * This file is part of LVM2.
- *
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License v.2.1.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef _LVM_FILTER_MPATH_H
-#define _LVM_FILTER_MPATH_H
-
-#include "dev-cache.h"
-#include "dev-type.h"
-
-struct dev_filter *mpath_filter_create(struct dev_types *dt);
-
-#endif
-
diff --git a/lib/filters/filter-partitioned.c b/lib/filters/filter-partitioned.c
new file mode 100644 (file)
index 0000000..e3caa0e
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
+ * Copyright (C) 2004-2012 Red Hat, Inc. All rights reserved.
+ *
+ * This file is part of LVM2.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License v.2.1.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "lib.h"
+#include "filter.h"
+
+static int _passes_partitioned_filter(struct dev_filter *f, struct device *dev)
+{
+       struct dev_types *dt = (struct dev_types *) f->private;
+       const char *name = dev_name(dev);
+       int ret = 0;
+       uint64_t size;
+
+       /* Check it's accessible */
+       if (!dev_open_readonly_quiet(dev)) {
+               log_debug_devs("%s: Skipping: open failed", name);
+               return 0;
+       }
+
+       /* Check it's not too small */
+       if (!dev_get_size(dev, &size)) {
+               log_debug_devs("%s: Skipping: dev_get_size failed", name);
+               goto out;
+       }
+
+       if (size < pv_min_size()) {
+               log_debug_devs("%s: Skipping: Too small to hold a PV", name);
+               goto out;
+       }
+
+       if (dev_is_partitioned(dt, dev)) {
+               log_debug_devs("%s: Skipping: Partition table signature found",
+                              name);
+               goto out;
+       }
+
+       ret = 1;
+
+      out:
+       if (!dev_close(dev))
+               stack;
+
+       return ret;
+}
+
+static void _partitioned_filter_destroy(struct dev_filter *f)
+{
+       if (f->use_count)
+               log_error(INTERNAL_ERROR "Destroying partitioned filter while in use %u times.", f->use_count);
+
+       dm_free(f);
+}
+
+struct dev_filter *partitioned_filter_create(struct dev_types *dt)
+{
+       struct dev_filter *f;
+
+       if (!(f = dm_zalloc(sizeof(struct dev_filter)))) {
+               log_error("Partitioned filter allocation failed");
+               return NULL;
+       }
+
+       f->passes_filter = _passes_partitioned_filter;
+       f->destroy = _partitioned_filter_destroy;
+       f->use_count = 0;
+       f->private = dt;
+
+       log_debug_devs("Partitioned filter initialised.");
+
+       return f;
+}
index 2949b93015c6f0820970ef1a5ee62d7781514235..14a34806fdbb89b161aa9b39ceb9e4f27e5ea069 100644 (file)
@@ -14,7 +14,7 @@
  */
 
 #include "lib.h"
-#include "filter-persistent.h"
+#include "filter.h"
 #include "config.h"
 #include "lvm-file.h"
 #include "activate.h"
@@ -366,6 +366,8 @@ struct dev_filter *persistent_filter_create(struct dev_types *dt,
        f->wipe = _persistent_filter_wipe;
        f->dump = _persistent_filter_dump;
 
+       log_debug_devs("Persistent filter initialised.");
+
        return f;
 
       bad:
diff --git a/lib/filters/filter-persistent.h b/lib/filters/filter-persistent.h
deleted file mode 100644 (file)
index bdbf887..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.  
- * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
- *
- * This file is part of LVM2.
- *
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License v.2.1.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef _LVM_FILTER_PERSISTENT_H
-#define _LVM_FILTER_PERSISTENT_H
-
-#include "dev-cache.h"
-#include "dev-type.h"
-
-struct dev_filter *persistent_filter_create(struct dev_types *dt,
-                                           struct dev_filter *f,
-                                           const char *file);
-
-int persistent_filter_load(struct dev_filter *f, struct dm_config_tree **cft_out);
-
-#endif
index 4fe9a7af275e04613545615c4f7e488e9d8c439f..b30290e5e77cc94b2b93c5a11a3ec1295ee8eafb 100644 (file)
@@ -14,7 +14,7 @@
  */
 
 #include "lib.h"
-#include "filter-regex.h"
+#include "filter.h"
 
 struct rfilter {
        struct dm_pool *mem;
@@ -212,6 +212,9 @@ struct dev_filter *regex_filter_create(const struct dm_config_value *patterns)
        f->destroy = _regex_destroy;
        f->use_count = 0;
        f->private = rf;
+
+       log_debug_devs("Regex filter initialised.");
+
        return f;
 
       bad:
diff --git a/lib/filters/filter-regex.h b/lib/filters/filter-regex.h
deleted file mode 100644 (file)
index de05206..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.  
- * Copyright (C) 2004 Red Hat, Inc. All rights reserved.
- *
- * This file is part of LVM2.
- *
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License v.2.1.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef _LVM_FILTER_REGEX_H
-#define _LVM_FILTER_REGEX_H
-
-#include "dev-cache.h"
-
-/*
- * patterns must be an array of strings of the form:
- * [ra]<sep><regex><sep>, eg,
- * r/cdrom/          - reject cdroms
- * a|loop/[0-4]|     - accept loops 0 to 4
- * r|.*|             - reject everything else
- */
-
-struct dev_filter *regex_filter_create(const struct dm_config_value *patterns);
-
-#endif
index cd039c0c989f1828bb2c0292f3f723a5a16a094e..e03becae7c122ca10d87f97bc7909e774a6f74fb 100644 (file)
@@ -13,7 +13,7 @@
  */
 
 #include "lib.h"
-#include "filter-sysfs.h"
+#include "filter.h"
 
 #ifdef linux
 
@@ -324,6 +324,9 @@ struct dev_filter *sysfs_filter_create(void)
        f->destroy = _destroy;
        f->use_count = 0;
        f->private = ds;
+
+       log_debug_devs("Sysfs filter initialised.");
+
        return f;
 
  bad:
diff --git a/lib/filters/filter-sysfs.h b/lib/filters/filter-sysfs.h
deleted file mode 100644 (file)
index 4b26ea6..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (C) 2004 Red Hat, Inc. All rights reserved.
- *
- * This file is part of LVM2.
- *
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License v.2.1.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef _LVM_FILTER_SYSFS_H
-#define _LVM_FILTER_SYSFS_H
-
-#include "dev-cache.h"
-
-struct dev_filter *sysfs_filter_create(void);
-
-#endif
similarity index 72%
rename from lib/filters/filter.c
rename to lib/filters/filter-type.c
index 56935f93df23880b4d80c969b7498aebb4ff110c..b55269b3a5f5a27fd9735b7f2277e200b13c70ca 100644 (file)
@@ -20,8 +20,6 @@ static int _passes_lvm_type_device_filter(struct dev_filter *f, struct device *d
 {
        struct dev_types *dt = (struct dev_types *) f->private;
        const char *name = dev_name(dev);
-       int ret = 0;
-       uint64_t size;
 
        /* Is this a recognised device type? */
        if (!dt->dev_type_array[MAJOR(dev->dev)].max_partitions) {
@@ -30,36 +28,7 @@ static int _passes_lvm_type_device_filter(struct dev_filter *f, struct device *d
                return 0;
        }
 
-       /* Check it's accessible */
-       if (!dev_open_readonly_quiet(dev)) {
-               log_debug_devs("%s: Skipping: open failed", name);
-               return 0;
-       }
-
-       /* Check it's not too small */
-       if (!dev_get_size(dev, &size)) {
-               log_debug_devs("%s: Skipping: dev_get_size failed", name);
-               goto out;
-       }
-
-       if (size < pv_min_size()) {
-               log_debug_devs("%s: Skipping: Too small to hold a PV", name);
-               goto out;
-       }
-
-       if (dev_is_partitioned(dt, dev)) {
-               log_debug_devs("%s: Skipping: Partition table signature found",
-                              name);
-               goto out;
-       }
-
-       ret = 1;
-
-      out:
-       if (!dev_close(dev))
-               stack;
-
-       return ret;
+       return 1;
 }
 
 static void _lvm_type_filter_destroy(struct dev_filter *f)
@@ -84,5 +53,7 @@ struct dev_filter *lvm_type_filter_create(struct dev_types *dt)
        f->use_count = 0;
        f->private = dt;
 
+       log_debug_devs("LVM type filter initialised.");
+
        return f;
 }
index e0a0c6a95ad77a8e8dad49428c2ac2a4c69a527e..219d3f7a79e115250a0659863e03dc7c2100ef41 100644 (file)
@@ -1,6 +1,7 @@
 /*
- * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
- * Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.  
+ * Copyright (C) 2004 Luca Berra
+ * Copyright (C) 2004-2013 Red Hat, Inc. All rights reserved.
  *
  * This file is part of LVM2.
  *
 #include "dev-cache.h"
 #include "dev-type.h"
 
+struct dev_filter *composite_filter_create(int n, struct dev_filter **filters);
 struct dev_filter *lvm_type_filter_create(struct dev_types *dt);
+struct dev_filter *md_filter_create(struct dev_types *dt);
+struct dev_filter *mpath_filter_create(struct dev_types *dt);
+struct dev_filter *partitioned_filter_create(struct dev_types *dt);
+struct dev_filter *persistent_filter_create(struct dev_types *dt,
+                                           struct dev_filter *f,
+                                           const char *file);
+struct dev_filter *sysfs_filter_create(void);
 
-#endif
+/*
+ * patterns must be an array of strings of the form:
+ * [ra]<sep><regex><sep>, eg,
+ * r/cdrom/          - reject cdroms
+ * a|loop/[0-4]|     - accept loops 0 to 4
+ * r|.*|             - reject everything else
+ */
+
+struct dev_filter *regex_filter_create(const struct dm_config_value *patterns);
+
+int persistent_filter_load(struct dev_filter *f, struct dm_config_tree **cft_out);
+
+#endif         /* _LVM_FILTER_H */
index 6e820bff276704a75cec66f41412f388b4932971..a2bfe0d150c663abe5eec6d9d0557f4f7dabb9c9 100644 (file)
 #include "device.h"
 #include "display.h"
 #include "errors.h"
-#include "filter.h"
-#include "filter-composite.h"
-#include "filter-persistent.h"
-#include "filter-regex.h"
 #include "metadata-exported.h"
 #include "locking.h"
 #include "lvm-exec.h"
This page took 0.063038 seconds and 5 git commands to generate.