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

Add support to disable udev checking: DM_UDEV_DISABLE_CHECKING=1 env. variable.

Sometimes it is really needed to switch off udev checking and the warnings we show when
we detect that udev has not done its job right - the messages like "Udev should have done
this and that. Falling back to direct node creation/removal. " etc.

This would be especially handy while setting DM_DEV_DIR env var that could be set to a
different location than standard /dev (udev can't create nodes/symlinks out of that one
directory that is configured into udevd). The exact same situation happens while we're
running our tests.
This commit is contained in:
Peter Rajnoha 2010-01-11 15:36:24 +00:00
parent b422bb2187
commit d2b43c4b34
5 changed files with 42 additions and 4 deletions

View File

@ -1,5 +1,6 @@
Version 1.02.41 - Version 1.02.41 -
==================================== ====================================
Add support to disable udev checking: DM_UDEV_DISABLE_CHECKING=1 env. variable.
Add dm_tree_add_dev_with_udev_flags to provide wider support for udev flags. Add dm_tree_add_dev_with_udev_flags to provide wider support for udev flags.
Add --noudevrules option for dmsetup to disable /dev node management by udev. Add --noudevrules option for dmsetup to disable /dev node management by udev.
Update code to show all fields for 'dmsetup info -c -o all'. Update code to show all fields for 'dmsetup info -c -o all'.

View File

@ -163,5 +163,7 @@ dm_list_size
dm_cookie_supported dm_cookie_supported
dm_udev_set_sync_support dm_udev_set_sync_support
dm_udev_get_sync_support dm_udev_get_sync_support
dm_udev_set_checking
dm_udev_get_checking
dm_udev_complete dm_udev_complete
dm_udev_wait dm_udev_wait

View File

@ -1086,6 +1086,8 @@ int dm_cookie_supported(void);
*/ */
void dm_udev_set_sync_support(int sync_with_udev); void dm_udev_set_sync_support(int sync_with_udev);
int dm_udev_get_sync_support(void); int dm_udev_get_sync_support(void);
void dm_udev_set_checking(int checking);
int dm_udev_get_checking(void);
int dm_udev_complete(uint32_t cookie); int dm_udev_complete(uint32_t cookie);
int dm_udev_wait(uint32_t cookie); int dm_udev_wait(uint32_t cookie);

View File

@ -52,6 +52,7 @@ static int _verbose = 0;
#ifdef UDEV_SYNC_SUPPORT #ifdef UDEV_SYNC_SUPPORT
static int _udev_running = -1; static int _udev_running = -1;
static int _sync_with_udev = 1; static int _sync_with_udev = 1;
static int _udev_checking = 1;
#endif #endif
/* /*
@ -428,7 +429,8 @@ static int _add_dev_node(const char *dev_name, uint32_t major, uint32_t minor,
dev_name); dev_name);
return 0; return 0;
} }
} else if (dm_udev_get_sync_support() && check_udev) } else if (dm_udev_get_sync_support() && dm_udev_get_checking() &&
check_udev)
log_warn("%s not set up by udev: Falling back to direct " log_warn("%s not set up by udev: Falling back to direct "
"node creation.", path); "node creation.", path);
@ -462,7 +464,8 @@ static int _rm_dev_node(const char *dev_name, int check_udev)
if (stat(path, &info) < 0) if (stat(path, &info) < 0)
return 1; return 1;
else if (dm_udev_get_sync_support() && check_udev) else if (dm_udev_get_sync_support() && dm_udev_get_checking() &&
check_udev)
log_warn("Node %s was not removed by udev. " log_warn("Node %s was not removed by udev. "
"Falling back to direct node removal.", path); "Falling back to direct node removal.", path);
@ -492,7 +495,8 @@ static int _rename_dev_node(const char *old_name, const char *new_name,
"is already present", newpath); "is already present", newpath);
return 0; return 0;
} }
else if (dm_udev_get_sync_support() && check_udev) { else if (dm_udev_get_sync_support() && dm_udev_get_checking() &&
check_udev) {
if (stat(oldpath, &info) < 0 && if (stat(oldpath, &info) < 0 &&
errno == ENOENT) errno == ENOENT)
/* assume udev already deleted this */ /* assume udev already deleted this */
@ -516,7 +520,8 @@ static int _rename_dev_node(const char *old_name, const char *new_name,
return 0; return 0;
} }
} }
else if (dm_udev_get_sync_support() && check_udev) else if (dm_udev_get_sync_support() && dm_udev_get_checking() &&
check_udev)
log_warn("The node %s should have been renamed to %s " log_warn("The node %s should have been renamed to %s "
"by udev but new node is not present. " "by udev but new node is not present. "
"Falling back to direct node rename.", "Falling back to direct node rename.",
@ -884,6 +889,15 @@ int dm_udev_get_sync_support(void)
return 0; return 0;
} }
void dm_udev_set_checking(int checking)
{
}
int dm_udev_get_checking(void)
{
return 0;
}
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()) if (dm_cookie_supported())
@ -963,6 +977,19 @@ int dm_udev_get_sync_support(void)
return dm_cookie_supported() && _udev_running && _sync_with_udev; return dm_cookie_supported() && _udev_running && _sync_with_udev;
} }
void dm_udev_set_checking(int checking)
{
if ((_udev_checking = checking))
log_debug("DM udev checking enabled");
else
log_debug("DM udev checking disabled");
}
int dm_udev_get_checking(void)
{
return _udev_checking;
}
static int _get_cookie_sem(uint32_t cookie, int *semid) static int _get_cookie_sem(uint32_t cookie, int *semid)
{ {
if (cookie >> 16 != DM_COOKIE_MAGIC) { if (cookie >> 16 != DM_COOKIE_MAGIC) {

View File

@ -3158,6 +3158,7 @@ int main(int argc, char **argv)
struct command *c; struct command *c;
int r = 1; int r = 1;
const char *dev_dir; const char *dev_dir;
const char *disable_udev_checking;
(void) setlocale(LC_ALL, ""); (void) setlocale(LC_ALL, "");
@ -3207,6 +3208,11 @@ int main(int argc, char **argv)
if (_switches[NOUDEVSYNC_ARG]) if (_switches[NOUDEVSYNC_ARG])
dm_udev_set_sync_support(0); dm_udev_set_sync_support(0);
disable_udev_checking = getenv("DM_UDEV_DISABLE_CHECKING");
if ((disable_udev_checking && *disable_udev_checking) &&
!strcmp(disable_udev_checking, "1"))
dm_udev_set_checking(0);
doit: doit:
if (!c->fn(argc, argv, NULL)) { if (!c->fn(argc, argv, NULL)) {
fprintf(stderr, "Command failed\n"); fprintf(stderr, "Command failed\n");