From patchwork Tue Mar 7 22:49:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Marzinski X-Patchwork-Id: 13164908 X-Patchwork-Delegate: christophe.varoqui@free.fr Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0A756C6FA99 for ; Tue, 7 Mar 2023 22:49:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1678229385; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=NBFkQhxLeTvOdtaaTRVLLiZrYw7UP+r27qFWg+cTb7w=; b=XHt5j/CqMdzv2hoL79byharyE+qH0/TGZ/KjKQBTCO5N7SAMsfbNV8Q3CeMy+BJTbRZHBM 50BeB7gUdh0+lHsvdoivd6JNNvvEetOl7UJiCadZ2wX0C3xfVlKzPloFthhqI+sRzfpyjB jc57yEFP/LKDZsYfD9Tx6QT3LFU62Rw= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-631-y1RSaNs1Oom0nCP-7EnSsQ-1; Tue, 07 Mar 2023 17:49:41 -0500 X-MC-Unique: y1RSaNs1Oom0nCP-7EnSsQ-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A94BC886464; Tue, 7 Mar 2023 22:49:39 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4E132C15BAD; Tue, 7 Mar 2023 22:49:39 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id A786819465B2; Tue, 7 Mar 2023 22:49:38 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id F278C19465B2 for ; Tue, 7 Mar 2023 22:49:37 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id D54DF492B00; Tue, 7 Mar 2023 22:49:37 +0000 (UTC) Received: from octiron.msp.redhat.com (octiron.msp.redhat.com [10.15.80.209]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BF0DF492C3E; Tue, 7 Mar 2023 22:49:37 +0000 (UTC) Received: from octiron.msp.redhat.com (localhost.localdomain [127.0.0.1]) by octiron.msp.redhat.com (8.14.9/8.14.9) with ESMTP id 327Mnasn018830; Tue, 7 Mar 2023 16:49:36 -0600 Received: (from bmarzins@localhost) by octiron.msp.redhat.com (8.14.9/8.14.9/Submit) id 327MnZV7018829; Tue, 7 Mar 2023 16:49:35 -0600 From: Benjamin Marzinski To: Christophe Varoqui Date: Tue, 7 Mar 2023 16:49:32 -0600 Message-Id: <1678229374-18788-2-git-send-email-bmarzins@redhat.com> In-Reply-To: <1678229374-18788-1-git-send-email-bmarzins@redhat.com> References: <1678229374-18788-1-git-send-email-bmarzins@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 Subject: [dm-devel] [PATCH 1/3] libmultipath: return 'pending' state when port is in transition X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: device-mapper development , Brian Bunker , Martin Wilck MIME-Version: 1.0 Errors-To: dm-devel-bounces@redhat.com Sender: "dm-devel" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com The tur checker should not return that a path is down when it is in the transitioning state. Instead, it should return PATH_PENDING, so that the path retains its current state, and multipathd can react quickly when it moves out of the transitioning state. The code needs to be careful to differentiate between when the checker thread has finished and returned PATH_PENDING, and when it is still running. Reported-by: Brian Bunker Signed-off-by: Benjamin Marzinski --- libmultipath/checkers/tur.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/libmultipath/checkers/tur.c b/libmultipath/checkers/tur.c index 551dc4f0..a5045f10 100644 --- a/libmultipath/checkers/tur.c +++ b/libmultipath/checkers/tur.c @@ -32,6 +32,7 @@ enum { MSG_TUR_RUNNING = CHECKER_FIRST_MSGID, MSG_TUR_TIMEOUT, MSG_TUR_FAILED, + MSG_TUR_TRANSITIONING, }; #define _IDX(x) (MSG_ ## x - CHECKER_FIRST_MSGID) @@ -39,6 +40,7 @@ const char *libcheck_msgtable[] = { [_IDX(TUR_RUNNING)] = " still running", [_IDX(TUR_TIMEOUT)] = " timed out", [_IDX(TUR_FAILED)] = " failed to initialize", + [_IDX(TUR_TRANSITIONING)] = " reports path is transitioning", NULL, }; @@ -186,6 +188,13 @@ retry: */ *msgid = CHECKER_MSGID_GHOST; return PATH_GHOST; + } else if (asc == 0x04 && ascq == 0x0a) { + /* + * LOGICAL UNIT NOT ACCESSIBLE, + * ASYMMETRIC ACCESS STATE TRANSITION + */ + *msgid = MSG_TUR_TRANSITIONING; + return PATH_PENDING; } } *msgid = CHECKER_MSGID_DOWN; @@ -350,6 +359,7 @@ int libcheck_check(struct checker * c) condlog(3, "%d:%d : tur checker not finished", major(ct->devt), minor(ct->devt)); tur_status = PATH_PENDING; + c->msgid = MSG_TUR_RUNNING; } else { /* TUR checker done */ ct->thread = 0; @@ -404,7 +414,7 @@ int libcheck_check(struct checker * c) /* Start new TUR checker */ pthread_mutex_lock(&ct->lock); tur_status = ct->state = PATH_PENDING; - ct->msgid = CHECKER_MSGID_NONE; + c->msgid = ct->msgid = MSG_TUR_RUNNING; pthread_mutex_unlock(&ct->lock); ct->fd = c->fd; ct->timeout = c->timeout; @@ -424,7 +434,7 @@ int libcheck_check(struct checker * c) } tur_timeout(&tsp); pthread_mutex_lock(&ct->lock); - if (ct->state == PATH_PENDING) + if (ct->state == PATH_PENDING && ct->msgid == MSG_TUR_RUNNING) r = pthread_cond_timedwait(&ct->active, &ct->lock, &tsp); if (!r) { @@ -432,7 +442,7 @@ int libcheck_check(struct checker * c) c->msgid = ct->msgid; } pthread_mutex_unlock(&ct->lock); - if (tur_status == PATH_PENDING) { + if (tur_status == PATH_PENDING && c->msgid == MSG_TUR_RUNNING) { condlog(4, "%d:%d : tur checker still running", major(ct->devt), minor(ct->devt)); } else { From patchwork Tue Mar 7 22:49:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Marzinski X-Patchwork-Id: 13164909 X-Patchwork-Delegate: christophe.varoqui@free.fr Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2412FC678D5 for ; Tue, 7 Mar 2023 22:49:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1678229386; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=icYVLZY00tw/gRmmpd9kj1j0n8B0DxUEnIw5g2yFDHk=; b=Ci1IFJGCLhytsKFME7klFBHh+UQhLG+6O41bNuz6wKyFsWtn9vllNXAVfVr1SP5vYR+d92 byXd3f8m7FcIcpAy3IarOBWyjUpVvgbc+b74fjnc4B4pcEf7m4JI8NQtUuqrfuPfUKHINg fbKd88r0dJdya6SpE3Rps/TA6C3aqx4= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-671-feBTAOSTNjiF_Bhjg12UkQ-1; Tue, 07 Mar 2023 17:49:43 -0500 X-MC-Unique: feBTAOSTNjiF_Bhjg12UkQ-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 19FC1384D033; Tue, 7 Mar 2023 22:49:41 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 08FBA492B00; Tue, 7 Mar 2023 22:49:41 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id CD4CB19465A4; Tue, 7 Mar 2023 22:49:40 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 926B31946594 for ; Tue, 7 Mar 2023 22:49:39 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 77262112132D; Tue, 7 Mar 2023 22:49:39 +0000 (UTC) Received: from octiron.msp.redhat.com (octiron.msp.redhat.com [10.15.80.209]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5D7641121314; Tue, 7 Mar 2023 22:49:39 +0000 (UTC) Received: from octiron.msp.redhat.com (localhost.localdomain [127.0.0.1]) by octiron.msp.redhat.com (8.14.9/8.14.9) with ESMTP id 327Mnc6R018834; Tue, 7 Mar 2023 16:49:38 -0600 Received: (from bmarzins@localhost) by octiron.msp.redhat.com (8.14.9/8.14.9/Submit) id 327Mnb8r018833; Tue, 7 Mar 2023 16:49:37 -0600 From: Benjamin Marzinski To: Christophe Varoqui Date: Tue, 7 Mar 2023 16:49:33 -0600 Message-Id: <1678229374-18788-3-git-send-email-bmarzins@redhat.com> In-Reply-To: <1678229374-18788-1-git-send-email-bmarzins@redhat.com> References: <1678229374-18788-1-git-send-email-bmarzins@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 Subject: [dm-devel] [PATCH 2/3] libmultipath: set init failure message when init fails X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: device-mapper development , Brian Bunker , Martin Wilck MIME-Version: 1.0 Errors-To: dm-devel-bounces@redhat.com Sender: "dm-devel" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com The tur checker has a message for initialization failure. We might as well use it. Signed-off-by: Benjamin Marzinski --- libmultipath/checkers/tur.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libmultipath/checkers/tur.c b/libmultipath/checkers/tur.c index a5045f10..a19becf5 100644 --- a/libmultipath/checkers/tur.c +++ b/libmultipath/checkers/tur.c @@ -400,8 +400,10 @@ int libcheck_check(struct checker * c) * It fails only in OOM situations. In this case, return * PATH_UNCHECKED to avoid prematurely failing the path. */ - if (libcheck_init(c) != 0) + if (libcheck_init(c) != 0) { + c->msgid = MSG_TUR_FAILED; return PATH_UNCHECKED; + } ((struct tur_checker_context *)c->context)->nr_timeouts = ct->nr_timeouts; if (!uatomic_sub_return(&ct->holders, 1)) From patchwork Tue Mar 7 22:49:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Marzinski X-Patchwork-Id: 13164910 X-Patchwork-Delegate: christophe.varoqui@free.fr Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5C4A6C6FD1E for ; Tue, 7 Mar 2023 22:49:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1678229387; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=z4OisbwfPJJu2HjFb2W4C9naFkQuBEDzT1gdhAONRdw=; b=McWYMTlYwSD3TT9IDB3JdteKPhek36Dxu88LsZHOO3g8c+2qZ/5VbJUA6cVSodsMBqvDdh BhLvz98qYJQRZ49zV4sSI53xaoGdqAKndlFUf4zRJ83XTb3Oed6INsps/omW+6dQHrebF5 WceVMzBNohmjLTzvALvFv45yB4FOeMM= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-669-fPDc1oxgPTy2ESHOchaJ4Q-1; Tue, 07 Mar 2023 17:49:44 -0500 X-MC-Unique: fPDc1oxgPTy2ESHOchaJ4Q-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 514EC384D030; Tue, 7 Mar 2023 22:49:42 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3F1A12166B2A; Tue, 7 Mar 2023 22:49:42 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 1B1C619465A4; Tue, 7 Mar 2023 22:49:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 232611946594 for ; Tue, 7 Mar 2023 22:49:41 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 0858E35454; Tue, 7 Mar 2023 22:49:41 +0000 (UTC) Received: from octiron.msp.redhat.com (octiron.msp.redhat.com [10.15.80.209]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E24E618EC6; Tue, 7 Mar 2023 22:49:40 +0000 (UTC) Received: from octiron.msp.redhat.com (localhost.localdomain [127.0.0.1]) by octiron.msp.redhat.com (8.14.9/8.14.9) with ESMTP id 327MndN4018838; Tue, 7 Mar 2023 16:49:39 -0600 Received: (from bmarzins@localhost) by octiron.msp.redhat.com (8.14.9/8.14.9/Submit) id 327MncaF018837; Tue, 7 Mar 2023 16:49:38 -0600 From: Benjamin Marzinski To: Christophe Varoqui Date: Tue, 7 Mar 2023 16:49:34 -0600 Message-Id: <1678229374-18788-4-git-send-email-bmarzins@redhat.com> In-Reply-To: <1678229374-18788-1-git-send-email-bmarzins@redhat.com> References: <1678229374-18788-1-git-send-email-bmarzins@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.5 Subject: [dm-devel] [PATCH 3/3] libmultipath: reset nr_timeouts if we freed the context X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: device-mapper development , Brian Bunker , Martin Wilck MIME-Version: 1.0 Errors-To: dm-devel-bounces@redhat.com Sender: "dm-devel" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com If a the tur checker creates a new context because an old thread is still running, but the old thread finishes before the checker drops the old context, the checker should reset nr_timeouts to 0, since the old thread did complete in time. Signed-off-by: Benjamin Marzinski --- libmultipath/checkers/tur.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libmultipath/checkers/tur.c b/libmultipath/checkers/tur.c index a19becf5..fe6a2f14 100644 --- a/libmultipath/checkers/tur.c +++ b/libmultipath/checkers/tur.c @@ -406,9 +406,11 @@ int libcheck_check(struct checker * c) } ((struct tur_checker_context *)c->context)->nr_timeouts = ct->nr_timeouts; - if (!uatomic_sub_return(&ct->holders, 1)) + if (!uatomic_sub_return(&ct->holders, 1)) { /* It did terminate, eventually */ cleanup_context(ct); + ((struct tur_checker_context *)c->context)->nr_timeouts = 0; + } ct = c->context; } else