diff options
author | Samuli Suominen <ssuominen@gentoo.org> | 2012-07-05 08:55:13 +0000 |
---|---|---|
committer | Samuli Suominen <ssuominen@gentoo.org> | 2012-07-05 08:55:13 +0000 |
commit | ba50bc151ccd37a0ca13a42bfab9ddd5665a5530 (patch) | |
tree | 7676cb710ec523376f18f661853dd4e0bdd116d2 /sys-fs/lvm2/files | |
parent | Change manifest to new hashes. (diff) | |
download | gentoo-2-ba50bc151ccd37a0ca13a42bfab9ddd5665a5530.tar.gz gentoo-2-ba50bc151ccd37a0ca13a42bfab9ddd5665a5530.tar.bz2 gentoo-2-ba50bc151ccd37a0ca13a42bfab9ddd5665a5530.zip |
Fix compability with sys-fs/udev >= 185 wrt #424810 by Marien Zwart
(Portage version: 2.2.0_alpha116/cvs/Linux x86_64)
Diffstat (limited to 'sys-fs/lvm2/files')
-rw-r--r-- | sys-fs/lvm2/files/lvm2-2.02.95-udev185.patch | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/sys-fs/lvm2/files/lvm2-2.02.95-udev185.patch b/sys-fs/lvm2/files/lvm2-2.02.95-udev185.patch new file mode 100644 index 000000000000..ba7e40deea64 --- /dev/null +++ b/sys-fs/lvm2/files/lvm2-2.02.95-udev185.patch @@ -0,0 +1,208 @@ +From 06738cac051b671ed26bd137676713eab457b37f Mon Sep 17 00:00:00 2001 +From: Peter Rajnoha <prajnoha@redhat.com> +Date: Tue, 29 May 2012 08:09:10 +0000 +Subject: [PATCH] Remove unsupported udev_get_dev_path libudev call used for checking udev dir. + +With latest changes in the udev, some deprecated functions were removed +from libudev amongst which there was the "udev_get_dev_path" function +we used to compare a device directory used in udev and directore set in +libdevmapper. The "/dev" is hardcoded in udev now (udev version >= 183). + +Amongst other changes and from packager's point of view, it's also +important to note that the libudev development library ("libudev-devel") +could now be a part of the systemd development library ("systemd-devel") +because of the udev + systemd merge. +--- + WHATS_NEW_DM | 1 + + lib/commands/toolcontext.c | 28 ++++++++++++++++------------ + lib/misc/lvm-wrappers.c | 14 -------------- + lib/misc/lvm-wrappers.h | 1 - + libdm/libdevmapper.h | 3 +++ + tools/dmsetup.c | 30 ++++++++++++------------------ + 6 files changed, 32 insertions(+), 45 deletions(-) + +diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c +index 78f0801..cc23163 100644 +--- a/lib/commands/toolcontext.c ++++ b/lib/commands/toolcontext.c +@@ -650,9 +650,9 @@ static int _init_dev_cache(struct cmd_context *cmd) + { + const struct dm_config_node *cn; + const struct dm_config_value *cv; +- size_t uninitialized_var(udev_dir_len), len; ++ size_t len, udev_dir_len = strlen(DM_UDEV_DEV_DIR); ++ int len_diff; + int device_list_from_udev; +- const char *uninitialized_var(udev_dir); + + init_dev_disable_after_error_count( + find_config_tree_int(cmd, "devices/disable_after_error_count", +@@ -661,13 +661,9 @@ static int _init_dev_cache(struct cmd_context *cmd) + if (!dev_cache_init(cmd)) + return_0; + +- if ((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", +- DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV) : 0)) { +- if (!(udev_dir = udev_get_dev_dir())) +- stack; +- udev_dir_len = (udev_dir) ? strlen(udev_dir) : 0; +- } ++ DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV) : 0; + init_obtain_device_list_from_udev(device_list_from_udev); + + if (!(cn = find_config_tree_node(cmd, "devices/scan"))) { +@@ -688,11 +684,19 @@ static int _init_dev_cache(struct cmd_context *cmd) + return 0; + } + +- if (device_list_from_udev && udev_dir) { ++ if (device_list_from_udev) { + len = strlen(cv->v.str); +- len = udev_dir_len > len ? len : udev_dir_len; +- if (strncmp(udev_dir, cv->v.str, len) || +- udev_dir[len] != cv->v.str[len]) { ++ ++ /* ++ * DM_UDEV_DEV_DIR always has '/' at its end. ++ * If the item in the conf does not have it, be sure ++ * to make the right comparison without the '/' char! ++ */ ++ len_diff = len && cv->v.str[len - 1] != '/' ? ++ udev_dir_len - 1 != len : ++ udev_dir_len != len; ++ ++ if (len_diff || strncmp(DM_UDEV_DEV_DIR, cv->v.str, len)) { + device_list_from_udev = 0; + init_obtain_device_list_from_udev(0); + } +diff --git a/lib/misc/lvm-wrappers.c b/lib/misc/lvm-wrappers.c +index 84f61a6..6cffae3 100644 +--- a/lib/misc/lvm-wrappers.c ++++ b/lib/misc/lvm-wrappers.c +@@ -65,16 +65,6 @@ bad: + return 0; + } + +-const char *udev_get_dev_dir(void) +-{ +- if (!_udev) { +- log_debug(_no_context_msg); +- return NULL; +- } +- +- return udev_get_dev_path(_udev); +-} +- + struct udev* udev_get_library_context(void) + { + return _udev; +@@ -96,10 +86,6 @@ int udev_is_running(void) + return 0; + } + +-const char *udev_get_dev_dir(void) +-{ +- return NULL; +-} + #endif + + int lvm_getpagesize(void) +diff --git a/lib/misc/lvm-wrappers.h b/lib/misc/lvm-wrappers.h +index f5b381c..e43f831 100644 +--- a/lib/misc/lvm-wrappers.h ++++ b/lib/misc/lvm-wrappers.h +@@ -24,7 +24,6 @@ struct udev *udev_get_library_context(void); + int udev_init_library_context(void); + void udev_fin_library_context(void); + int udev_is_running(void); +-const char *udev_get_dev_dir(void); + + int lvm_getpagesize(void); + +diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h +index 7df4db8..1f780a3 100644 +--- a/libdm/libdevmapper.h ++++ b/libdm/libdevmapper.h +@@ -1500,6 +1500,9 @@ struct dm_config_node *dm_config_clone_node(struct dm_config_tree *cft, const st + + struct dm_pool *dm_config_memory(struct dm_config_tree *cft); + ++/* Udev device directory. */ ++#define DM_UDEV_DEV_DIR "/dev/" ++ + /* Cookie prefixes. + * + * The cookie value consists of a prefix (16 bits) and a base (16 bits). +diff --git a/tools/dmsetup.c b/tools/dmsetup.c +index 6934de8..2787b76 100644 +--- a/tools/dmsetup.c ++++ b/tools/dmsetup.c +@@ -1008,11 +1008,9 @@ static int _udevcookies(CMD_ARGS) + #else /* UDEV_SYNC_SUPPORT */ + static int _set_up_udev_support(const char *dev_dir) + { +- struct udev *udev; +- const char *udev_dev_dir; +- size_t udev_dev_dir_len; + int dirs_diff; + const char *env; ++ size_t len = strlen(dev_dir), udev_dir_len = strlen(DM_UDEV_DEV_DIR); + + if (_switches[NOUDEVSYNC_ARG]) + dm_udev_set_sync_support(0); +@@ -1030,14 +1028,6 @@ static int _set_up_udev_support(const char *dev_dir) + " defined by --udevcookie option.", + _udev_cookie); + +- if (!(udev = udev_new()) || +- !(udev_dev_dir = udev_get_dev_path(udev)) || +- !*udev_dev_dir) { +- log_error("Could not get udev dev path."); +- return 0; +- } +- udev_dev_dir_len = strlen(udev_dev_dir); +- + /* + * Normally, there's always a fallback action by libdevmapper if udev + * has not done its job correctly, e.g. the nodes were not created. +@@ -1049,12 +1039,17 @@ static int _set_up_udev_support(const char *dev_dir) + * is the same as "dev path" used by libdevmapper. + */ + +- /* There's always a slash at the end of dev_dir. But check udev_dev_dir! */ +- if (udev_dev_dir[udev_dev_dir_len - 1] != '/') +- dirs_diff = strncmp(dev_dir, udev_dev_dir, udev_dev_dir_len); +- else +- dirs_diff = strcmp(dev_dir, udev_dev_dir); + ++ /* ++ * DM_UDEV_DEV_DIR always has '/' at its end. ++ * If the dev_dir does not have it, be sure ++ * to make the right comparison without the '/' char! ++ */ ++ if (dev_dir[len - 1] != '/') ++ udev_dir_len--; ++ ++ dirs_diff = udev_dir_len != len || ++ strncmp(DM_UDEV_DEV_DIR, dev_dir, len); + _udev_only = !dirs_diff && (_udev_cookie || !_switches[VERIFYUDEV_ARG]); + + if (dirs_diff) { +@@ -1064,11 +1059,10 @@ static int _set_up_udev_support(const char *dev_dir) + "about udev not working correctly while processing " + "particular nodes will be suppressed. These nodes " + "and symlinks will be managed in each directory " +- "separately.", dev_dir, udev_dev_dir); ++ "separately.", dev_dir, DM_UDEV_DEV_DIR); + dm_udev_set_checking(0); + } + +- udev_unref(udev); + return 1; + } + +-- +1.7.2.1 + |