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:
parent
288adea256
commit
48a00f1320
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
16
tools/lvm.c
16
tools/lvm.c
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user