From cf8235e0aad5a736d4e7f9ac05f7fb748a72f097 Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Tue, 4 Aug 2009 15:36:13 +0000 Subject: [PATCH] Add activation/udev_sync to lvm.conf. --- WHATS_NEW | 1 + doc/example.conf | 10 ++++++++++ lib/activate/dev_manager.c | 2 ++ lib/commands/toolcontext.c | 4 ++++ lib/commands/toolcontext.h | 1 + lib/config/defaults.h | 1 + tools/lvmcmdline.c | 3 +++ 7 files changed, 22 insertions(+) diff --git a/WHATS_NEW b/WHATS_NEW index 8ad1c90ec..5fdbd7e06 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.51 - ================================ + Add activation/udev_sync to lvm.conf. Only change LV symlinks on ACTIVATE not PRELOAD. Make lvconvert honour log mirror options combined with downconversion. Allow LV suspend while --ignorelockingfailure is in force. diff --git a/doc/example.conf b/doc/example.conf index 0d6ea4712..5bb207220 100644 --- a/doc/example.conf +++ b/doc/example.conf @@ -301,6 +301,16 @@ global { } activation { + # Set to 0 to disable udev syncronisation (if compiled into the binaries). + # Processes will not wait for notification from udev. + # They will continue irrespective of any possible udev processing + # in the background. You should only use this if udev is not running + # or has rules that ignore the devices LVM2 creates. + # The command line argument --nodevsync takes precedence over this setting. + # If set to 1 when udev is not running, and there are LVM2 processes + # waiting for udev, run 'dmsetup udevcomplete' manually to wake them up. + udev_sync = 1 + # How to fill in missing stripes if activating an incomplete volume. # Using "error" will make inaccessible parts of the device return # I/O errors on access. You can instead use a device path, in which diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c index afe50be50..d674cc0c5 100644 --- a/lib/activate/dev_manager.c +++ b/lib/activate/dev_manager.c @@ -455,6 +455,8 @@ struct dev_manager *dev_manager_create(struct cmd_context *cmd, dm->target_state = NULL; + dm_udev_set_sync_support(cmd->current_settings.udev_sync); + return dm; bad: diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c index 4683e0002..4c2592609 100644 --- a/lib/commands/toolcontext.c +++ b/lib/commands/toolcontext.c @@ -265,6 +265,10 @@ static int _process_config(struct cmd_context *cmd) return 0; } + cmd->default_settings.udev_sync = find_config_tree_int(cmd, + "activation/udev_sync", + DEFAULT_UDEV_SYNC); + cmd->stripe_filler = find_config_tree_str(cmd, "activation/missing_stripe_filler", DEFAULT_STRIPE_FILLER); diff --git a/lib/commands/toolcontext.h b/lib/commands/toolcontext.h index 374b38f15..24f924a15 100644 --- a/lib/commands/toolcontext.h +++ b/lib/commands/toolcontext.h @@ -34,6 +34,7 @@ struct config_info { int archive; /* should we archive ? */ int backup; /* should we backup ? */ int read_ahead; /* DM_READ_AHEAD_NONE or _AUTO */ + int udev_sync; int cache_vgmetadata; const char *msg_prefix; struct format_type *fmt; diff --git a/lib/config/defaults.h b/lib/config/defaults.h index 95d876983..68dceb100 100644 --- a/lib/config/defaults.h +++ b/lib/config/defaults.h @@ -68,6 +68,7 @@ #define DEFAULT_PVMETADATACOPIES 1 #define DEFAULT_LABELSECTOR UINT64_C(1) #define DEFAULT_READ_AHEAD "auto" +#define DEFAULT_UDEV_SYNC 0 #define DEFAULT_EXTENT_SIZE 4096 /* In KB */ #define DEFAULT_MAX_PV 0 #define DEFAULT_MAX_LV 0 diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c index 0966d0bc6..d13c57c08 100644 --- a/tools/lvmcmdline.c +++ b/tools/lvmcmdline.c @@ -830,6 +830,9 @@ static int _get_settings(struct cmd_context *cmd) } else init_trust_cache(0); + if (arg_count(cmd, noudevsync_ARG)) + cmd->current_settings.udev_sync = 0; + /* Handle synonyms */ if (!_merge_synonym(cmd, resizable_ARG, resizeable_ARG) || !_merge_synonym(cmd, allocation_ARG, allocatable_ARG) ||