[dpdk-stable] patch 'eal: close multi-process socket during cleanup' has been queued to LTS release 18.11.1

Kevin Traynor ktraynor at redhat.com
Fri Jan 4 14:24:21 CET 2019


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 <qi.z.zhang at intel.com>
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 <qi.z.zhang at intel.com>
---
 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 <qi.z.zhang at intel.com>
 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 at dpdk.org
 
 Signed-off-by: Qi Zhang <qi.z.zhang at intel.com>
 ---
@@ -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();


More information about the stable mailing list