]) # LN_CONFIG_SOCK_CREATE_KERN
#
+# LN_CONFIG_SOCK_NOT_OWNED_BY_ME
+#
+# Linux upstream v6.11-rc3-g151c9c724d05d5b0d changes TCP socket orphan
+# cleanup, requiring a change in ksocklnd if present. This has been back-ported
+# to 4.* and 5.* Linux distributions.
+#
+AC_DEFUN([LN_SRC_CONFIG_SOCK_NOT_OWNED_BY_ME], [
+ LB2_LINUX_TEST_SRC([sock_not_owned_by_me], [
+ #include <net/sock.h>
+ ],[
+ sock_not_owned_by_me((const struct sock *)0);
+ ],[-Werror])
+])
+AC_DEFUN([LN_CONFIG_SOCK_NOT_OWNED_BY_ME], [
+ LB2_MSG_LINUX_TEST_RESULT([if Linux kernel has 'sock_not_owned_by_me'],
+ [sock_not_owned_by_me], [
+ AC_DEFINE(HAVE_SOCK_NOT_OWNED_BY_ME, 1,
+ [sock_not_owned_by_me is defined in sock.h])
+ ])
+]) # LN_CONFIG_SOCK_NOT_OWNED_BY_ME
+
+#
# LN_CONFIG_SK_DATA_READY
#
# 3.15 for struct sock the *sk_data_ready() field only takes one argument now
LN_SRC_CONFIG_SK_DATA_READY
# 4.x
LN_SRC_CONFIG_SOCK_CREATE_KERN
+ LN_SRC_CONFIG_SOCK_NOT_OWNED_BY_ME
# 4.6
LN_SRC_ETHTOOL_LINK_SETTINGS
# 4.14
LN_CONFIG_SK_DATA_READY
# 4.x
LN_CONFIG_SOCK_CREATE_KERN
+ LN_CONFIG_SOCK_NOT_OWNED_BY_ME
# 4.6
LN_ETHTOOL_LINK_SETTINGS
# 4.14
int keep_intvl;
int keep_count;
int do_keepalive;
- struct tcp_sock *tp = tcp_sk(sock->sk);
+ struct sock *sk = sock->sk;
+ struct tcp_sock *tp = tcp_sk(sk);
struct lnet_ioctl_config_socklnd_tunables *lndtun;
+#ifdef HAVE_SOCK_NOT_OWNED_BY_ME
+ struct net *net = sock_net(sk);
+
+ /* Set sk_net_refcnt and namespace for orphan cleanup LU-18137 */
+ sk->sk_net_refcnt = 1;
+ get_net(net);
+#endif
- sock->sk->sk_allocation = GFP_NOFS;
+ sk->sk_allocation = GFP_NOFS;
/* Ensure this socket aborts active sends immediately when closed. */
sock_reset_flag(sock->sk, SOCK_LINGER);