From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Dumazet Subject: Re: [PATCH v5 2/2] sock: Move the socket inuse to namespace. Date: Fri, 08 Dec 2017 05:24:49 -0800 Message-ID: <1512739489.25033.26.camel@gmail.com> References: <1512665148-2413-1-git-send-email-xiangxia.m.yue@gmail.com> <1512665148-2413-2-git-send-email-xiangxia.m.yue@gmail.com> <1512667208.25033.13.camel@gmail.com> <1512711658.25033.23.camel@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Cc: David Miller , Cong Wang , Eric Dumazet , Willem de Bruijn , Linux Kernel Network Developers To: Tonghao Zhang Return-path: Received: from mail-pf0-f194.google.com ([209.85.192.194]:43316 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752965AbdLHNYw (ORCPT ); Fri, 8 Dec 2017 08:24:52 -0500 Received: by mail-pf0-f194.google.com with SMTP id e3so7278344pfi.10 for ; Fri, 08 Dec 2017 05:24:52 -0800 (PST) In-Reply-To: Sender: netdev-owner@vger.kernel.org List-ID: On Fri, 2017-12-08 at 19:29 +0800, Tonghao Zhang wrote: > hi all. we can add synchronize_rcu and rcu_barrier in > sock_inuse_exit_net to > ensure there are no outstanding rcu callbacks using this network > namespace. > we will not have to test if net->core.sock_inuse is NULL or not from > sock_inuse_add(). :) > >  static void __net_exit sock_inuse_exit_net(struct net *net) >  { >         free_percpu(net->core.prot_inuse); > + > +       synchronize_rcu(); > +       rcu_barrier(); > + > +       free_percpu(net->core.sock_inuse); >  } Oh well. Do you have any idea of the major problem this would add ? Try the following, before and after your patches : for i in `seq 1 40` do (for j in `seq 1 100` ; do unshare -n /bin/true >/dev/null ; done) &  done wait ( Check commit 8ca712c373a462cfa1b62272870b6c2c74aa83f9 ) This is a complex problem, we wont accept patches that kill network namespaces dismantling performance by adding brute force synchronize_rcu() or rcu_barrier() calls. Why not freeing net->core.sock_inuse right before feeing net itself in net_free() ? You do not have to hijack sock_inuse_exit_net() just because it has a misleading name.