diff options
Diffstat (limited to 'sysutils/slurm-wlm/files')
-rw-r--r-- | sysutils/slurm-wlm/files/patch-src_common_slurm__protocol__socket.c | 43 | ||||
-rw-r--r-- | sysutils/slurm-wlm/files/patch-src_interfaces_cgroup.c | 6 |
2 files changed, 46 insertions, 3 deletions
diff --git a/sysutils/slurm-wlm/files/patch-src_common_slurm__protocol__socket.c b/sysutils/slurm-wlm/files/patch-src_common_slurm__protocol__socket.c new file mode 100644 index 000000000000..d5ae5ef84c32 --- /dev/null +++ b/sysutils/slurm-wlm/files/patch-src_common_slurm__protocol__socket.c @@ -0,0 +1,43 @@ +--- src/common/slurm_protocol_socket.c.orig 2024-05-21 17:19:51 UTC ++++ src/common/slurm_protocol_socket.c +@@ -491,6 +491,27 @@ extern int slurm_init_msg_engine(slurm_addr_t *addr, b + extern int slurm_init_msg_engine(slurm_addr_t *addr, bool quiet) + { + int rc; ++ ++ #if defined(__FreeBSD__) ++ /* ++ * FreeBSD requires the sa_len field to be set correctly in ++ * struct sockaddr_in / sockaddr_in6 before calling bind(). ++ * If it is unset, bind() may fail with EINVAL. ++ * ++ * This adjustment ensures the correct length is set based ++ * on the address family before bind() is called. ++ */ ++ if (addr->ss_family == AF_INET) { ++ ((struct sockaddr_in *)addr)->sin_len = sizeof(struct sockaddr_in); ++ } else if (addr->ss_family == AF_INET6) { ++ ((struct sockaddr_in6 *)addr)->sin6_len = sizeof(struct sockaddr_in6); ++ } ++ ++ /* Track the correct length for bind() */ ++ socklen_t bind_len = (addr->ss_family == AF_INET6) ++ ? sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in); ++ #endif ++ + int fd; + int log_lvl = LOG_LEVEL_ERROR; + const int one = 1; +@@ -511,7 +532,11 @@ extern int slurm_init_msg_engine(slurm_addr_t *addr, b + goto error; + } + +- rc = bind(fd, (struct sockaddr const *) addr, sizeof(*addr)); ++ #if defined(__FreeBSD__) ++ rc = bind(fd, (struct sockaddr const *) addr, bind_len); ++ #else ++ rc = bind(fd, (struct sockaddr const *) addr, sizeof(*addr)); ++ #endif + if (rc < 0) { + format_print(log_lvl, "Error binding slurm stream socket: %m"); + goto error; diff --git a/sysutils/slurm-wlm/files/patch-src_interfaces_cgroup.c b/sysutils/slurm-wlm/files/patch-src_interfaces_cgroup.c index 12bf2f7f5656..4b8616be9ee3 100644 --- a/sysutils/slurm-wlm/files/patch-src_interfaces_cgroup.c +++ b/sysutils/slurm-wlm/files/patch-src_interfaces_cgroup.c @@ -1,6 +1,6 @@ ---- src/interfaces/cgroup.c.orig 2023-11-21 22:33:29 UTC +--- src/interfaces/cgroup.c.orig 2024-05-21 17:19:51 UTC +++ src/interfaces/cgroup.c -@@ -419,6 +419,7 @@ extern char *autodetect_cgroup_version(void) +@@ -421,6 +421,7 @@ extern char *autodetect_cgroup_version(void) struct statfs fs; int cgroup_ver = -1; @@ -8,7 +8,7 @@ if (statfs("/sys/fs/cgroup/", &fs) < 0) { error("cgroup filesystem not mounted in /sys/fs/cgroup/"); return NULL; -@@ -451,6 +452,7 @@ extern char *autodetect_cgroup_version(void) +@@ -453,6 +454,7 @@ extern char *autodetect_cgroup_version(void) error("Unknown filesystem type mounted on /sys/fs/cgroup"); return NULL; } |