From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id ECDA01B49D for ; Fri, 4 Jan 2019 14:27:32 +0100 (CET) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5A21181E05; Fri, 4 Jan 2019 13:27:32 +0000 (UTC) Received: from ktraynor.remote.csb (ovpn-117-13.ams2.redhat.com [10.36.117.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id 180365C1A1; Fri, 4 Jan 2019 13:27:30 +0000 (UTC) From: Kevin Traynor To: Qi Zhang Cc: dpdk stable Date: Fri, 4 Jan 2019 13:24:21 +0000 Message-Id: <20190104132455.15170-39-ktraynor@redhat.com> In-Reply-To: <20190104132455.15170-1-ktraynor@redhat.com> References: <20190104132455.15170-1-ktraynor@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 04 Jan 2019 13:27:32 +0000 (UTC) Subject: [dpdk-stable] patch 'eal: close multi-process socket during cleanup' has been queued to LTS release 18.11.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Jan 2019 13:27:33 -0000 Hi, FYI, your patch has been queued to LTS release 18.11.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 01/11/19. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Thanks. Kevin Traynor --- >>From eeae5231818b708962c5341bd97d05e798e7001e Mon Sep 17 00:00:00 2001 From: Qi Zhang Date: Thu, 20 Dec 2018 20:51:14 +0800 Subject: [PATCH] eal: close multi-process socket during cleanup [ upstream commit 85d6815fa6d071afc323c3a0bdfe2d0769ec33d0 ] When secondary process quit, the mp_socket* file still exist, that cause rte_mp_request_sync fail when try to send message on a floating socket. The patch fix the issue by introduce a function rte_mp_channel_cleanup. This function will be called by rte_eal_cleanup and it will close the mp socket and delete the mp_socket* file. Fixes: bacaa2754017 ("eal: add channel for multi-process communication") Signed-off-by: Qi Zhang --- lib/librte_eal/bsdapp/eal/eal.c | 1 + lib/librte_eal/common/eal_common_proc.c | 22 +++++++++++++++++++++- lib/librte_eal/common/eal_private.h | 6 +++++- lib/librte_eal/linuxapp/eal/eal.c | 1 + 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c index 41ddb5a22..a6d02e7dc 100644 --- a/lib/librte_eal/bsdapp/eal/eal.c +++ b/lib/librte_eal/bsdapp/eal/eal.c @@ -920,4 +920,5 @@ rte_eal_cleanup(void) { rte_service_finalize(); + rte_mp_channel_cleanup(); return 0; } diff --git a/lib/librte_eal/common/eal_common_proc.c b/lib/librte_eal/common/eal_common_proc.c index 6b876590a..b46d644b3 100644 --- a/lib/librte_eal/common/eal_common_proc.c +++ b/lib/librte_eal/common/eal_common_proc.c @@ -38,4 +38,5 @@ static char mp_filter[PATH_MAX]; /* Filter for secondary process sockets */ static char mp_dir_path[PATH_MAX]; /* The directory path for all mp sockets */ static pthread_mutex_t mp_mutex_action = PTHREAD_MUTEX_INITIALIZER; +static char peer_name[PATH_MAX]; struct action_entry { @@ -512,7 +513,7 @@ static int open_socket_fd(void) { - char peer_name[PATH_MAX] = {0}; struct sockaddr_un un; + peer_name[0] = '\0'; if (rte_eal_process_type() == RTE_PROC_SECONDARY) snprintf(peer_name, sizeof(peer_name), @@ -543,4 +544,17 @@ open_socket_fd(void) } +static void +close_socket_fd(void) +{ + char path[PATH_MAX]; + + if (mp_fd < 0) + return; + + close(mp_fd); + create_socket_path(peer_name, path, sizeof(path)); + unlink(path); +} + int rte_mp_channel_init(void) @@ -603,4 +617,10 @@ rte_mp_channel_init(void) } +void +rte_mp_channel_cleanup(void) +{ + close_socket_fd(); +} + /** * Return -1, as fail to send message and it's caused by the local side. diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h index 442c6dc48..4f483833d 100644 --- a/lib/librte_eal/common/eal_private.h +++ b/lib/librte_eal/common/eal_private.h @@ -256,7 +256,11 @@ struct rte_bus *rte_bus_find_by_device_name(const char *str); * (<0) on failure. */ - int rte_mp_channel_init(void); +/** + * Primary/secondary communication cleanup. + */ +void rte_mp_channel_cleanup(void); + /** * @internal diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index d252c8591..bcea22463 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -1230,4 +1230,5 @@ rte_eal_cleanup(void) rte_memseg_walk(mark_freeable, NULL); rte_service_finalize(); + rte_mp_channel_cleanup(); return 0; } -- 2.19.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2019-01-04 13:23:08.374137064 +0000 +++ 0039-eal-close-multi-process-socket-during-cleanup.patch 2019-01-04 13:23:07.000000000 +0000 @@ -1,8 +1,10 @@ -From 85d6815fa6d071afc323c3a0bdfe2d0769ec33d0 Mon Sep 17 00:00:00 2001 +From eeae5231818b708962c5341bd97d05e798e7001e Mon Sep 17 00:00:00 2001 From: Qi Zhang Date: Thu, 20 Dec 2018 20:51:14 +0800 Subject: [PATCH] eal: close multi-process socket during cleanup +[ upstream commit 85d6815fa6d071afc323c3a0bdfe2d0769ec33d0 ] + When secondary process quit, the mp_socket* file still exist, that cause rte_mp_request_sync fail when try to send message on a floating socket. @@ -12,7 +14,6 @@ mp socket and delete the mp_socket* file. Fixes: bacaa2754017 ("eal: add channel for multi-process communication") -Cc: stable@dpdk.org Signed-off-by: Qi Zhang --- @@ -23,10 +24,10 @@ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c -index 20f790a71..c8e0da097 100644 +index 41ddb5a22..a6d02e7dc 100644 --- a/lib/librte_eal/bsdapp/eal/eal.c +++ b/lib/librte_eal/bsdapp/eal/eal.c -@@ -923,4 +923,5 @@ rte_eal_cleanup(void) +@@ -920,4 +920,5 @@ rte_eal_cleanup(void) { rte_service_finalize(); + rte_mp_channel_cleanup(); @@ -98,10 +99,10 @@ /** * @internal diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c -index 1d46f3b27..2d8d470b8 100644 +index d252c8591..bcea22463 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c -@@ -1238,4 +1238,5 @@ rte_eal_cleanup(void) +@@ -1230,4 +1230,5 @@ rte_eal_cleanup(void) rte_memseg_walk(mark_freeable, NULL); rte_service_finalize(); + rte_mp_channel_cleanup();