mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
udev: recognize DM_DISABLE_UDEV environment variable
Setting this environment variable will cause a full fallback to old direct node and symlink management in libdevmapper and lvm2. It means: - disabling udev synchronization (--noudevsync in dmsetup and --noudevsync + activation/udev_sync=0 lvm2 config) - disabling dm and any subsystem related udev rules (--noudevrules in dmsetup and activation/udev_rules=0 lvm2 config) - management of nodes/symlinks under /dev directly by libdevmapper/lvm2 (--verifyudev in dmsetup and activation/verify_udev_operations=1 lvm2 config) - not obtaining any device list from udev database (devices/obtain_device_list_from_udev=0 lvm2 config) Note: we could set all of these before - there's no functional change! However the DM_DISABLE_UDEV environment variable is a nice shortcut to make it easier for libdevmapper users so that one can switch off all of the udev management off at one go directly on the command line, without a need to modify any source or add any extra switches.
This commit is contained in:
parent
fb8cc7c63f
commit
4891a735d3
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.99 -
|
Version 2.02.99 -
|
||||||
===================================
|
===================================
|
||||||
|
Recognize DM_DISABLE_UDEV environment variable for a complete fallback.
|
||||||
Do not verify udev operations if --noudevsync command option is used.
|
Do not verify udev operations if --noudevsync command option is used.
|
||||||
Fix lvm2api and return lvseg discards property as string.
|
Fix lvm2api and return lvseg discards property as string.
|
||||||
Allow forced vgcfgrestore of lvm2 metadata with thin volumes.
|
Allow forced vgcfgrestore of lvm2 metadata with thin volumes.
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
Version 1.02.78 -
|
Version 1.02.78 -
|
||||||
===================================
|
===================================
|
||||||
|
Add DM_DISABLE_UDEV environment variable to manage dev nodes by libdm only.
|
||||||
Fix dm_task_set_cookie to properly process udev flags if udev_sync disabled.
|
Fix dm_task_set_cookie to properly process udev flags if udev_sync disabled.
|
||||||
|
|
||||||
Version 1.02.77 - 15th October 2012
|
Version 1.02.77 - 15th October 2012
|
||||||
|
@ -237,6 +237,7 @@ static int _process_config(struct cmd_context *cmd)
|
|||||||
const struct dm_config_value *cv;
|
const struct dm_config_value *cv;
|
||||||
int64_t pv_min_kb;
|
int64_t pv_min_kb;
|
||||||
const char *lvmetad_socket;
|
const char *lvmetad_socket;
|
||||||
|
int udev_disabled = 0;
|
||||||
|
|
||||||
/* umask */
|
/* umask */
|
||||||
cmd->default_settings.umask = find_config_tree_int(cmd,
|
cmd->default_settings.umask = find_config_tree_int(cmd,
|
||||||
@ -310,13 +311,25 @@ static int _process_config(struct cmd_context *cmd)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd->default_settings.udev_rules = find_config_tree_int(cmd,
|
/*
|
||||||
"activation/udev_rules",
|
* If udev is disabled using DM_DISABLE_UDEV environment
|
||||||
DEFAULT_UDEV_RULES);
|
* variable, override existing config and hardcode these:
|
||||||
|
* - udev_rules = 0
|
||||||
|
* - udev_sync = 0
|
||||||
|
* - udev_fallback = 1
|
||||||
|
*/
|
||||||
|
if (getenv("DM_DISABLE_UDEV")) {
|
||||||
|
log_very_verbose("DM_DISABLE_UDEV environment variable set. "
|
||||||
|
"Overriding configuration to use "
|
||||||
|
"udev_rules=0, udev_sync=0, verify_udev_operations=1.");
|
||||||
|
udev_disabled = 1;
|
||||||
|
}
|
||||||
|
|
||||||
cmd->default_settings.udev_sync = find_config_tree_int(cmd,
|
cmd->default_settings.udev_rules = udev_disabled ? 0 :
|
||||||
"activation/udev_sync",
|
find_config_tree_int(cmd, "activation/udev_rules", DEFAULT_UDEV_RULES);
|
||||||
DEFAULT_UDEV_SYNC);
|
|
||||||
|
cmd->default_settings.udev_sync = udev_disabled ? 0 :
|
||||||
|
find_config_tree_int(cmd, "activation/udev_sync", DEFAULT_UDEV_SYNC);
|
||||||
|
|
||||||
init_retry_deactivation(find_config_tree_int(cmd, "activation/retry_deactivation",
|
init_retry_deactivation(find_config_tree_int(cmd, "activation/retry_deactivation",
|
||||||
DEFAULT_RETRY_DEACTIVATION));
|
DEFAULT_RETRY_DEACTIVATION));
|
||||||
@ -326,14 +339,12 @@ static int _process_config(struct cmd_context *cmd)
|
|||||||
|
|
||||||
#ifdef UDEV_SYNC_SUPPORT
|
#ifdef UDEV_SYNC_SUPPORT
|
||||||
/*
|
/*
|
||||||
* We need udev rules to be applied, otherwise we would end up with no
|
* Use udev fallback automatically in case udev
|
||||||
* nodes and symlinks! However, we can disable the synchronization itself
|
* is disabled via DM_DISABLE_UDEV environment
|
||||||
* in runtime and still have only udev to create the nodes and symlinks
|
* variable or udev rules are switched off.
|
||||||
* without any fallback.
|
|
||||||
*/
|
*/
|
||||||
cmd->default_settings.udev_fallback = cmd->default_settings.udev_rules ?
|
cmd->default_settings.udev_fallback = !cmd->default_settings.udev_rules || udev_disabled ? 1 :
|
||||||
find_config_tree_int(cmd, "activation/verify_udev_operations",
|
find_config_tree_int(cmd, "activation/verify_udev_operations", DEFAULT_VERIFY_UDEV_OPERATIONS);
|
||||||
DEFAULT_VERIFY_UDEV_OPERATIONS) : 1;
|
|
||||||
|
|
||||||
/* Do not rely fully on udev if the udev support is known to be incomplete. */
|
/* Do not rely fully on udev if the udev support is known to be incomplete. */
|
||||||
if (!cmd->default_settings.udev_fallback && !_dm_driver_has_stable_udev_support()) {
|
if (!cmd->default_settings.udev_fallback && !_dm_driver_has_stable_udev_support()) {
|
||||||
@ -693,9 +704,21 @@ static int _init_dev_cache(struct cmd_context *cmd)
|
|||||||
if (!dev_cache_init(cmd))
|
if (!dev_cache_init(cmd))
|
||||||
return_0;
|
return_0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Override existing config and hardcode device_list_from_udev = 0 if:
|
||||||
|
* - udev is not running
|
||||||
|
* - udev is disabled using DM_DISABLE_UDEV environment variable
|
||||||
|
*/
|
||||||
|
if (getenv("DM_DISABLE_UDEV")) {
|
||||||
|
log_very_verbose("DM_DISABLE_UDEV environment variable set. "
|
||||||
|
"Overriding configuration to use "
|
||||||
|
"device_list_from_udev=0");
|
||||||
|
device_list_from_udev = 0;
|
||||||
|
} else
|
||||||
device_list_from_udev = udev_is_running() ?
|
device_list_from_udev = udev_is_running() ?
|
||||||
find_config_tree_bool(cmd, "devices/obtain_device_list_from_udev",
|
find_config_tree_bool(cmd, "devices/obtain_device_list_from_udev",
|
||||||
DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV) : 0;
|
DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV) : 0;
|
||||||
|
|
||||||
init_obtain_device_list_from_udev(device_list_from_udev);
|
init_obtain_device_list_from_udev(device_list_from_udev);
|
||||||
|
|
||||||
if (!(cn = find_config_tree_node(cmd, "devices/scan"))) {
|
if (!(cn = find_config_tree_node(cmd, "devices/scan"))) {
|
||||||
|
@ -75,6 +75,7 @@ static struct selabel_handle *_selabel_handle = NULL;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef UDEV_SYNC_SUPPORT
|
#ifdef UDEV_SYNC_SUPPORT
|
||||||
|
static int _udev_disabled = 0;
|
||||||
static int _semaphore_supported = -1;
|
static int _semaphore_supported = -1;
|
||||||
static int _udev_running = -1;
|
static int _udev_running = -1;
|
||||||
static int _sync_with_udev = 1;
|
static int _sync_with_udev = 1;
|
||||||
@ -85,6 +86,9 @@ void dm_lib_init(void)
|
|||||||
{
|
{
|
||||||
const char *env;
|
const char *env;
|
||||||
|
|
||||||
|
if ((env = getenv("DM_DISABLE_UDEV")))
|
||||||
|
_udev_disabled = 1;
|
||||||
|
|
||||||
env = getenv(DM_DEFAULT_NAME_MANGLING_MODE_ENV_VAR_NAME);
|
env = getenv(DM_DEFAULT_NAME_MANGLING_MODE_ENV_VAR_NAME);
|
||||||
if (env && *env) {
|
if (env && *env) {
|
||||||
if (!strcasecmp(env, "none"))
|
if (!strcasecmp(env, "none"))
|
||||||
@ -1814,6 +1818,26 @@ out:
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _set_cookie_flags(struct dm_task *dmt, uint16_t flags)
|
||||||
|
{
|
||||||
|
if (!dm_cookie_supported())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (_udev_disabled) {
|
||||||
|
/*
|
||||||
|
* If udev is disabled, hardcode this functionality:
|
||||||
|
* - we want libdm to create the nodes
|
||||||
|
* - we don't want the /dev/mapper and any subsystem
|
||||||
|
* related content to be created by udev if udev
|
||||||
|
* rules are installed
|
||||||
|
*/
|
||||||
|
flags &= ~DM_UDEV_DISABLE_LIBRARY_FALLBACK;
|
||||||
|
flags |= DM_UDEV_DISABLE_DM_RULES_FLAG | DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
dmt->event_nr = flags << DM_UDEV_FLAGS_SHIFT;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef UDEV_SYNC_SUPPORT
|
#ifndef UDEV_SYNC_SUPPORT
|
||||||
void dm_udev_set_sync_support(int sync_with_udev)
|
void dm_udev_set_sync_support(int sync_with_udev)
|
||||||
{
|
{
|
||||||
@ -1835,8 +1859,8 @@ int dm_udev_get_checking(void)
|
|||||||
|
|
||||||
int dm_task_set_cookie(struct dm_task *dmt, uint32_t *cookie, uint16_t flags)
|
int dm_task_set_cookie(struct dm_task *dmt, uint32_t *cookie, uint16_t flags)
|
||||||
{
|
{
|
||||||
if (dm_cookie_supported())
|
_set_cookie_flags(dmt, flags);
|
||||||
dmt->event_nr = flags << DM_UDEV_FLAGS_SHIFT;
|
|
||||||
*cookie = 0;
|
*cookie = 0;
|
||||||
dmt->cookie_set = 1;
|
dmt->cookie_set = 1;
|
||||||
|
|
||||||
@ -1920,6 +1944,9 @@ void dm_udev_set_sync_support(int sync_with_udev)
|
|||||||
|
|
||||||
int dm_udev_get_sync_support(void)
|
int dm_udev_get_sync_support(void)
|
||||||
{
|
{
|
||||||
|
if (_udev_disabled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
_check_udev_sync_requirements_once();
|
_check_udev_sync_requirements_once();
|
||||||
|
|
||||||
return _semaphore_supported && dm_cookie_supported() &&
|
return _semaphore_supported && dm_cookie_supported() &&
|
||||||
@ -2203,8 +2230,7 @@ int dm_task_set_cookie(struct dm_task *dmt, uint32_t *cookie, uint16_t flags)
|
|||||||
{
|
{
|
||||||
int semid;
|
int semid;
|
||||||
|
|
||||||
if (dm_cookie_supported())
|
_set_cookie_flags(dmt, flags);
|
||||||
dmt->event_nr = flags << DM_UDEV_FLAGS_SHIFT;
|
|
||||||
|
|
||||||
if (!dm_udev_get_sync_support()) {
|
if (!dm_udev_get_sync_support()) {
|
||||||
*cookie = 0;
|
*cookie = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user