1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-03 05:18:29 +03:00

o More comprehensive config parameter debugging messages.

o Make /proc configurable.
 o Review hard-coded "/dev"s - made 2 more of them configurable.
This commit is contained in:
Alasdair Kergon 2002-01-15 23:34:13 +00:00
parent 288adea256
commit 48a00f1320
5 changed files with 46 additions and 16 deletions

View File

@ -553,8 +553,10 @@ find_config_str(struct config_node *cn,
{ {
struct config_node *n = find_config_node(cn, path, sep); struct config_node *n = find_config_node(cn, path, sep);
if (n && n->v->type == CFG_STRING) if (n && n->v->type == CFG_STRING) {
log_debug("Setting %s to %s", path, n->v->v.str);
return n->v->v.str; return n->v->v.str;
}
if (fail) if (fail)
log_debug("%s not found in config: defaulting to %s", log_debug("%s not found in config: defaulting to %s",
@ -567,9 +569,12 @@ int find_config_int(struct config_node *cn, const char *path,
{ {
struct config_node *n = find_config_node(cn, path, sep); struct config_node *n = find_config_node(cn, path, sep);
if (n && n->v->type == CFG_INT) if (n && n->v->type == CFG_INT) {
log_debug("Setting %s to %d", path, n->v->v.i);
return n->v->v.i; return n->v->v.i;
}
log_debug("%s not found in config: defaulting to %d", path, fail);
return fail; return fail;
} }
@ -578,8 +583,13 @@ float find_config_float(struct config_node *cn, const char *path,
{ {
struct config_node *n = find_config_node(cn, path, sep); struct config_node *n = find_config_node(cn, path, sep);
if (n && n->v->type == CFG_FLOAT) if (n && n->v->type == CFG_FLOAT) {
log_debug("Setting %s to %f", path, n->v->v.r);
return n->v->v.r; return n->v->v.r;
}
log_debug("%s not found in config: defaulting to %f",
path, fail);
return fail; return fail;

View File

@ -22,6 +22,7 @@
#include "log.h" #include "log.h"
#include "dev-cache.h" #include "dev-cache.h"
#include "filter.h" #include "filter.h"
#include "lvm-string.h"
#include <stdlib.h> #include <stdlib.h>
#include <dirent.h> #include <dirent.h>
@ -53,7 +54,7 @@ static device_info_t device_info[] = {
{NULL, 0} {NULL, 0}
}; };
static int *scan_proc_dev(void); static int *scan_proc_dev(const char *proc);
static int passes_lvm_type_device_filter(struct dev_filter *f, static int passes_lvm_type_device_filter(struct dev_filter *f,
struct device *dev) struct device *dev)
@ -76,7 +77,7 @@ static int passes_lvm_type_device_filter(struct dev_filter *f,
return 1; return 1;
} }
struct dev_filter *lvm_type_filter_create() struct dev_filter *lvm_type_filter_create(const char *proc)
{ {
struct dev_filter *f; struct dev_filter *f;
@ -88,7 +89,7 @@ struct dev_filter *lvm_type_filter_create()
f->passes_filter = passes_lvm_type_device_filter; f->passes_filter = passes_lvm_type_device_filter;
f->destroy = lvm_type_filter_destroy; f->destroy = lvm_type_filter_destroy;
if (!(f->private = scan_proc_dev())) if (!(f->private = scan_proc_dev(proc)))
return NULL; return NULL;
return f; return f;
@ -101,10 +102,11 @@ void lvm_type_filter_destroy(struct dev_filter *f)
return; return;
} }
static int *scan_proc_dev(void) static int *scan_proc_dev(const char *proc)
{ {
char line[80]; char line[80];
FILE *procdevices = NULL; char proc_devices[PATH_MAX];
FILE *pd = NULL;
int ret = 0; int ret = 0;
int i, j = 0; int i, j = 0;
int line_maj = 0; int line_maj = 0;
@ -118,13 +120,19 @@ static int *scan_proc_dev(void)
return NULL; return NULL;
} }
if (!(procdevices = fopen("/proc/devices", "r"))) { if (lvm_snprintf(proc_devices, sizeof(proc_devices),
log_error("Failed to open /proc/devices: %s", strerror(errno)); "%s/devices", proc) < 0) {
log_error("Failed to create /proc/devices string");
return NULL;
}
if (!(pd = fopen(proc_devices, "r"))) {
log_sys_error("fopen", proc_devices);
return NULL; return NULL;
} }
memset(max_partitions_by_major, 0, sizeof (int) * NUMBER_OF_MAJORS); memset(max_partitions_by_major, 0, sizeof (int) * NUMBER_OF_MAJORS);
while (fgets(line, 80, procdevices) != NULL) { while (fgets(line, 80, pd) != NULL) {
i = 0; i = 0;
while (line[i] == ' ' && line[i] != '\0') while (line[i] == ' ' && line[i] != '\0')
i++; i++;
@ -161,6 +169,6 @@ static int *scan_proc_dev(void)
} }
} }
} }
fclose(procdevices); fclose(pd);
return max_partitions_by_major; return max_partitions_by_major;
} }

View File

@ -145,6 +145,9 @@ Defaults to 30.
.TP .TP
\fBglobal\fP \(em Global settings \fBglobal\fP \(em Global settings
.IP .IP
\fBproc\fP \(em Mount point of proc filesystem.
Defaults to /proc.
.IP
\fBumask\fP \(em File creation mask for any files and directories created. \fBumask\fP \(em File creation mask for any files and directories created.
Interpreted as octal if the first digit is zero. Interpreted as octal if the first digit is zero.
Defaults to 077. Defaults to 077.

View File

@ -20,6 +20,7 @@
#define DEFAULT_ARCHIVE_NUMBER 10 #define DEFAULT_ARCHIVE_NUMBER 10
#define DEFAULT_DEV_DIR "/dev" #define DEFAULT_DEV_DIR "/dev"
#define DEFAULT_PROC_DIR "/proc"
#define DEFAULT_UMASK 0077 #define DEFAULT_UMASK 0077

View File

@ -92,6 +92,7 @@ static struct config_info _current_settings;
*/ */
static char _sys_dir[PATH_MAX] = "/etc/lvm"; static char _sys_dir[PATH_MAX] = "/etc/lvm";
static char _dev_dir[PATH_MAX]; static char _dev_dir[PATH_MAX];
static char _proc_dir[PATH_MAX];
/* static functions */ /* static functions */
static void register_commands(void); static void register_commands(void);
@ -705,12 +706,12 @@ static void __init_log(struct config_file *cf)
find_config_int(cf->root, "log/verbose", '/', 0); find_config_int(cf->root, "log/verbose", '/', 0);
_default_settings.test = find_config_int(cf->root, "log/test", '/', 0); _default_settings.test = find_config_int(cf->root, "log/test", '/', 0);
init_debug(_default_settings.debug);
init_verbose(_default_settings.verbose);
if (find_config_int(cf->root, "log/overwrite", '/', 0)) if (find_config_int(cf->root, "log/overwrite", '/', 0))
open_mode = "w"; open_mode = "w";
init_debug(_default_settings.debug);
init_verbose(_default_settings.verbose);
if (log_file) { if (log_file) {
/* set up the logging */ /* set up the logging */
if (!(_log = fopen(log_file, open_mode))) if (!(_log = fopen(log_file, open_mode)))
@ -826,7 +827,7 @@ static struct dev_filter *filter_components_setup(struct config_file *cf)
struct config_node *cn; struct config_node *cn;
struct dev_filter *f1, *f2, *f3; struct dev_filter *f1, *f2, *f3;
if (!(f2 = lvm_type_filter_create())) if (!(f2 = lvm_type_filter_create(_proc_dir)))
return 0; return 0;
if (!(cn = find_config_node(cf->root, "devices/filter", '/'))) { if (!(cn = find_config_node(cf->root, "devices/filter", '/'))) {
@ -999,6 +1000,13 @@ static int init(void)
dm_log_init(print_log); dm_log_init(print_log);
if (lvm_snprintf(_proc_dir, sizeof(_proc_dir), "%s",
find_config_str(cmd->cf->root, "global/proc",
'/', DEFAULT_PROC_DIR)) < 0) {
log_error("Device directory given in config file too long");
return 0;
}
if (!_init_backup(cmd->cf)) if (!_init_backup(cmd->cf))
return 0; return 0;