Add 0128-multipath-tools-move-DEFAULT_SOCKET-definition-into-.patch Add 0129-multipath-tools-add-helper-mpath_fill_sockaddr__.patch Add 0130-libmpathutil-add-support-for-Unix-pathname-sockets.patch Add 0131-libmpathutil-move-systemd_listen_fds-support-into-mu.patch Add 0132-multipathd-move-uxsock_trigger-to-uxlsnr.c.patch Add 0133-multipathd-uxlsnr-use-symbolic-values-for-pollfd-ind.patch Add 0134-multipathd-make-uxsock_listen-take-a-pointer-to-fd.patch Add 0135-multipathd-allow-receiving-two-socket-fds-from-syste.patch Add 0136-multipathd-listen-on-pathname-and-abstract-socket-by.patch Add 0137-libmpathcmd-try-both-abstract-and-pathname-sockets.patch Add 0138-libmpathcmd-honor-MULTIPATH_SOCKET_NAME-environment-.patch Add 0139-multipathd-honor-MULTIPATH_SOCKET_NAME-environment-v.patch * Fixes RHEL-78758 ("RFE: Enable multipathd to communicate with a process in another network namespace") Resolves: RHEL-78758
53 lines
1.5 KiB
Diff
53 lines
1.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Martin Wilck <mwilck@suse.com>
|
|
Date: Wed, 12 Feb 2025 20:45:11 +0100
|
|
Subject: [PATCH] libmpathcmd: try both abstract and pathname sockets
|
|
|
|
When connecting to the multipathd socket, try the pathname socket
|
|
first, then the abstract socket. Fail only if both connection attempts
|
|
fail.
|
|
|
|
Signed-off-by: Martin Wilck <mwilck@suse.com>
|
|
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
---
|
|
libmpathcmd/mpath_cmd.c | 13 ++++++++++---
|
|
1 file changed, 10 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/libmpathcmd/mpath_cmd.c b/libmpathcmd/mpath_cmd.c
|
|
index 54143fb1..267e3dd7 100644
|
|
--- a/libmpathcmd/mpath_cmd.c
|
|
+++ b/libmpathcmd/mpath_cmd.c
|
|
@@ -102,7 +102,10 @@ int __mpath_connect(int nonblocking)
|
|
size_t len;
|
|
struct sockaddr_un addr;
|
|
int flags = 0;
|
|
+ const char *const names[2] = {PATHNAME_SOCKET, ABSTRACT_SOCKET};
|
|
+ int name_idx = 0;
|
|
|
|
+retry:
|
|
fd = socket(AF_LOCAL, SOCK_STREAM, 0);
|
|
if (fd == -1)
|
|
return -1;
|
|
@@ -113,13 +116,17 @@ int __mpath_connect(int nonblocking)
|
|
(void)fcntl(fd, F_SETFL, flags|O_NONBLOCK);
|
|
}
|
|
|
|
- len = mpath_fill_sockaddr__(&addr, ABSTRACT_SOCKET);
|
|
+ len = mpath_fill_sockaddr__(&addr, names[name_idx]);
|
|
if (connect(fd, (struct sockaddr *)&addr, len) == -1) {
|
|
int err = errno;
|
|
|
|
close(fd);
|
|
- errno = err;
|
|
- return -1;
|
|
+ if (++name_idx == 1)
|
|
+ goto retry;
|
|
+ else {
|
|
+ errno = err;
|
|
+ return -1;
|
|
+ }
|
|
}
|
|
|
|
if (nonblocking && flags != -1)
|