udp: Remove udp_offloads
authorTom Herbert <tom@herbertland.com>
Tue, 5 Apr 2016 15:22:56 +0000 (08:22 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 7 Apr 2016 20:53:30 +0000 (16:53 -0400)
Now that the UDP encapsulation GRO functions have been moved to the UDP
socket we not longer need the udp_offload insfrastructure so removing it.

Signed-off-by: Tom Herbert <tom@herbertland.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netdevice.h
include/net/protocol.h
net/ipv4/udp_offload.c

index cb0d5d09c2e4f86243a7f3ac2acc0d61fe3da1a9..cb4e508b3f3803875c750ae47e605364f4f50ab6 100644 (file)
@@ -2159,23 +2159,6 @@ struct packet_offload {
        struct list_head         list;
 };
 
-struct udp_offload;
-
-struct udp_offload_callbacks {
-       struct sk_buff          **(*gro_receive)(struct sk_buff **head,
-                                                struct sk_buff *skb,
-                                                struct udp_offload *uoff);
-       int                     (*gro_complete)(struct sk_buff *skb,
-                                               int nhoff,
-                                               struct udp_offload *uoff);
-};
-
-struct udp_offload {
-       __be16                   port;
-       u8                       ipproto;
-       struct udp_offload_callbacks callbacks;
-};
-
 /* often modified stats are per-CPU, other are shared (netdev->stats) */
 struct pcpu_sw_netstats {
        u64     rx_packets;
index da689f5432dee2c9e84718abb0cc842305b22a68..bf36ca34af7ad255b9eb821cbed0a70abad993f5 100644 (file)
@@ -107,9 +107,6 @@ int inet_del_offload(const struct net_offload *prot, unsigned char num);
 void inet_register_protosw(struct inet_protosw *p);
 void inet_unregister_protosw(struct inet_protosw *p);
 
-int  udp_add_offload(struct net *net, struct udp_offload *prot);
-void udp_del_offload(struct udp_offload *prot);
-
 #if IS_ENABLED(CONFIG_IPV6)
 int inet6_add_protocol(const struct inet6_protocol *prot, unsigned char num);
 int inet6_del_protocol(const struct inet6_protocol *prot, unsigned char num);
index 65c3fd34b363a9590c2130f7b0c7759a7f709182..6230cf4b0d2daecb300b97bee3599d20ddd3e319 100644 (file)
 #include <net/udp.h>
 #include <net/protocol.h>
 
-static DEFINE_SPINLOCK(udp_offload_lock);
-static struct udp_offload_priv __rcu *udp_offload_base __read_mostly;
-
-#define udp_deref_protected(X) rcu_dereference_protected(X, lockdep_is_held(&udp_offload_lock))
-
-struct udp_offload_priv {
-       struct udp_offload      *offload;
-       possible_net_t  net;
-       struct rcu_head         rcu;
-       struct udp_offload_priv __rcu *next;
-};
-
 static struct sk_buff *__skb_udp_tunnel_segment(struct sk_buff *skb,
        netdev_features_t features,
        struct sk_buff *(*gso_inner_segment)(struct sk_buff *skb,
@@ -254,56 +242,6 @@ out:
        return segs;
 }
 
-int udp_add_offload(struct net *net, struct udp_offload *uo)
-{
-       struct udp_offload_priv *new_offload = kzalloc(sizeof(*new_offload), GFP_ATOMIC);
-
-       if (!new_offload)
-               return -ENOMEM;
-
-       write_pnet(&new_offload->net, net);
-       new_offload->offload = uo;
-
-       spin_lock(&udp_offload_lock);
-       new_offload->next = udp_offload_base;
-       rcu_assign_pointer(udp_offload_base, new_offload);
-       spin_unlock(&udp_offload_lock);
-
-       return 0;
-}
-EXPORT_SYMBOL(udp_add_offload);
-
-static void udp_offload_free_routine(struct rcu_head *head)
-{
-       struct udp_offload_priv *ou_priv = container_of(head, struct udp_offload_priv, rcu);
-       kfree(ou_priv);
-}
-
-void udp_del_offload(struct udp_offload *uo)
-{
-       struct udp_offload_priv __rcu **head = &udp_offload_base;
-       struct udp_offload_priv *uo_priv;
-
-       spin_lock(&udp_offload_lock);
-
-       uo_priv = udp_deref_protected(*head);
-       for (; uo_priv != NULL;
-            uo_priv = udp_deref_protected(*head)) {
-               if (uo_priv->offload == uo) {
-                       rcu_assign_pointer(*head,
-                                          udp_deref_protected(uo_priv->next));
-                       goto unlock;
-               }
-               head = &uo_priv->next;
-       }
-       pr_warn("udp_del_offload: didn't find offload for port %d\n", ntohs(uo->port));
-unlock:
-       spin_unlock(&udp_offload_lock);
-       if (uo_priv)
-               call_rcu(&uo_priv->rcu, udp_offload_free_routine);
-}
-EXPORT_SYMBOL(udp_del_offload);
-
 struct sk_buff **udp_gro_receive(struct sk_buff **head, struct sk_buff *skb,
                                 struct udphdr *uh, udp_lookup_t lookup)
 {
@@ -327,7 +265,6 @@ struct sk_buff **udp_gro_receive(struct sk_buff **head, struct sk_buff *skb,
 
        if (sk && udp_sk(sk)->gro_receive)
                goto unflush;
-
        goto out_unlock;
 
 unflush: