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