[device-mapper-multipath/f20] device-mapper-multipath-0.4.9-56.fc20.1

Benjamin Marzinski bmarzins at fedoraproject.org
Tue Mar 10 21:47:43 UTC 2015


commit 35491c6fe38a9745ed5cc6b767d890dd798f5f89
Author: Benjamin Marzinski <bmarzins at redhat.com>
Date:   Tue Mar 10 16:42:19 2015 -0500

    device-mapper-multipath-0.4.9-56.fc20.1
    
    Add 0074-RHBZ-1080055-orphan-paths-on-reload.patch
      * orphan paths dropped from multipath device if 'multipath -r' is run
        while there are failed paths

 0074-RHBZ-1080055-orphan-paths-on-reload.patch | 85 ++++++++++++++++++++++++++
 device-mapper-multipath.spec                   |  9 ++-
 2 files changed, 93 insertions(+), 1 deletion(-)
---
diff --git a/0074-RHBZ-1080055-orphan-paths-on-reload.patch b/0074-RHBZ-1080055-orphan-paths-on-reload.patch
new file mode 100644
index 0000000..279de1e
--- /dev/null
+++ b/0074-RHBZ-1080055-orphan-paths-on-reload.patch
@@ -0,0 +1,85 @@
+---
+ libmultipath/structs_vec.c |   31 +++++++++++++++++++++++++++----
+ multipathd/main.c          |    4 ++++
+ 2 files changed, 31 insertions(+), 4 deletions(-)
+
+Index: multipath-bz1097694/libmultipath/structs_vec.c
+===================================================================
+--- multipath-bz1097694.orig/libmultipath/structs_vec.c
++++ multipath-bz1097694/libmultipath/structs_vec.c
+@@ -280,12 +280,38 @@ update_multipath_status (struct multipat
+ 	return 0;
+ }
+ 
++void sync_paths(struct multipath *mpp, vector pathvec)
++{
++	struct path *pp;
++	struct pathgroup  *pgp;
++	int found, i, j;
++
++	vector_foreach_slot (mpp->paths, pp, i) {
++		found = 0;
++		vector_foreach_slot(mpp->pg, pgp, j) {
++			if (find_slot(pgp->paths, (void *)pp) != -1) {
++				found = 1;
++				break;
++			}
++		}
++		if (!found) {
++			condlog(3, "%s dropped path %s", mpp->alias, pp->dev);
++			vector_del_slot(mpp->paths, i--);
++			orphan_path(pp);
++		}
++	}
++	update_mpp_paths(mpp, pathvec);
++	vector_foreach_slot (mpp->paths, pp, i)
++		pp->mpp = mpp;
++}
++
+ extern int
+ update_multipath_strings (struct multipath *mpp, vector pathvec)
+ {
+ 	if (!mpp)
+ 		return 1;
+ 
++	update_mpp_paths(mpp, pathvec);
+ 	condlog(4, "%s: %s", mpp->alias, __FUNCTION__);
+ 
+ 	free_multipath_attributes(mpp);
+@@ -294,6 +320,7 @@ update_multipath_strings (struct multipa
+ 
+ 	if (update_multipath_table(mpp, pathvec))
+ 		return 1;
++	sync_paths(mpp, pathvec);
+ 
+ 	if (update_multipath_status(mpp))
+ 		return 1;
+@@ -494,13 +521,9 @@ int update_multipath (struct vectors *ve
+ 		return 2;
+ 	}
+ 
+-	free_pgvec(mpp->pg, KEEP_PATHS);
+-	mpp->pg = NULL;
+-
+ 	if (__setup_multipath(vecs, mpp, reset))
+ 		return 1; /* mpp freed in setup_multipath */
+ 
+-	adopt_paths(vecs->pathvec, mpp, 0);
+ 	/*
+ 	 * compare checkers states with DM states
+ 	 */
+Index: multipath-bz1097694/multipathd/main.c
+===================================================================
+--- multipath-bz1097694.orig/multipathd/main.c
++++ multipath-bz1097694/multipathd/main.c
+@@ -1151,6 +1151,10 @@ check_path (struct vectors * vecs, struc
+ 			pp->dev);
+ 		pp->dmstate = PSTATE_UNDEF;
+ 	}
++	/* if update_multipath_strings orphaned the path, quit early */
++	if (!pp->mpp)
++		return;
++
+ 	pp->chkrstate = newstate;
+ 	if (newstate != pp->state) {
+ 		int oldstate = pp->state;
diff --git a/device-mapper-multipath.spec b/device-mapper-multipath.spec
index bb175bf..439ad63 100644
--- a/device-mapper-multipath.spec
+++ b/device-mapper-multipath.spec
@@ -1,7 +1,7 @@
 Summary: Tools to manage multipath devices using device-mapper
 Name: device-mapper-multipath
 Version: 0.4.9
-Release: 56%{?dist}
+Release: 56%{?dist}.1
 License: GPL+
 Group: System Environment/Base
 URL: http://christophe.varoqui.free.fr/
@@ -78,6 +78,7 @@ Patch0070: 0070-RHBZ-1036503-blacklist-td-devs.patch
 Patch0071: 0071-RHBZ-1031546-strip-dev.patch
 Patch0072: 0072-RHBZ-1039199-check-loop-control.patch
 Patch0073: 0073-RH-update-build-flags.patch
+Patch0074: 0074-RHBZ-1080055-orphan-paths-on-reload.patch
 
 # runtime
 Requires: %{name}-libs = %{version}-%{release}
@@ -200,6 +201,7 @@ kpartx manages partition creation and removal for device-mapper devices.
 %patch0071 -p1
 %patch0072 -p1
 %patch0073 -p1
+%patch0074 -p1
 cp %{SOURCE1} .
 
 %build
@@ -293,6 +295,11 @@ bin/systemctl --no-reload enable multipathd.service >/dev/null 2>&1 ||:
 %{_mandir}/man8/kpartx.8.gz
 
 %changelog
+* Tue Mar 10 2015 Benjamin Marzinski <bmarzins at redhat.com> 0.4.9-56.fc20.1
+- Add 0074-RHBZ-1080055-orphan-paths-on-reload.patch
+  * orphan paths dropped from multipath device if 'multipath -r' is run
+    while there are failed paths
+
 * Mon Jan 13 2014 Benjamin Marzinski <bmarzins at redhat.com> 0.4.9-56
 - Add 0061-RH-display-find-mpaths.patch
   * display the find_multipaths value in show config


More information about the scm-commits mailing list