From 016dac39bf58ab2f03c7a74445e94069aacc6fe5 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Wed, 31 May 2023 15:48:54 -0400 Subject: [PATCH] Handle net arg being added to sock_create_kern() Signed-off-by: Auke Kok --- kmod/src/Makefile.kernelcompat | 9 +++++++++ kmod/src/kernelcompat.h | 6 ++++++ kmod/src/net.c | 4 ++-- kmod/src/quorum.c | 2 +- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/kmod/src/Makefile.kernelcompat b/kmod/src/Makefile.kernelcompat index ca408a1a..dac5f514 100644 --- a/kmod/src/Makefile.kernelcompat +++ b/kmod/src/Makefile.kernelcompat @@ -167,3 +167,12 @@ endif ifneq (,$(shell grep 'kernel_getsockname.*,$$' include/linux/net.h)) ccflags-y += -DKC_KERNEL_GETSOCKNAME_ADDRLEN=1 endif + +# +# v4.1-rc1-410-geeb1bd5c40ed +# +# Adds a struct net parameter to sock_create_kern +# +ifneq (,$(shell grep 'sock_create_kern.*struct net' include/linux/net.h)) +ccflags-y += -DKC_SOCK_CREATE_KERN_NET=1 +endif diff --git a/kmod/src/kernelcompat.h b/kmod/src/kernelcompat.h index e3b93c66..2dad3400 100644 --- a/kmod/src/kernelcompat.h +++ b/kmod/src/kernelcompat.h @@ -252,4 +252,10 @@ static inline int kc_kernel_getpeername(struct socket *sock, struct sockaddr *ad #define kc_kernel_getpeername(sock, addr) kernel_getpeername(sock, addr) #endif +#ifdef KC_SOCK_CREATE_KERN_NET +#define kc_sock_create_kern(family, type, proto, res) sock_create_kern(&init_net, family, type, proto, res) +#else +#define kc_sock_create_kern sock_create_kern +#endif + #endif diff --git a/kmod/src/net.c b/kmod/src/net.c index c539fde1..cfa1b6d4 100644 --- a/kmod/src/net.c +++ b/kmod/src/net.c @@ -1046,7 +1046,7 @@ static void scoutfs_net_connect_worker(struct work_struct *work) trace_scoutfs_net_connect_work_enter(sb, 0, 0); - ret = sock_create_kern(AF_INET, SOCK_STREAM, IPPROTO_TCP, &sock); + ret = kc_sock_create_kern(AF_INET, SOCK_STREAM, IPPROTO_TCP, &sock); if (ret) goto out; @@ -1447,7 +1447,7 @@ int scoutfs_net_bind(struct super_block *sb, if (WARN_ON_ONCE(conn->sock)) return -EINVAL; - ret = sock_create_kern(AF_INET, SOCK_STREAM, IPPROTO_TCP, &sock); + ret = kc_sock_create_kern(AF_INET, SOCK_STREAM, IPPROTO_TCP, &sock); if (ret) goto out; diff --git a/kmod/src/quorum.c b/kmod/src/quorum.c index de260b3a..ad83e344 100644 --- a/kmod/src/quorum.c +++ b/kmod/src/quorum.c @@ -183,7 +183,7 @@ static int create_socket(struct super_block *sb) int addrlen; int ret; - ret = sock_create_kern(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock); + ret = kc_sock_create_kern(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock); if (ret) { scoutfs_err(sb, "quorum couldn't create udp socket: %d", ret); goto out;