From patchwork Wed Nov 29 09:35:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chongyun Wu X-Patchwork-Id: 10081699 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 064FB602BC for ; Wed, 29 Nov 2017 09:36:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E9E7027CF3 for ; Wed, 29 Nov 2017 09:36:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DEABE29652; Wed, 29 Nov 2017 09:36:43 +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 B6E3127CF3 for ; Wed, 29 Nov 2017 09:36:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 97BEC83F3D; Wed, 29 Nov 2017 09:36:40 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 848C15D9C7; Wed, 29 Nov 2017 09:36:39 +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 A808A1800BDA; Wed, 29 Nov 2017 09:36:36 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vAT9aZqV001568 for ; Wed, 29 Nov 2017 04:36:36 -0500 Received: by smtp.corp.redhat.com (Postfix) id C35225D75A; Wed, 29 Nov 2017 09:36:35 +0000 (UTC) Delivered-To: dm-devel@redhat.com Received: from mx1.redhat.com (ext-mx05.extmail.prod.ext.phx2.redhat.com [10.5.110.29]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BAC0C5D759 for ; Wed, 29 Nov 2017 09:36:32 +0000 (UTC) Received: from h3cmg01-ex.h3c.com (smtp.h3c.com [60.191.123.56]) by mx1.redhat.com (Postfix) with ESMTP id 0C52113A53 for ; Wed, 29 Nov 2017 09:35:58 +0000 (UTC) Received: from BJHUB01-EX.srv.huawei-3com.com (unknown [10.63.20.169]) by h3cmg01-ex.h3c.com with smtp id 45d3_0226_8b440023_ee44_44eb_82e6_96343c01c93e; Wed, 29 Nov 2017 17:35:55 +0800 Received: from H3CMLB14-EX.srv.huawei-3com.com ([fe80::f804:6772:bd71:f07f]) by BJHUB01-EX.srv.huawei-3com.com ([::1]) with mapi id 14.03.0248.002; Wed, 29 Nov 2017 17:35:45 +0800 From: Wuchongyun To: "dm-devel@redhat.com" Thread-Topic: multipath-tools: release uxsocket and resource when cancel thread Thread-Index: AdNk10hZdtJSUvcxSu68h/8HmkQ9gQ== Date: Wed, 29 Nov 2017 09:35:44 +0000 Message-ID: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.125.136.149] MIME-Version: 1.0 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.29]); Wed, 29 Nov 2017 09:36:27 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 29 Nov 2017 09:36:27 +0000 (UTC) for IP:'60.191.123.56' DOMAIN:'smtp.h3c.com' HELO:'h3cmg01-ex.h3c.com' FROM:'wu.chongyun@h3c.com' RCPT:'' X-RedHat-Spam-Score: 0.821 (HELO_DYNAMIC_DHCP, RCVD_IN_DNSWL_NONE, T_RP_MATCHES_RCVD) 60.191.123.56 smtp.h3c.com 60.191.123.56 smtp.h3c.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.29 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id vAT9aZqV001568 X-loop: dm-devel@redhat.com Cc: Guozhonghua , Changwei Ge Subject: [dm-devel] multipath-tools: release uxsocket and resource when cancel thread 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: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 29 Nov 2017 09:36:41 +0000 (UTC) X-Virus-Scanned: ClamAV using ClamSMTP Hi , Issue description: when multipathd initilaze and call uxsock_listen to create unix domain socket, but return -1 and the errno is 98 and then the uxsock_listen return null. After multipathd startup we can't receive any multipathd commands to finish the new multipath creation anymore! We found that uxlsnr thread's cleanup function not close the sockets and also not release the clients when cancel thread, the domain socket will be release by the system. In any special environment like themachine's load is very heavy, the system may not close the old domain socket when we try to create and bind the domain socket may return 98 (Address already in use). And also we make some experiments: In uxsock_cleanup if we close the ux_sock first and then immdediately call ux_socket_listen to create new ux_sock and initialization will be OK; If we don't close the ux_sock and call ux_socket_listen will return -1 and errno = 98. So we believe that close uxsocket and release clients when cancel thread might making new starting multipathd thread can create uxsocket successfully, and might receiving multipathd commands properly. And also this path can fix clients' memory leak. Thanks, Chongyun Signed-off-by: wu chongyun --- multipathd/uxlsnr.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/multipathd/uxlsnr.c b/multipathd/uxlsnr.c index 98ac25a..de6950b 100644 --- a/multipathd/uxlsnr.c +++ b/multipathd/uxlsnr.c @@ -139,6 +139,20 @@ void check_timeout(struct timespec start_time, char *inbuf, void uxsock_cleanup(void *arg) { + struct client *client_loop; + struct client *client_tmp; + int ux_sock = (int)arg; + + /* + * no need to protect clients, + * because all operations to clients are only from one thread(uxlsnr) + */ + list_for_each_entry_safe(client_loop, client_tmp, &clients, node) { + dead_client(client_loop); + } + + close(ux_sock); + cli_exit(); free_polls(); } @@ -162,7 +176,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data) return NULL; } - pthread_cleanup_push(uxsock_cleanup, NULL); + pthread_cleanup_push(uxsock_cleanup, (void*)ux_sock); condlog(3, "uxsock: startup listener"); polls = (struct pollfd *)MALLOC((MIN_POLLS + 1) * sizeof(struct pollfd));