Blame SOURCES/0171-UPBZ-1356651-allow-zero-size.patch

f20720
---
f20720
 libmultipath/discovery.c   |    5 +++++
f20720
 libmultipath/structs_vec.c |    2 +-
f20720
 multipathd/main.c          |   26 +++++---------------------
f20720
 3 files changed, 11 insertions(+), 22 deletions(-)
f20720
f20720
Index: multipath-tools-130222/libmultipath/discovery.c
f20720
===================================================================
f20720
--- multipath-tools-130222.orig/libmultipath/discovery.c
f20720
+++ multipath-tools-130222/libmultipath/discovery.c
f20720
@@ -1188,6 +1188,11 @@ pathinfo (struct path *pp, vector hwtabl
f20720
 			if (pp->state == PATH_UNCHECKED ||
f20720
 			    pp->state == PATH_WILD)
f20720
 				goto blank;
f20720
+			if (pp->state == PATH_UP && !pp->size) {
f20720
+				condlog(3, "%s: device size is 0, "
f20720
+					"path unuseable", pp->dev);
f20720
+				pp->state = PATH_GHOST;
f20720
+			}
f20720
 		} else {
f20720
 			condlog(3, "%s: path inaccessible", pp->dev);
f20720
 			pp->chkrstate = pp->state = path_state;
f20720
Index: multipath-tools-130222/libmultipath/structs_vec.c
f20720
===================================================================
f20720
--- multipath-tools-130222.orig/libmultipath/structs_vec.c
f20720
+++ multipath-tools-130222/libmultipath/structs_vec.c
f20720
@@ -551,7 +551,7 @@ int update_multipath (struct vectors *ve
f20720
 
f20720
 			if (pp->state != PATH_DOWN) {
f20720
 				int oldstate = pp->state;
f20720
-				condlog(2, "%s: mark as failed", pp->dev_t);
f20720
+				condlog(2, "%s: mark as failed", pp->dev);
f20720
 				mpp->stat_path_failures++;
f20720
 				pp->state = PATH_DOWN;
f20720
 				if (oldstate == PATH_UP ||
f20720
Index: multipath-tools-130222/multipathd/main.c
f20720
===================================================================
f20720
--- multipath-tools-130222.orig/multipathd/main.c
f20720
+++ multipath-tools-130222/multipathd/main.c
f20720
@@ -538,15 +538,10 @@ ev_add_path (struct path * pp, struct ve
f20720
 	pp->mpp = mpp;
f20720
 rescan:
f20720
 	if (mpp) {
f20720
-		if ((!pp->size) || (mpp->size != pp->size)) {
f20720
-			if (!pp->size)
f20720
-				condlog(0, "%s: failed to add new path %s, "
f20720
-					"device size is 0",
f20720
-					mpp->alias, pp->dev);
f20720
-			else
f20720
-				condlog(0, "%s: failed to add new path %s, "
f20720
-					"device size mismatch",
f20720
-					mpp->alias, pp->dev);
f20720
+		if (pp->size && mpp->size != pp->size) {
f20720
+			condlog(0, "%s: failed to add new path %s, "
f20720
+				"device size mismatch",
f20720
+				mpp->alias, pp->dev);
f20720
 			int i = find_slot(vecs->pathvec, (void *)pp);
f20720
 			if (i != -1)
f20720
 				vector_del_slot(vecs->pathvec, i);
f20720
@@ -563,18 +558,7 @@ rescan:
f20720
 		verify_paths(mpp, vecs, NULL);
f20720
 		mpp->flush_on_last_del = FLUSH_UNDEF;
f20720
 		mpp->action = ACT_RELOAD;
f20720
-	}
f20720
-	else {
f20720
-		if (!pp->size) {
f20720
-			condlog(0, "%s: failed to create new map,"
f20720
-				" device size is 0 ", pp->dev);
f20720
-			int i = find_slot(vecs->pathvec, (void *)pp);
f20720
-			if (i != -1)
f20720
-				vector_del_slot(vecs->pathvec, i);
f20720
-			free_path(pp);
f20720
-			return 1;
f20720
-		}
f20720
-
f20720
+	} else {
f20720
 		if (!should_multipath(pp, vecs->pathvec)) {
f20720
 			orphan_path(pp);
f20720
 			return 0;