Since skb destructor is not used for data deallocating, netlink_skb_set_owner_r() almost completely repeates generic skb_set_owner_r(). Thus, both netlink_skb_set_owner_r() and netlink_skb_destructor() are not required anymore. Signed-off-by: Jan Dakinevich <jan.dakinevich@xxxxxxxxxxxxx> --- net/netlink/af_netlink.c | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 04a3457..b0c2eb2 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -358,21 +358,6 @@ static void netlink_rcv_wake(struct sock *sk) wake_up_interruptible(&nlk->wait); } -static void netlink_skb_destructor(struct sk_buff *skb) -{ - if (skb->sk != NULL) - sock_rfree(skb); -} - -static void netlink_skb_set_owner_r(struct sk_buff *skb, struct sock *sk) -{ - WARN_ON(skb->sk != NULL); - skb->sk = sk; - skb->destructor = netlink_skb_destructor; - atomic_add(skb->truesize, &sk->sk_rmem_alloc); - sk_mem_charge(sk, skb->truesize); -} - static void netlink_sock_destruct(struct sock *sk) { struct netlink_sock *nlk = nlk_sk(sk); @@ -1225,7 +1210,7 @@ int netlink_attachskb(struct sock *sk, struct sk_buff *skb, } return 1; } - netlink_skb_set_owner_r(skb, sk); + skb_set_owner_r(skb, sk); return 0; } @@ -1286,7 +1271,7 @@ static int netlink_unicast_kernel(struct sock *sk, struct sk_buff *skb, ret = -ECONNREFUSED; if (nlk->netlink_rcv != NULL) { ret = skb->len; - netlink_skb_set_owner_r(skb, sk); + skb_set_owner_r(skb, sk); NETLINK_CB(skb).sk = ssk; netlink_deliver_tap_kernel(sk, ssk, skb); nlk->netlink_rcv(skb); @@ -1367,7 +1352,7 @@ static int netlink_broadcast_deliver(struct sock *sk, struct sk_buff *skb) if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf && !test_bit(NETLINK_S_CONGESTED, &nlk->state)) { - netlink_skb_set_owner_r(skb, sk); + skb_set_owner_r(skb, sk); __netlink_sendskb(sk, skb); return atomic_read(&sk->sk_rmem_alloc) > (sk->sk_rcvbuf >> 1); } @@ -2227,7 +2212,7 @@ static int netlink_dump(struct sock *sk) * single netdev. The outcome is MSG_TRUNC error. */ skb_reserve(skb, skb_tailroom(skb) - alloc_size); - netlink_skb_set_owner_r(skb, sk); + skb_set_owner_r(skb, sk); if (nlk->dump_done_errno > 0) { cb->extack = &extack; -- 2.1.4