}
 
 static struct sk_buff **fou_gro_receive(struct sk_buff **head,
-                                       struct sk_buff *skb,
-                                       const struct net_offload **offloads)
+                                       struct sk_buff *skb)
 {
        const struct net_offload *ops;
        struct sk_buff **pp = NULL;
        u8 proto = NAPI_GRO_CB(skb)->proto;
+       const struct net_offload **offloads;
 
        rcu_read_lock();
+       offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads;
        ops = rcu_dereference(offloads[proto]);
        if (!ops || !ops->callbacks.gro_receive)
                goto out_unlock;
        return pp;
 }
 
-static int fou_gro_complete(struct sk_buff *skb, int nhoff,
-                           const struct net_offload **offloads)
+static int fou_gro_complete(struct sk_buff *skb, int nhoff)
 {
        const struct net_offload *ops;
        u8 proto = NAPI_GRO_CB(skb)->proto;
        int err = -ENOSYS;
+       const struct net_offload **offloads;
 
        rcu_read_lock();
+       offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads;
        ops = rcu_dereference(offloads[proto]);
        if (WARN_ON(!ops || !ops->callbacks.gro_complete))
                goto out_unlock;
        return err;
 }
 
-static struct sk_buff **fou4_gro_receive(struct sk_buff **head,
-                                        struct sk_buff *skb)
-{
-       return fou_gro_receive(head, skb, inet_offloads);
-}
-
-static int fou4_gro_complete(struct sk_buff *skb, int nhoff)
-{
-       return fou_gro_complete(skb, nhoff, inet_offloads);
-}
-
-static struct sk_buff **fou6_gro_receive(struct sk_buff **head,
-                                        struct sk_buff *skb)
-{
-       return fou_gro_receive(head, skb, inet6_offloads);
-}
-
-static int fou6_gro_complete(struct sk_buff *skb, int nhoff)
-{
-       return fou_gro_complete(skb, nhoff, inet6_offloads);
-}
-
 static int fou_add_to_port_list(struct fou *fou)
 {
        struct fou *fout;
 
        sk->sk_allocation = GFP_ATOMIC;
 
-       switch (cfg->udp_config.family) {
-       case AF_INET:
-               fou->udp_offloads.callbacks.gro_receive = fou4_gro_receive;
-               fou->udp_offloads.callbacks.gro_complete = fou4_gro_complete;
-               break;
-       case AF_INET6:
-               fou->udp_offloads.callbacks.gro_receive = fou6_gro_receive;
-               fou->udp_offloads.callbacks.gro_complete = fou6_gro_complete;
-               break;
-       default:
-               err = -EPFNOSUPPORT;
-               goto error;
-       }
-
+       fou->udp_offloads.callbacks.gro_receive = fou_gro_receive;
+       fou->udp_offloads.callbacks.gro_complete = fou_gro_complete;
        fou->udp_offloads.port = cfg->udp_config.local_udp_port;
        fou->udp_offloads.ipproto = cfg->protocol;