using a blacklist and a blacklist_exception section results in multipathd filtering out paths it shouldn't
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
multipath-tools (Ubuntu) |
Fix Released
|
High
|
Unassigned | ||
Lucid |
Won't Fix
|
High
|
Craig Magina | ||
Maverick |
Invalid
|
High
|
Craig Magina | ||
Natty |
Won't Fix
|
High
|
Craig Magina |
Bug Description
Binary package hint: multipath-tools
The issue is due to a bug in some if/then logic in blacklist.
SRU Justification:
1. Impact: a config which (correctly) finds an entry both in blacklist and blacklist exceptions will not honor the exception
2. How bug was addressed: an upstream fix was pulled in. The root cause was that return values from functions checking existence in blacklists were being misinterpreted.
3. Minimal patch: see debdiff in comment #6.
4. TEST CASE: Create a multipath config with /dev/sda in both blacklist and blacklist exception. /dev/sda won't be used.
5. Regression potential: this commit has been upstream since 2007, so should cause no regressions.
tags: | added: patch |
Changed in multipath-tools (Ubuntu): | |
status: | New → Confirmed |
importance: | Undecided → High |
Changed in multipath-tools (Ubuntu Lucid): | |
status: | New → Confirmed |
Changed in multipath-tools (Ubuntu Maverick): | |
status: | New → Confirmed |
Changed in multipath-tools (Ubuntu Natty): | |
status: | New → Confirmed |
importance: | Undecided → High |
Changed in multipath-tools (Ubuntu Maverick): | |
importance: | Undecided → High |
Changed in multipath-tools (Ubuntu Lucid): | |
importance: | Undecided → High |
Changed in multipath-tools (Ubuntu Lucid): | |
assignee: | nobody → Craig Magina (craig.magina) |
Changed in multipath-tools (Ubuntu Lucid): | |
status: | Triaged → In Progress |
tags: | added: verification-needed |
tags: | added: testcase |
Hi Craig,
actually, I as about to upload this, but when checking the git commit, it also fixes up main.c:
diff --git a/multipathd/main.c b/multipathd/main.c
condlog( 0, "%s: failed to get path uid", devname);
return 1; /* leave path added to pathvec */ vecs->pathvec, (void *)pp);
vector_ del_slot( vecs->pathvec, i);
path_discovery (vecs-> pathvec, conf, DI_ALL);
index f887ad0..e65834a 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -368,7 +368,7 @@ ev_add_path (char * devname, struct vectors * vecs)
}
- if (filter_path(conf, pp)){
+ if (filter_path(conf, pp) > 0){
int i = find_slot(
if (i != -1)
@@ -1062,7 +1062,7 @@ configure (struct vectors * vecs, int start_waiters)
- if (filter_path(conf, pp)){
+ if (filter_path(conf, pp) > 0){
Is there a reason why you dropped that from the patch, or should it be added to this fix?