struct sk_buff *sock_wmalloc(struct sock *sk, unsigned long size, int force,
gfp_t priority);
-void __sock_wfree(struct sk_buff *skb);
void sock_wfree(struct sk_buff *skb);
+#ifdef CONFIG_INET
+void __sock_wfree(struct sk_buff *skb);
+void tcp_wfree(struct sk_buff *skb);
+#endif
+static inline bool is_skb_wmem(const struct sk_buff *skb)
+{
+ return skb->destructor == sock_wfree ||
+ (IS_ENABLED(CONFIG_INET) && skb->destructor == __sock_wfree) ||
+ (IS_ENABLED(CONFIG_INET) && skb->destructor == tcp_wfree);
+}
+
struct sk_buff *sock_omalloc(struct sock *sk, unsigned long size,
gfp_t priority);
void skb_orphan_partial(struct sk_buff *skb);
return false;
}
-void tcp_wfree(struct sk_buff *skb);
void tcp_write_timer_handler(struct sock *sk);
void tcp_delack_timer_handler(struct sock *sk);
int tcp_ioctl(struct sock *sk, int cmd, int *karg);
#include <net/mpls.h>
#include <net/mptcp.h>
#include <net/mctp.h>
+#include <net/tcp.h>
#include <net/can.h>
#include <net/page_pool/helpers.h>
#include <net/psp/types.h>
#include "devmem.h"
#include "net-sysfs.h"
#include "netmem_priv.h"
-#include "sock_destructor.h"
#ifdef CONFIG_SKB_EXTENSIONS
static struct kmem_cache *skbuff_ext_cache __ro_after_init;
/* This variant of sock_wfree() is used by TCP,
* since it sets SOCK_USE_WRITE_QUEUE.
*/
+#ifdef CONFIG_INET
void __sock_wfree(struct sk_buff *skb)
{
struct sock *sk = skb->sk;
if (refcount_sub_and_test(skb->truesize, &sk->sk_wmem_alloc))
__sk_free(sk);
}
+EXPORT_SYMBOL_GPL(__sock_wfree);
+#endif
void skb_set_owner_w(struct sk_buff *skb, struct sock *sk)
{
+++ /dev/null
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-#ifndef _NET_CORE_SOCK_DESTRUCTOR_H
-#define _NET_CORE_SOCK_DESTRUCTOR_H
-#include <net/tcp.h>
-
-static inline bool is_skb_wmem(const struct sk_buff *skb)
-{
- return skb->destructor == sock_wfree ||
- skb->destructor == __sock_wfree ||
- (IS_ENABLED(CONFIG_INET) && skb->destructor == tcp_wfree);
-}
-#endif
#include <net/ip.h>
#include <net/ipv6.h>
-#include "../core/sock_destructor.h"
-
/* Use skb->cb to track consecutive/adjacent fragments coming at
* the end of the queue. Nodes in the rb-tree queue will
* contain "runs" of one or more adjacent fragments.
out:
sk_free(sk);
}
+EXPORT_SYMBOL_GPL(tcp_wfree);
/* Note: Called under soft irq.
* We can call TCP stack right away, unless socket is owned by user.