bpf, sockmap: Fix sk->sk_forward_alloc warn_on in sk_stream_kill_queues
[linux-2.6-microblaze.git] / net / core / sock_map.c
index 81d4b47..9f08ccf 100644 (file)
@@ -1561,6 +1561,29 @@ void sock_map_unhash(struct sock *sk)
 }
 EXPORT_SYMBOL_GPL(sock_map_unhash);
 
+void sock_map_destroy(struct sock *sk)
+{
+       void (*saved_destroy)(struct sock *sk);
+       struct sk_psock *psock;
+
+       rcu_read_lock();
+       psock = sk_psock_get(sk);
+       if (unlikely(!psock)) {
+               rcu_read_unlock();
+               if (sk->sk_prot->destroy)
+                       sk->sk_prot->destroy(sk);
+               return;
+       }
+
+       saved_destroy = psock->saved_destroy;
+       sock_map_remove_links(sk, psock);
+       rcu_read_unlock();
+       sk_psock_stop(psock, true);
+       sk_psock_put(sk, psock);
+       saved_destroy(sk);
+}
+EXPORT_SYMBOL_GPL(sock_map_destroy);
+
 void sock_map_close(struct sock *sk, long timeout)
 {
        void (*saved_close)(struct sock *sk, long timeout);