From patchwork Tue Jan 30 14:16:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Wilck X-Patchwork-Id: 10191873 X-Patchwork-Delegate: christophe.varoqui@free.fr Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 6260560383 for ; Tue, 30 Jan 2018 14:18:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5168E26E97 for ; Tue, 30 Jan 2018 14:18:28 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4512D289F7; Tue, 30 Jan 2018 14:18:28 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 9E0B1289FA for ; Tue, 30 Jan 2018 14:18:27 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7DB3CC0568F9; Tue, 30 Jan 2018 14:18:25 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3F9AB60852; Tue, 30 Jan 2018 14:18:24 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 32E144ED36; Tue, 30 Jan 2018 14:18:22 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w0UEIL2G003518 for ; Tue, 30 Jan 2018 09:18:21 -0500 Received: by smtp.corp.redhat.com (Postfix) id 382A0600D3; Tue, 30 Jan 2018 14:18:21 +0000 (UTC) Delivered-To: dm-devel@redhat.com Received: from mx1.redhat.com (ext-mx01.extmail.prod.ext.phx2.redhat.com [10.5.110.25]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 35528600C0; Tue, 30 Jan 2018 14:18:14 +0000 (UTC) Received: from smtp.nue.novell.com (smtp.nue.novell.com [195.135.221.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8ED0E81DF0; Tue, 30 Jan 2018 14:18:11 +0000 (UTC) Received: from emea4-mta.ukb.novell.com ([10.120.13.87]) by smtp.nue.novell.com with ESMTP (TLS encrypted); Tue, 30 Jan 2018 15:18:09 +0100 Received: from apollon.suse.de.de (nwb-a10-snat.microfocus.com [10.120.13.202]) by emea4-mta.ukb.novell.com with ESMTP (TLS encrypted); Tue, 30 Jan 2018 14:17:45 +0000 From: Martin Wilck To: Christophe Varoqui , Chongyun Wu Date: Tue, 30 Jan 2018 15:16:24 +0100 Message-Id: <20180130141624.27439-1-mwilck@suse.com> In-Reply-To: References: X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 207 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 30 Jan 2018 14:18:12 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 30 Jan 2018 14:18:12 +0000 (UTC) for IP:'195.135.221.5' DOMAIN:'smtp.nue.novell.com' HELO:'smtp.nue.novell.com' FROM:'mwilck@suse.com' RCPT:'' X-RedHat-Spam-Score: -2.301 (RCVD_IN_DNSWL_MED, SPF_PASS) 195.135.221.5 smtp.nue.novell.com 195.135.221.5 smtp.nue.novell.com X-Scanned-By: MIMEDefang 2.83 on 10.5.110.25 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: dm-devel@redhat.com Cc: Xose Vazquez Perez , Guozhonghua , dm-devel@redhat.com, Changwei Ge , Changlimin , Martin Wilck Subject: [dm-devel] [PATCH v2] multipath-tools: handle exit signal immediately X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 30 Jan 2018 14:18:26 +0000 (UTC) X-Virus-Scanned: ClamAV using ClamSMTP multipathd shouldn't try to service any more client connections when it receives an exit signal. Moreover, ppoll() can return success even if signals occured. So check for reconfigure or log_reset signals after handling pending client requests. Based on an analysis by Chongyun Wu. Reported-by: Chongyun Wu Signed-off-by: Martin Wilck Reviewed-by: Benjamin Marzinski --- multipathd/main.c | 6 ++++-- multipathd/main.h | 2 +- multipathd/uxlsnr.c | 7 +++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/multipathd/main.c b/multipathd/main.c index 27cf234623d0..8e96f5dd2d7f 100644 --- a/multipathd/main.c +++ b/multipathd/main.c @@ -2184,12 +2184,15 @@ signal_set(int signo, void (*func) (int)) } void -handle_signals(void) +handle_signals(bool nonfatal) { if (exit_sig) { condlog(2, "exit (signal)"); + exit_sig = 0; exit_daemon(); } + if (!nonfatal) + return; if (reconfig_sig) { condlog(2, "reconfigure (signal)"); set_config_state(DAEMON_CONFIGURE); @@ -2200,7 +2203,6 @@ handle_signals(void) log_reset("multipathd"); pthread_mutex_unlock(&logq_lock); } - exit_sig = 0; reconfig_sig = 0; log_reset_sig = 0; } diff --git a/multipathd/main.h b/multipathd/main.h index ededdaba32fe..e8140feaf291 100644 --- a/multipathd/main.h +++ b/multipathd/main.h @@ -38,6 +38,6 @@ int mpath_pr_event_handle(struct path *pp); void * mpath_pr_event_handler_fn (void * ); int update_map_pr(struct multipath *mpp); void * mpath_pr_event_handler_fn (void * pathp ); -void handle_signals(void); +void handle_signals(bool); #endif /* MAIN_H */ diff --git a/multipathd/uxlsnr.c b/multipathd/uxlsnr.c index 98ac25a68c43..dc116cf2515b 100644 --- a/multipathd/uxlsnr.c +++ b/multipathd/uxlsnr.c @@ -221,9 +221,10 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data) /* most of our life is spent in this call */ poll_count = ppoll(polls, i, &sleep_time, &mask); + handle_signals(false); if (poll_count == -1) { if (errno == EINTR) { - handle_signals(); + handle_signals(true); continue; } @@ -233,7 +234,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data) } if (poll_count == 0) { - handle_signals(); + handle_signals(true); continue; } @@ -292,6 +293,8 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data) FREE(inbuf); } } + /* see if we got a non-fatal signal */ + handle_signals(true); /* see if we got a new client */ if (polls[0].revents & POLLIN) {