diff mbox

[3/3] Treat PATH_TIMEOUT as PATH_DOWN

Message ID 1476759069-9832-3-git-send-email-tang.junhui@zte.com.cn (mailing list archive)
State Not Applicable, archived
Delegated to: Mike Snitzer
Headers show

Commit Message

tang.junhui@zte.com.cn Oct. 18, 2016, 2:51 a.m. UTC
From: "tang.junhui" <tang.junhui@zte.com.cn>

Treat PATH_TIMEOUT as PATH_DOWN since it is basically the same as
PATH_DOWN, except with a different state name. So change it to PATH_DOWN
immediately if it is PATH_TIMEOUT according to the method in pathinfo().
After the modification all PATH_TIMEOUTs are equal to PATH_DOWN since the
rest of pp->state is assigned all in pathinfo().

Signed-off-by: tang.junhui <tang.junhui@zte.com.cn>
---
 multipathd/main.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Benjamin Marzinski Oct. 18, 2016, 4:38 p.m. UTC | #1
On Tue, Oct 18, 2016 at 10:51:09AM +0800, tang.junhui@zte.com.cn wrote:
> From: "tang.junhui" <tang.junhui@zte.com.cn>
> 
> Treat PATH_TIMEOUT as PATH_DOWN since it is basically the same as
> PATH_DOWN, except with a different state name. So change it to PATH_DOWN
> immediately if it is PATH_TIMEOUT according to the method in pathinfo().
> After the modification all PATH_TIMEOUTs are equal to PATH_DOWN since the
> rest of pp->state is assigned all in pathinfo().

NACK. The whole point of PATH_TIMEOUT is to let the user know that
instead of actually getting errors returned by the path checker, the
path checker is timing out. To do this, we need to keep the state set to
PATH_TIMEOUT, so that it will actually print the correct state string.

Another possibility would be to remove PATH_TIMEOUT and instead keep
track of the reason for the PATH_DOWN state, and then when printing the
checker state in snprint_chk_state(), use that to print the correct
state string.

-Ben

> 
> Signed-off-by: tang.junhui <tang.junhui@zte.com.cn>
> ---
>  multipathd/main.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/multipathd/main.c b/multipathd/main.c
> index e369a79..f715eb5 100644
> --- a/multipathd/main.c
> +++ b/multipathd/main.c
> @@ -1528,6 +1528,10 @@ check_path (struct vectors * vecs, struct path * pp, int ticks)
>  		put_multipath_config(conf);
>  		return 1;
>  	}
> +
> +	if (newstate == PATH_TIMEOUT)
> +		newstate = PATH_DOWN;
> +
>  	if (!pp->mpp) {
>  		if (!strlen(pp->wwid) && pp->initialized != INIT_MISSING_UDEV &&
>  		    (newstate == PATH_UP || newstate == PATH_GHOST)) {
> @@ -1601,7 +1605,7 @@ check_path (struct vectors * vecs, struct path * pp, int ticks)
>  		pp->checkint = conf->checkint;
>  		put_multipath_config(conf);
>  
> -		if (newstate == PATH_DOWN || newstate == PATH_SHAKY || newstate == PATH_TIMEOUT) {
> +		if (newstate == PATH_DOWN || newstate == PATH_SHAKY) {
>  			/*
>  			 * proactively fail path in the DM
>  			 */
> -- 
> 2.8.1.windows.1

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
diff mbox

Patch

diff --git a/multipathd/main.c b/multipathd/main.c
index e369a79..f715eb5 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -1528,6 +1528,10 @@  check_path (struct vectors * vecs, struct path * pp, int ticks)
 		put_multipath_config(conf);
 		return 1;
 	}
+
+	if (newstate == PATH_TIMEOUT)
+		newstate = PATH_DOWN;
+
 	if (!pp->mpp) {
 		if (!strlen(pp->wwid) && pp->initialized != INIT_MISSING_UDEV &&
 		    (newstate == PATH_UP || newstate == PATH_GHOST)) {
@@ -1601,7 +1605,7 @@  check_path (struct vectors * vecs, struct path * pp, int ticks)
 		pp->checkint = conf->checkint;
 		put_multipath_config(conf);
 
-		if (newstate == PATH_DOWN || newstate == PATH_SHAKY || newstate == PATH_TIMEOUT) {
+		if (newstate == PATH_DOWN || newstate == PATH_SHAKY) {
 			/*
 			 * proactively fail path in the DM
 			 */