Tizen 2.1 base
[external/device-mapper.git] / lib / filters / filter-md.c
1 /*
2  * Copyright (C) 2004 Luca Berra
3  * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
4  *
5  * This file is part of LVM2.
6  *
7  * This copyrighted material is made available to anyone wishing to use,
8  * modify, copy, or redistribute it subject to the terms and conditions
9  * of the GNU Lesser General Public License v.2.1.
10  *
11  * You should have received a copy of the GNU Lesser General Public License
12  * along with this program; if not, write to the Free Software Foundation,
13  * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
14  */
15
16 #include "lib.h"
17 #include "filter-md.h"
18 #include "metadata.h"
19
20 #ifdef linux
21
22 static int _ignore_md(struct dev_filter *f __attribute__((unused)),
23                       struct device *dev)
24 {
25         int ret;
26         
27         if (!md_filtering())
28                 return 1;
29         
30         ret = dev_is_md(dev, NULL);
31
32         if (ret == 1) {
33                 log_debug("%s: Skipping md component device", dev_name(dev));
34                 return 0;
35         }
36
37         if (ret < 0) {
38                 log_debug("%s: Skipping: error in md component detection",
39                           dev_name(dev));
40                 return 0;
41         }
42
43         return 1;
44 }
45
46 static void _destroy(struct dev_filter *f)
47 {
48         if (f->use_count)
49                 log_error(INTERNAL_ERROR "Destroying md filter while in use %u times.", f->use_count);
50
51         dm_free(f);
52 }
53
54 struct dev_filter *md_filter_create(void)
55 {
56         struct dev_filter *f;
57
58         if (!(f = dm_malloc(sizeof(*f)))) {
59                 log_error("md filter allocation failed");
60                 return NULL;
61         }
62
63         f->passes_filter = _ignore_md;
64         f->destroy = _destroy;
65         f->use_count = 0;
66         f->private = NULL;
67
68         return f;
69 }
70
71 #else
72
73 struct dev_filter *md_filter_create(void)
74 {
75         return NULL;
76 }
77
78 #endif