diff mbox

[05/10] mpath: don't wait for udev if all paths are down

Message ID 1477709726-5442-6-git-send-email-bmarzins@redhat.com (mailing list archive)
State Not Applicable, archived
Delegated to: christophe varoqui
Headers show

Commit Message

Benjamin Marzinski Oct. 29, 2016, 2:55 a.m. UTC
Normally multipath waits for udev to create a device before adding
more paths, which could trigger a reload. But, if the first path
discovered is not usable, you should add the next path right away.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
 multipathd/main.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Hannes Reinecke Oct. 30, 2016, 1:46 p.m. UTC | #1
On 10/29/2016 04:55 AM, Benjamin Marzinski wrote:
> Normally multipath waits for udev to create a device before adding
> more paths, which could trigger a reload. But, if the first path
> discovered is not usable, you should add the next path right away.
>
> Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
> ---
>  multipathd/main.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/multipathd/main.c b/multipathd/main.c
> index dbcaa03..15c957a 100644
> --- a/multipathd/main.c
> +++ b/multipathd/main.c
> @@ -715,7 +715,10 @@ ev_add_path (struct path * pp, struct vectors * vecs)
>  		goto fail; /* leave path added to pathvec */
>  	}
>  	mpp = find_mp_by_wwid(vecs->mpvec, pp->wwid);
> -	if (mpp && mpp->wait_for_udev) {
> +	if (mpp && mpp->wait_for_udev &&
> +	    (pathcount(mpp, PATH_UP) > 0 ||
> +	     (pathcount(mpp, PATH_GHOST) > 0 && pp->tpgs != TPGS_IMPLICIT))) {
> +		/* if wait_for_udev is set and valid paths exist */
>  		mpp->wait_for_udev = 2;
>  		orphan_path(pp, "waiting for create to complete");
>  		return 0;
>
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
diff mbox

Patch

diff --git a/multipathd/main.c b/multipathd/main.c
index dbcaa03..15c957a 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -715,7 +715,10 @@  ev_add_path (struct path * pp, struct vectors * vecs)
 		goto fail; /* leave path added to pathvec */
 	}
 	mpp = find_mp_by_wwid(vecs->mpvec, pp->wwid);
-	if (mpp && mpp->wait_for_udev) {
+	if (mpp && mpp->wait_for_udev &&
+	    (pathcount(mpp, PATH_UP) > 0 ||
+	     (pathcount(mpp, PATH_GHOST) > 0 && pp->tpgs != TPGS_IMPLICIT))) {
+		/* if wait_for_udev is set and valid paths exist */
 		mpp->wait_for_udev = 2;
 		orphan_path(pp, "waiting for create to complete");
 		return 0;