mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
deallocations
This commit is contained in:
parent
10a6939753
commit
014a5c0bf0
@ -33,6 +33,7 @@ static void _destroy(struct dev_filter *f)
|
||||
}
|
||||
|
||||
dbg_free(f->private);
|
||||
dbg_free(f);
|
||||
}
|
||||
|
||||
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <linux/kdev_t.h>
|
||||
|
||||
#define NUMBER_OF_MAJORS 256
|
||||
@ -56,11 +57,21 @@ static int *scan_proc_dev(void);
|
||||
|
||||
static int passes_lvm_type_device_filter(struct dev_filter *f, struct device *dev)
|
||||
{
|
||||
int fd;
|
||||
|
||||
/* Is this a recognised device type? */
|
||||
if (!(((int *) f->private)[MAJOR(dev->dev)]))
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
|
||||
/* Check it's accessible */
|
||||
if ((fd = open(dev->name, O_RDONLY)) < 0) {
|
||||
log_debug("Unable to open %s: %s", dev->name, strerror(errno));
|
||||
return 0;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct dev_filter *lvm_type_filter_create()
|
||||
@ -68,11 +79,12 @@ struct dev_filter *lvm_type_filter_create()
|
||||
struct dev_filter *f;
|
||||
|
||||
if (!(f = dbg_malloc(sizeof (struct dev_filter)))) {
|
||||
log_error("lvm_v1_filter allocation failed");
|
||||
log_error("LVM type filter allocation failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
f->passes_filter = passes_lvm_type_device_filter;
|
||||
f->destroy = lvm_type_filter_destroy;
|
||||
|
||||
if (!(f->private = scan_proc_dev()))
|
||||
return NULL;
|
||||
|
12
tools/lvm.c
12
tools/lvm.c
@ -608,22 +608,22 @@ static struct dev_filter *filter_setup(void)
|
||||
struct config_node *cn;
|
||||
struct dev_filter *f1, *f2, *f3, *f4;
|
||||
|
||||
if (!(f1 = lvm_type_filter_create()))
|
||||
if (!(f2 = lvm_type_filter_create()))
|
||||
return 0;
|
||||
|
||||
if (!(cn = find_config_node(_cf->root, "devices/filter", '/'))) {
|
||||
log_debug("devices/filter not found in config file");
|
||||
return f1;
|
||||
return f2;
|
||||
}
|
||||
|
||||
if (!(f2 = regex_filter_create(cn->v))) {
|
||||
if (!(f1 = regex_filter_create(cn->v))) {
|
||||
log_error("Failed to create regex device filter");
|
||||
return f1;
|
||||
return f2;
|
||||
}
|
||||
|
||||
if (!(f4 = composite_filter_create(2, f1, f2))) {
|
||||
log_error("Failed to create composite device filter");
|
||||
return f1;
|
||||
return f2;
|
||||
}
|
||||
|
||||
return f4;
|
||||
@ -699,7 +699,7 @@ static void __fin_commands(void)
|
||||
static void fin(void)
|
||||
{
|
||||
ios->destroy(ios);
|
||||
lvm_type_filter_destroy(_filter);
|
||||
_filter->destroy(_filter);
|
||||
dev_cache_exit();
|
||||
destroy_config_file(_cf);
|
||||
__fin_commands();
|
||||
|
Loading…
Reference in New Issue
Block a user