[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1391012411.28432.55.camel@edumazet-glaptop2.roam.corp.google.com>
Date: Wed, 29 Jan 2014 08:20:11 -0800
From: Eric Dumazet <eric.dumazet@...il.com>
To: Or Gerlitz <ogerlitz@...lanox.com>
Cc: davem@...emloft.net, netdev@...r.kernel.org,
dan.carpenter@...cle.com
Subject: Re: [PATCH net] net/ipv4: Use non-atomic allocation of udp offloads
structure instance
On Wed, 2014-01-29 at 18:08 +0200, Or Gerlitz wrote:
> Since udp_add_offload() can be called from non-sleepable context e.g
> under this call tree from the vxlan driver use case:
>
> vxlan_socket_create() <-- holds the spinlock
> -> vxlan_notify_add_rx_port()
> -> udp_add_offload() <-- schedules
>
> we should allocate the udp_offloads structure in atomic manner.
>
> Fixes: b582ef0 ('net: Add GRO support for UDP encapsulating protocols')
> Reported-by: Dan Carpenter <dan.carpenter@...cle.com>
> Signed-off-by: Or Gerlitz <ogerlitz@...lanox.com>
> ---
> net/ipv4/udp_offload.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c
> index 25f5cee..2ffea6f 100644
> --- a/net/ipv4/udp_offload.c
> +++ b/net/ipv4/udp_offload.c
> @@ -101,7 +101,7 @@ out:
> int udp_add_offload(struct udp_offload *uo)
> {
> struct udp_offload_priv __rcu **head = &udp_offload_base;
> - struct udp_offload_priv *new_offload = kzalloc(sizeof(*new_offload), GFP_KERNEL);
> + struct udp_offload_priv *new_offload = kzalloc(sizeof(*new_offload), GFP_ATOMIC);
>
> if (!new_offload)
> return -ENOMEM;
Could you also fix all the rcu_dereference() calls ?
Try CONFIG_PROVE_RCU=y
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists