1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

deallocations

This commit is contained in:
Alasdair Kergon 2001-10-23 12:33:57 +00:00
parent 10a6939753
commit 014a5c0bf0
3 changed files with 22 additions and 9 deletions

View File

@ -33,6 +33,7 @@ static void _destroy(struct dev_filter *f)
} }
dbg_free(f->private); dbg_free(f->private);
dbg_free(f);
} }

View File

@ -29,6 +29,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include <fcntl.h>
#include <linux/kdev_t.h> #include <linux/kdev_t.h>
#define NUMBER_OF_MAJORS 256 #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) static int passes_lvm_type_device_filter(struct dev_filter *f, struct device *dev)
{ {
int fd;
/* Is this a recognised device type? */ /* Is this a recognised device type? */
if (!(((int *) f->private)[MAJOR(dev->dev)])) if (!(((int *) f->private)[MAJOR(dev->dev)]))
return 0; 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() struct dev_filter *lvm_type_filter_create()
@ -68,11 +79,12 @@ struct dev_filter *lvm_type_filter_create()
struct dev_filter *f; struct dev_filter *f;
if (!(f = dbg_malloc(sizeof (struct dev_filter)))) { if (!(f = dbg_malloc(sizeof (struct dev_filter)))) {
log_error("lvm_v1_filter allocation failed"); log_error("LVM type filter allocation failed");
return NULL; return NULL;
} }
f->passes_filter = passes_lvm_type_device_filter; f->passes_filter = passes_lvm_type_device_filter;
f->destroy = lvm_type_filter_destroy;
if (!(f->private = scan_proc_dev())) if (!(f->private = scan_proc_dev()))
return NULL; return NULL;

View File

@ -608,22 +608,22 @@ static struct dev_filter *filter_setup(void)
struct config_node *cn; struct config_node *cn;
struct dev_filter *f1, *f2, *f3, *f4; struct dev_filter *f1, *f2, *f3, *f4;
if (!(f1 = lvm_type_filter_create())) if (!(f2 = lvm_type_filter_create()))
return 0; return 0;
if (!(cn = find_config_node(_cf->root, "devices/filter", '/'))) { if (!(cn = find_config_node(_cf->root, "devices/filter", '/'))) {
log_debug("devices/filter not found in config file"); 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"); log_error("Failed to create regex device filter");
return f1; return f2;
} }
if (!(f4 = composite_filter_create(2, f1, f2))) { if (!(f4 = composite_filter_create(2, f1, f2))) {
log_error("Failed to create composite device filter"); log_error("Failed to create composite device filter");
return f1; return f2;
} }
return f4; return f4;
@ -699,7 +699,7 @@ static void __fin_commands(void)
static void fin(void) static void fin(void)
{ {
ios->destroy(ios); ios->destroy(ios);
lvm_type_filter_destroy(_filter); _filter->destroy(_filter);
dev_cache_exit(); dev_cache_exit();
destroy_config_file(_cf); destroy_config_file(_cf);
__fin_commands(); __fin_commands();