1 |
ssuominen 12/07/05 08:55:13 |
2 |
|
3 |
Added: lvm2-2.02.95-udev185.patch |
4 |
Log: |
5 |
Fix compability with sys-fs/udev >= 185 wrt #424810 by Marien Zwart |
6 |
|
7 |
(Portage version: 2.2.0_alpha116/cvs/Linux x86_64) |
8 |
|
9 |
Revision Changes Path |
10 |
1.1 sys-fs/lvm2/files/lvm2-2.02.95-udev185.patch |
11 |
|
12 |
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-fs/lvm2/files/lvm2-2.02.95-udev185.patch?rev=1.1&view=markup |
13 |
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-fs/lvm2/files/lvm2-2.02.95-udev185.patch?rev=1.1&content-type=text/plain |
14 |
|
15 |
Index: lvm2-2.02.95-udev185.patch |
16 |
=================================================================== |
17 |
From 06738cac051b671ed26bd137676713eab457b37f Mon Sep 17 00:00:00 2001 |
18 |
From: Peter Rajnoha <prajnoha@××××××.com> |
19 |
Date: Tue, 29 May 2012 08:09:10 +0000 |
20 |
Subject: [PATCH] Remove unsupported udev_get_dev_path libudev call used for checking udev dir. |
21 |
|
22 |
With latest changes in the udev, some deprecated functions were removed |
23 |
from libudev amongst which there was the "udev_get_dev_path" function |
24 |
we used to compare a device directory used in udev and directore set in |
25 |
libdevmapper. The "/dev" is hardcoded in udev now (udev version >= 183). |
26 |
|
27 |
Amongst other changes and from packager's point of view, it's also |
28 |
important to note that the libudev development library ("libudev-devel") |
29 |
could now be a part of the systemd development library ("systemd-devel") |
30 |
because of the udev + systemd merge. |
31 |
--- |
32 |
WHATS_NEW_DM | 1 + |
33 |
lib/commands/toolcontext.c | 28 ++++++++++++++++------------ |
34 |
lib/misc/lvm-wrappers.c | 14 -------------- |
35 |
lib/misc/lvm-wrappers.h | 1 - |
36 |
libdm/libdevmapper.h | 3 +++ |
37 |
tools/dmsetup.c | 30 ++++++++++++------------------ |
38 |
6 files changed, 32 insertions(+), 45 deletions(-) |
39 |
|
40 |
diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c |
41 |
index 78f0801..cc23163 100644 |
42 |
--- a/lib/commands/toolcontext.c |
43 |
+++ b/lib/commands/toolcontext.c |
44 |
@@ -650,9 +650,9 @@ static int _init_dev_cache(struct cmd_context *cmd) |
45 |
{ |
46 |
const struct dm_config_node *cn; |
47 |
const struct dm_config_value *cv; |
48 |
- size_t uninitialized_var(udev_dir_len), len; |
49 |
+ size_t len, udev_dir_len = strlen(DM_UDEV_DEV_DIR); |
50 |
+ int len_diff; |
51 |
int device_list_from_udev; |
52 |
- const char *uninitialized_var(udev_dir); |
53 |
|
54 |
init_dev_disable_after_error_count( |
55 |
find_config_tree_int(cmd, "devices/disable_after_error_count", |
56 |
@@ -661,13 +661,9 @@ static int _init_dev_cache(struct cmd_context *cmd) |
57 |
if (!dev_cache_init(cmd)) |
58 |
return_0; |
59 |
|
60 |
- if ((device_list_from_udev = udev_is_running() ? |
61 |
+ device_list_from_udev = udev_is_running() ? |
62 |
find_config_tree_bool(cmd, "devices/obtain_device_list_from_udev", |
63 |
- DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV) : 0)) { |
64 |
- if (!(udev_dir = udev_get_dev_dir())) |
65 |
- stack; |
66 |
- udev_dir_len = (udev_dir) ? strlen(udev_dir) : 0; |
67 |
- } |
68 |
+ DEFAULT_OBTAIN_DEVICE_LIST_FROM_UDEV) : 0; |
69 |
init_obtain_device_list_from_udev(device_list_from_udev); |
70 |
|
71 |
if (!(cn = find_config_tree_node(cmd, "devices/scan"))) { |
72 |
@@ -688,11 +684,19 @@ static int _init_dev_cache(struct cmd_context *cmd) |
73 |
return 0; |
74 |
} |
75 |
|
76 |
- if (device_list_from_udev && udev_dir) { |
77 |
+ if (device_list_from_udev) { |
78 |
len = strlen(cv->v.str); |
79 |
- len = udev_dir_len > len ? len : udev_dir_len; |
80 |
- if (strncmp(udev_dir, cv->v.str, len) || |
81 |
- udev_dir[len] != cv->v.str[len]) { |
82 |
+ |
83 |
+ /* |
84 |
+ * DM_UDEV_DEV_DIR always has '/' at its end. |
85 |
+ * If the item in the conf does not have it, be sure |
86 |
+ * to make the right comparison without the '/' char! |
87 |
+ */ |
88 |
+ len_diff = len && cv->v.str[len - 1] != '/' ? |
89 |
+ udev_dir_len - 1 != len : |
90 |
+ udev_dir_len != len; |
91 |
+ |
92 |
+ if (len_diff || strncmp(DM_UDEV_DEV_DIR, cv->v.str, len)) { |
93 |
device_list_from_udev = 0; |
94 |
init_obtain_device_list_from_udev(0); |
95 |
} |
96 |
diff --git a/lib/misc/lvm-wrappers.c b/lib/misc/lvm-wrappers.c |
97 |
index 84f61a6..6cffae3 100644 |
98 |
--- a/lib/misc/lvm-wrappers.c |
99 |
+++ b/lib/misc/lvm-wrappers.c |
100 |
@@ -65,16 +65,6 @@ bad: |
101 |
return 0; |
102 |
} |
103 |
|
104 |
-const char *udev_get_dev_dir(void) |
105 |
-{ |
106 |
- if (!_udev) { |
107 |
- log_debug(_no_context_msg); |
108 |
- return NULL; |
109 |
- } |
110 |
- |
111 |
- return udev_get_dev_path(_udev); |
112 |
-} |
113 |
- |
114 |
struct udev* udev_get_library_context(void) |
115 |
{ |
116 |
return _udev; |
117 |
@@ -96,10 +86,6 @@ int udev_is_running(void) |
118 |
return 0; |
119 |
} |
120 |
|
121 |
-const char *udev_get_dev_dir(void) |
122 |
-{ |
123 |
- return NULL; |
124 |
-} |
125 |
#endif |
126 |
|
127 |
int lvm_getpagesize(void) |
128 |
diff --git a/lib/misc/lvm-wrappers.h b/lib/misc/lvm-wrappers.h |
129 |
index f5b381c..e43f831 100644 |
130 |
--- a/lib/misc/lvm-wrappers.h |
131 |
+++ b/lib/misc/lvm-wrappers.h |
132 |
@@ -24,7 +24,6 @@ struct udev *udev_get_library_context(void); |
133 |
int udev_init_library_context(void); |
134 |
void udev_fin_library_context(void); |
135 |
int udev_is_running(void); |
136 |
-const char *udev_get_dev_dir(void); |
137 |
|
138 |
int lvm_getpagesize(void); |
139 |
|
140 |
diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h |
141 |
index 7df4db8..1f780a3 100644 |
142 |
--- a/libdm/libdevmapper.h |
143 |
+++ b/libdm/libdevmapper.h |
144 |
@@ -1500,6 +1500,9 @@ struct dm_config_node *dm_config_clone_node(struct dm_config_tree *cft, const st |
145 |
|
146 |
struct dm_pool *dm_config_memory(struct dm_config_tree *cft); |
147 |
|
148 |
+/* Udev device directory. */ |
149 |
+#define DM_UDEV_DEV_DIR "/dev/" |
150 |
+ |
151 |
/* Cookie prefixes. |
152 |
* |
153 |
* The cookie value consists of a prefix (16 bits) and a base (16 bits). |
154 |
diff --git a/tools/dmsetup.c b/tools/dmsetup.c |
155 |
index 6934de8..2787b76 100644 |
156 |
--- a/tools/dmsetup.c |
157 |
+++ b/tools/dmsetup.c |
158 |
@@ -1008,11 +1008,9 @@ static int _udevcookies(CMD_ARGS) |
159 |
#else /* UDEV_SYNC_SUPPORT */ |
160 |
static int _set_up_udev_support(const char *dev_dir) |
161 |
{ |
162 |
- struct udev *udev; |
163 |
- const char *udev_dev_dir; |
164 |
- size_t udev_dev_dir_len; |
165 |
int dirs_diff; |
166 |
const char *env; |
167 |
+ size_t len = strlen(dev_dir), udev_dir_len = strlen(DM_UDEV_DEV_DIR); |
168 |
|
169 |
if (_switches[NOUDEVSYNC_ARG]) |
170 |
dm_udev_set_sync_support(0); |
171 |
@@ -1030,14 +1028,6 @@ static int _set_up_udev_support(const char *dev_dir) |
172 |
" defined by --udevcookie option.", |
173 |
_udev_cookie); |
174 |
|
175 |
- if (!(udev = udev_new()) || |
176 |
- !(udev_dev_dir = udev_get_dev_path(udev)) || |
177 |
- !*udev_dev_dir) { |
178 |
- log_error("Could not get udev dev path."); |
179 |
- return 0; |
180 |
- } |
181 |
- udev_dev_dir_len = strlen(udev_dev_dir); |
182 |
- |
183 |
/* |
184 |
* Normally, there's always a fallback action by libdevmapper if udev |
185 |
* has not done its job correctly, e.g. the nodes were not created. |
186 |
@@ -1049,12 +1039,17 @@ static int _set_up_udev_support(const char *dev_dir) |
187 |
* is the same as "dev path" used by libdevmapper. |
188 |
*/ |
189 |
|
190 |
- /* There's always a slash at the end of dev_dir. But check udev_dev_dir! */ |
191 |
- if (udev_dev_dir[udev_dev_dir_len - 1] != '/') |
192 |
- dirs_diff = strncmp(dev_dir, udev_dev_dir, udev_dev_dir_len); |
193 |
- else |
194 |
- dirs_diff = strcmp(dev_dir, udev_dev_dir); |
195 |
|
196 |
+ /* |
197 |
+ * DM_UDEV_DEV_DIR always has '/' at its end. |
198 |
+ * If the dev_dir does not have it, be sure |
199 |
+ * to make the right comparison without the '/' char! |
200 |
+ */ |
201 |
+ if (dev_dir[len - 1] != '/') |
202 |
+ udev_dir_len--; |
203 |
+ |
204 |
+ dirs_diff = udev_dir_len != len || |
205 |
+ strncmp(DM_UDEV_DEV_DIR, dev_dir, len); |
206 |
_udev_only = !dirs_diff && (_udev_cookie || !_switches[VERIFYUDEV_ARG]); |
207 |
|
208 |
if (dirs_diff) { |
209 |
@@ -1064,11 +1059,10 @@ static int _set_up_udev_support(const char *dev_dir) |
210 |
"about udev not working correctly while processing " |
211 |
"particular nodes will be suppressed. These nodes " |
212 |
"and symlinks will be managed in each directory " |
213 |
- "separately.", dev_dir, udev_dev_dir); |
214 |
+ "separately.", dev_dir, DM_UDEV_DEV_DIR); |
215 |
dm_udev_set_checking(0); |
216 |
} |
217 |
|
218 |
- udev_unref(udev); |
219 |
return 1; |
220 |
} |
221 |
|
222 |
-- |
223 |
1.7.2.1 |