On Fri, 2018-09-21 at 18:05 -0500, Benjamin Marzinski wrote:
> If the tur checker is run, and the tur_thread has timed out,
> libcheck_check() doesn't actually check if the thread is still
> running.
> This means that the thread could have already completed successfully,
> but the tur checker would still return PATH_TIMEOUT, instead of the
> value returned by the thread. This patch makes libcheck_check()
> actually
> check if the thread completed, and if so, it returns the proper
> value.
> 
> Signed-off-by: Benjamin Marzinski <[email protected]>

Reviewed-by: Martin Wilck <[email protected]>

> ---
>  libmultipath/checkers/tur.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/libmultipath/checkers/tur.c
> b/libmultipath/checkers/tur.c
> index 9f6ef51..4e2c7a8 100644
> --- a/libmultipath/checkers/tur.c
> +++ b/libmultipath/checkers/tur.c
> @@ -276,12 +276,19 @@ int libcheck_check(struct checker * c)
>       if (ct->thread) {
>               if (tur_check_async_timeout(c)) {
>                       int running = uatomic_xchg(&ct->running, 0);
> -                     if (running)
> +                     if (running) {
>                               pthread_cancel(ct->thread);
> -                     condlog(3, "%s: tur checker timeout", ct-
> >devt);
> +                             condlog(3, "%s: tur checker timeout",
> ct->devt);
> +                             MSG(c, MSG_TUR_TIMEOUT);
> +                             tur_status = PATH_TIMEOUT;
> +                     } else {
> +                             pthread_mutex_lock(&ct->lock);
> +                             tur_status = ct->state;
> +                             strlcpy(c->message, ct->message,
> +                                     sizeof(c->message));
> +                             pthread_mutex_unlock(&ct->lock);
> +                     }
>                       ct->thread = 0;
> -                     MSG(c, MSG_TUR_TIMEOUT);
> -                     tur_status = PATH_TIMEOUT;
>               } else if (uatomic_read(&ct->running) != 0) {
>                       condlog(3, "%s: tur checker not finished", ct-
> >devt);
>                       tur_status = PATH_PENDING;

-- 
Dr. Martin Wilck <[email protected]>, Tel. +49 (0)911 74053 2107
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)


--
dm-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to