[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1475113378.28155.124.camel@edumazet-glaptop3.roam.corp.google.com>
Date: Wed, 28 Sep 2016 18:42:58 -0700
From: Eric Dumazet <eric.dumazet@...il.com>
To: Paolo Abeni <pabeni@...hat.com>
Cc: netdev@...r.kernel.org, "David S. Miller" <davem@...emloft.net>,
James Morris <jmorris@...ei.org>,
Trond Myklebust <trond.myklebust@...marydata.com>,
Alexander Duyck <aduyck@...antis.com>,
Daniel Borkmann <daniel@...earbox.net>,
Eric Dumazet <edumazet@...gle.com>,
Tom Herbert <tom@...bertland.com>,
Hannes Frederic Sowa <hannes@...essinduktion.org>,
Edward Cree <ecree@...arflare.com>, linux-nfs@...r.kernel.org
Subject: Re: [PATCH net-next v3 2/3] udp: implement memory accounting helpers
On Wed, 2016-09-28 at 12:52 +0200, Paolo Abeni wrote:
> +static void udp_rmem_release(struct sock *sk, int partial)
> +{
> + struct udp_sock *up = udp_sk(sk);
> + int fwd, amt;
> +
> + if (partial && !udp_under_memory_pressure(sk))
> + return;
> +
> + /* we can have concurrent release; if we catch any conflict
> + * we let only one of them do the work
> + */
> + if (atomic_dec_if_positive(&up->can_reclaim) < 0)
> + return;
> +
> + fwd = __udp_forward(up, atomic_read(&sk->sk_rmem_alloc));
> + if (fwd < SK_MEM_QUANTUM + partial) {
> + atomic_inc(&up->can_reclaim);
> + return;
> + }
> +
> + amt = (fwd - partial) & ~(SK_MEM_QUANTUM - 1);
> + atomic_sub(amt, &up->mem_allocated);
> + atomic_inc(&up->can_reclaim);
> +
> + __sk_mem_reduce_allocated(sk, amt >> SK_MEM_QUANTUM_SHIFT);
> + sk->sk_forward_alloc = fwd - amt;
> +}
This is racy... all these atomics make me nervous...
Powered by blists - more mailing lists