fou: remove sparse errors
authorEric Dumazet <edumazet@google.com>
Tue, 31 Aug 2021 03:26:08 +0000 (20:26 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 31 Aug 2021 11:03:33 +0000 (12:03 +0100)
We need to add __rcu qualifier to avoid these errors:

net/ipv4/fou.c:250:18: warning: incorrect type in assignment (different address spaces)
net/ipv4/fou.c:250:18:    expected struct net_offload const **offloads
net/ipv4/fou.c:250:18:    got struct net_offload const [noderef] __rcu **
net/ipv4/fou.c:251:15: error: incompatible types in comparison expression (different address spaces):
net/ipv4/fou.c:251:15:    struct net_offload const [noderef] __rcu *
net/ipv4/fou.c:251:15:    struct net_offload const *
net/ipv4/fou.c:272:18: warning: incorrect type in assignment (different address spaces)
net/ipv4/fou.c:272:18:    expected struct net_offload const **offloads
net/ipv4/fou.c:272:18:    got struct net_offload const [noderef] __rcu **
net/ipv4/fou.c:273:15: error: incompatible types in comparison expression (different address spaces):
net/ipv4/fou.c:273:15:    struct net_offload const [noderef] __rcu *
net/ipv4/fou.c:273:15:    struct net_offload const *
net/ipv4/fou.c:442:18: warning: incorrect type in assignment (different address spaces)
net/ipv4/fou.c:442:18:    expected struct net_offload const **offloads
net/ipv4/fou.c:442:18:    got struct net_offload const [noderef] __rcu **
net/ipv4/fou.c:443:15: error: incompatible types in comparison expression (different address spaces):
net/ipv4/fou.c:443:15:    struct net_offload const [noderef] __rcu *
net/ipv4/fou.c:443:15:    struct net_offload const *
net/ipv4/fou.c:489:18: warning: incorrect type in assignment (different address spaces)
net/ipv4/fou.c:489:18:    expected struct net_offload const **offloads
net/ipv4/fou.c:489:18:    got struct net_offload const [noderef] __rcu **
net/ipv4/fou.c:490:15: error: incompatible types in comparison expression (different address spaces):
net/ipv4/fou.c:490:15:    struct net_offload const [noderef] __rcu *
net/ipv4/fou.c:490:15:    struct net_offload const *
net/ipv4/udp_offload.c:170:26: warning: incorrect type in assignment (different address spaces)
net/ipv4/udp_offload.c:170:26:    expected struct net_offload const **offloads
net/ipv4/udp_offload.c:170:26:    got struct net_offload const [noderef] __rcu **
net/ipv4/udp_offload.c:171:23: error: incompatible types in comparison expression (different address spaces):
net/ipv4/udp_offload.c:171:23:    struct net_offload const [noderef] __rcu *
net/ipv4/udp_offload.c:171:23:    struct net_offload const *

Fixes: efc98d08e1ec ("fou: eliminate IPv4,v6 specific GRO functions")
Fixes: 8bce6d7d0d1e ("udp: Generalize skb_udp_segment")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/fou.c
net/ipv4/udp_offload.c

index e5f69b0..8fcbc62 100644 (file)
@@ -230,8 +230,8 @@ static struct sk_buff *fou_gro_receive(struct sock *sk,
                                       struct list_head *head,
                                       struct sk_buff *skb)
 {
+       const struct net_offload __rcu **offloads;
        u8 proto = fou_from_sock(sk)->protocol;
-       const struct net_offload **offloads;
        const struct net_offload *ops;
        struct sk_buff *pp = NULL;
 
@@ -263,10 +263,10 @@ out_unlock:
 static int fou_gro_complete(struct sock *sk, struct sk_buff *skb,
                            int nhoff)
 {
-       const struct net_offload *ops;
+       const struct net_offload __rcu **offloads;
        u8 proto = fou_from_sock(sk)->protocol;
+       const struct net_offload *ops;
        int err = -ENOSYS;
-       const struct net_offload **offloads;
 
        rcu_read_lock();
        offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads;
@@ -311,7 +311,7 @@ static struct sk_buff *gue_gro_receive(struct sock *sk,
                                       struct list_head *head,
                                       struct sk_buff *skb)
 {
-       const struct net_offload **offloads;
+       const struct net_offload __rcu **offloads;
        const struct net_offload *ops;
        struct sk_buff *pp = NULL;
        struct sk_buff *p;
@@ -457,8 +457,8 @@ out:
 
 static int gue_gro_complete(struct sock *sk, struct sk_buff *skb, int nhoff)
 {
-       const struct net_offload **offloads;
        struct guehdr *guehdr = (struct guehdr *)(skb->data + nhoff);
+       const struct net_offload __rcu **offloads;
        const struct net_offload *ops;
        unsigned int guehlen = 0;
        u8 proto;
index 1380a6b..86d32a1 100644 (file)
@@ -152,8 +152,8 @@ struct sk_buff *skb_udp_tunnel_segment(struct sk_buff *skb,
                                       netdev_features_t features,
                                       bool is_ipv6)
 {
+       const struct net_offload __rcu **offloads;
        __be16 protocol = skb->protocol;
-       const struct net_offload **offloads;
        const struct net_offload *ops;
        struct sk_buff *segs = ERR_PTR(-EINVAL);
        struct sk_buff *(*gso_inner_segment)(struct sk_buff *skb,