device-mapper-multipath/0048-RHBZ-592494-fix-user-configs.patch
Benjamin Marzinski b0ec4a42c8 Modify 0012-RH-udev-sync-support.patch
Modify 0021-RHBZ-548874-add-find-multipaths.patch
Modify 0022-RHBZ-557845-RHEL5-style-partitions.patch
Add 0025-RHBZ-508827-update-multipathd-manpage.patch through
    0101-RHBZ-631009-disable-udev-disk-rules-on-reload.patch
  * sync with current state of RHEL6. Next release should include a updated
    source tarball with most of these fixes rolled in.
Add 0102-RHBZ-690828-systemd-unit-file.patch
  * Add Jóhann B. Guðmundsson's unit file for systemd.
  * Add sub-package sysvinit for SysV init script.
Resolves: bz #690828
2011-07-15 12:25:48 -05:00

115 lines
2.6 KiB
Diff

---
libmultipath/config.c | 50 +++++++++++++++++++++++---------------------------
1 file changed, 23 insertions(+), 27 deletions(-)
Index: multipath-tools/libmultipath/config.c
===================================================================
--- multipath-tools.orig/libmultipath/config.c
+++ multipath-tools/libmultipath/config.c
@@ -24,33 +24,30 @@
static int
hwe_strmatch (struct hwentry *hwe1, struct hwentry *hwe2)
{
- if (hwe1->vendor && hwe2->vendor && strcmp(hwe1->vendor, hwe2->vendor))
+ if (hwe1->vendor) {
+ if (!hwe2->vendor || strcmp(hwe1->vendor, hwe2->vendor))
+ return 1;
+ }
+ else if (hwe2->vendor)
return 1;
- if (hwe1->product && hwe2->product && strcmp(hwe1->product, hwe2->product))
+ if (hwe1->product) {
+ if (!hwe2->product || strcmp(hwe1->product, hwe2->product))
+ return 1;
+ }
+ else if (hwe2->product)
return 1;
- if (hwe1->revision && hwe2->revision && strcmp(hwe1->revision, hwe2->revision))
+ if (hwe1->revision) {
+ if (!hwe2->revision || strcmp(hwe1->revision, hwe2->revision))
+ return 1;
+ }
+ else if (hwe2->revision)
return 1;
return 0;
}
-static struct hwentry *
-find_hwe_strmatch (vector hwtable, struct hwentry *hwe)
-{
- int i;
- struct hwentry *tmp, *ret = NULL;
-
- vector_foreach_slot (hwtable, tmp, i) {
- if (hwe_strmatch(tmp, hwe))
- continue;
- ret = tmp;
- break;
- }
- return ret;
-}
-
struct hwentry *
find_hwe (vector hwtable, char * vendor, char * product, char * revision)
{
@@ -264,15 +261,13 @@ set_param_str(char * str)
}
#define merge_str(s) \
- if (hwe2->s) { \
- if (hwe1->s) \
- FREE(hwe1->s); \
+ if (!hwe1->s && hwe2->s) { \
if (!(hwe1->s = set_param_str(hwe2->s))) \
return 1; \
}
#define merge_num(s) \
- if (hwe2->s) \
+ if (!hwe1->s && hwe2->s) \
hwe1->s = hwe2->s
@@ -295,6 +290,10 @@ merge_hwe (struct hwentry * hwe1, struct
merge_num(rr_weight);
merge_num(no_path_retry);
merge_num(minio);
+ merge_num(pg_timeout);
+ merge_num(flush_on_last_del);
+ merge_num(fast_io_fail);
+ merge_num(dev_loss);
return 0;
}
@@ -304,9 +303,6 @@ store_hwe (vector hwtable, struct hwentr
{
struct hwentry * hwe;
- if (find_hwe_strmatch(hwtable, dhwe))
- return 0;
-
if (!(hwe = alloc_hwe()))
return 1;
@@ -463,8 +459,6 @@ load_config (char * file)
if (!conf->hwtable)
goto out;
}
- if (setup_default_hwtable(conf->hwtable))
- goto out;
/*
* read the config file
@@ -494,6 +488,8 @@ load_config (char * file)
goto out;
}
}
+ if (setup_default_hwtable(conf->hwtable))
+ goto out;
/*
* remove duplica in hwtable. config file takes precedence
* over build-in hwtable