From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: ACJfBoued2VR1blZfaP5AOZAP8owrAUtGVXUuLfWZYzmXetL1LzGRf3kSvvhosUxu1CJ85NDkfcu ARC-Seal: i=1; a=rsa-sha256; t=1516214121; cv=none; d=google.com; s=arc-20160816; b=nucy7+qq1bsgedKKDzYLixTvN7B/PbidYUCGgagOvS1IFHq5lESt/2P/Soxl4HSOR0 fhCed+xzEg/W9H7na4Gb034g7r1FJojR4LbZ7Qa516T0c2a8AlXNlx1hHc8yQZ+UKGyU t48bc2rlfKe6o3PndJCYPcLorQgdMEivh155Hnqr9ylCZfdUOx0Tv4IHGuZgS1yE+WMH oGVFLJgmK9i+daOsHO2Wx5cMZgvi1aHWR7riZeLR9RGDnQob/+PH3mNGyNKSPigfzb4C K/OMZoDxYwWYWRpxvHJIpGja4oowgWD5OV1LieNPBy909xCpg3WYw0xvZdNXv8Biy/O0 uJ7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=spamdiagnosticmetadata:spamdiagnosticoutput:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature:arc-authentication-results; bh=8S/pjHLbS0swHES6d09ttdZV120KHz59mafQ2yiQcd4=; b=SvhScM47bnrZIU507atTgJwF2X8aIA4vcdFbZ5ctIyrBr8ZP/Tf9ckojCxXZCalAg9 E6B2c4ukKozhUvaRmH426L6VCN8dyCxolJEmUkUIiSFxmaXJJE6rIw3SKcAwbfyGR2qA BbuVlF9ZP/65vBzGw21BA7FA/Fy5SR5ch9rdixE7JuVDNvdwadUJoaOW4YFkvghPZA26 3269iFI7zlQKrPeOGOecJ8vn7ug8Tlz2UHGGE+O79lum3XpZlX9//TY0ZMaII0EW7qRj NTMiqtG7rTIAAnN27ZugZKHaqH2BTBTkE50MnU2LMePW9VbHLpx0OFOhrlf3+sV0XVIp JsNg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector1 header.b=HB7vZjV5; spf=pass (google.com: domain of avagin@virtuozzo.com designates 40.107.5.130 as permitted sender) smtp.mailfrom=avagin@virtuozzo.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector1 header.b=HB7vZjV5; spf=pass (google.com: domain of avagin@virtuozzo.com designates 40.107.5.130 as permitted sender) smtp.mailfrom=avagin@virtuozzo.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=avagin@virtuozzo.com; Date: Wed, 17 Jan 2018 10:34:57 -0800 From: Andrei Vagin To: Kirill Tkhai Cc: davem@davemloft.net, vyasevic@redhat.com, kstewart@linuxfoundation.org, pombredanne@nexb.com, vyasevich@gmail.com, mark.rutland@arm.com, gregkh@linuxfoundation.org, adobriyan@gmail.com, fw@strlen.de, nicolas.dichtel@6wind.com, xiyou.wangcong@gmail.com, roman.kapl@sysgo.com, paul@paul-moore.com, dsahern@gmail.com, daniel@iogearbox.net, lucien.xin@gmail.com, mschiffer@universe-factory.net, rshearma@brocade.com, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, ebiederm@xmission.com, gorcunov@virtuozzo.com, eric.dumazet@gmail.com, stephen@networkplumber.org Subject: Re: [PATCH v2 05/31] net: Allow pernet_operations to be executed in parallel Message-ID: <20180117183455.GA3189@outlook.office365.com> References: <151120175301.3159.9577108443167812854.stgit@localhost.localdomain> <151120277590.3159.12461615068657469111.stgit@localhost.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline In-Reply-To: <151120277590.3159.12461615068657469111.stgit@localhost.localdomain> User-Agent: Mutt/1.9.1 (2017-09-22) X-Originating-IP: [65.152.152.74] X-ClientProxiedBy: MWHPR02CA0030.namprd02.prod.outlook.com (2603:10b6:301:60::19) To AM4PR08MB0739.eurprd08.prod.outlook.com (2a01:111:e400:59ed::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9c1ef559-680f-4b77-ac81-08d55dd90d69 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(5600026)(4604075)(2017052603307)(7153060)(7193020);SRVR:AM4PR08MB0739; X-Microsoft-Exchange-Diagnostics: 1;AM4PR08MB0739;3:zQIQlx1kuQbnbgekMGMm9T85xSaNfrHhFJgNc1A8ScI38/F/V/x9fXYpbcE1/3W/96Wk7asknpx7aTKWG2MmKnKZHkdSl8dBekdisBUwwDWBRS9loy1wQNwlALez7GdHdf3JuOBm7gUK3khYbMvpCMrwebUfIZVbRo2zfqX2KSAQUPgQl4vE71XqoWhQfhKT/g5vMqRMyppuxamCeSZ8E3Q3MsNW8vs/mlad/2mqomwjucd1ANyzxPDHVsLiZsKM;25:asqYTxgfat94OezinH0bfcZjLblfXH6aZ1lSKs8U6V/SaNSE3Op4Srv8Voze8GUbKbzxKq6O25fgqRQTTD74e6wOBCwXfOHid7Jy0saSYZJz6TJs8chDphqSYC1bsutYacxfCQ4paQ6seR1hK3ueq8mD2Hqdewh1FgHwv+FpUXXRJE1oRNiAAghE/yCk/+NmnXOEQwaFi9PA6BDKAWbBqsvr1atUmcGmmrxKvVQqU1MigjSqAQgSggCwczyOfCaANRsmz0fS0tg4lKvOu1WM/ioIIy5BMiqclKpUg2Hd2iLtFLQCuKx0ekeQ6nJAKZI8giR8wPfuCr8HBvLiB4YvAA==;31:ztGw4bn492LuTU8TD0XaO5IFP46pmu+LLKw6aQTRMSLhHWfx1FqiXbv2FZTduPBcgYDM1TffmZv8n5lCMma05i43nRA9xnMclRHTdiMjMz6vhDtbECh6w8k5utlOCORQMOvB1rbknW3v1LmIH0TIK3DnG8KSUX1ZNCZVKySM3HC2l/K3qZmY6ihvTrKQg4S/GaZ2VAhd206vq34CFBZsaQtwGV49MBHnxXcGrHVvC1o= X-MS-TrafficTypeDiagnostic: AM4PR08MB0739: X-Microsoft-Exchange-Diagnostics: 1;AM4PR08MB0739;20:XP4xKJ5BPMgPH251Vvg6+u612nfv41bHr7wioF9fmNzxwfcUC/FoudnP84JrCUadG+Wb+VRaM9DqiWkxDkqsdC/jQJvRzy2/vZwWN7bVtP9ug1QC07sG5Cp524MqYTtuah78HdcaBYZU2kJt5yuP4LQ1JzHOmpqkfiELTCwU2l7Nro3JK+sxFy5pNoJi9Z8AugetKTaJZMrTYaZmrGkPim+cqilq3WQFqNrGsazPAVjLl19Usjhqy+DAU/J90F7hDUrU2MiNPKSw8jxX+34/yz492HpVWUMBzhcHx3S9+JTUq+sl/YUNao4c4+WMUU7mJa1xfOLwX6zBg0+d78uyCsWuLuNgMXOHFVx8KHktT3EHvl0bD5IJhKVY0+zzL8JXIOjQXcy5l6qrup09AiR9cD8v3JhWZgGwy47oYp09cco=;4:X+nKzdazNXbNaOzrlCHKc+ATRFhKkAwaqQ8gFZe13nP0YscXNjuHpXyAmdzMZIxNB2Lt76vz5aBZb9+OlDkaMDlO8TTbQMls8e8hSJSBYE5fKAkETi6IAYFDx6NXfI7+C87iX7EEaJ1bYOukCPdkBfmrVm1eZQ7RwQaj7rkpl5bS7p/wc9ZzPhEPujLSOD3LvNEEQInlzLDWKoKNTmiMS4q+HZ12r+RNTvEojGPG58XDxaj43hwZtR2Rf5lhvW/EEAIpZBx9XaCg83/qXbVI0g== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040470)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3231023)(2400048)(944501161)(3002001)(6041268)(20161123560045)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(6072148)(201708071742011);SRVR:AM4PR08MB0739;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:AM4PR08MB0739; X-Forefront-PRVS: 0555EC8317 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(376002)(396003)(39850400004)(366004)(346002)(39380400002)(24454002)(189003)(199004)(4326008)(6666003)(6636002)(7736002)(305945005)(2906002)(2950100002)(53936002)(66066001)(1076002)(6246003)(9686003)(26005)(86362001)(53416004)(106356001)(55016002)(25786009)(5660300001)(50466002)(8936002)(316002)(7416002)(47776003)(68736007)(8676002)(39060400002)(6862004)(16526018)(52116002)(81156014)(58126008)(81166006)(16586007)(83506002)(105586002)(69596002)(478600001)(33656002)(76176011)(386003)(229853002)(6506007)(7696005)(6116002)(59450400001)(23686003)(3846002)(97736004)(18370500001);DIR:OUT;SFP:1102;SCL:1;SRVR:AM4PR08MB0739;H:outlook.office365.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?koi8-r?Q?1;AM4PR08MB0739;23:RYis7u/8Ov2HqV30bfBP5nQS5+0oq1w62Xtp2HMIY7s?= =?koi8-r?Q?OjfNmhVlYI8wES5lbFtKt5tRrT2DKYIeO4bp94BgyHWI79gKwezbXoVpubRQ6l?= =?koi8-r?Q?hwddUZ/Sp1n5vp8YjlCmG93xAlmKpI6QEsaqd8qGyKh7gTaXmEHzHCIoa6BO9m?= =?koi8-r?Q?2CcFsXjAxB2G6mwPfqhEcHIYyFBx4lLXkZfuEaku09KXKnHOjuVTiD81mq44lG?= =?koi8-r?Q?Avj75iFy+wk8G1bP3aQDp2DZHZWS3AiDZFB3RwzqLVAje7G83cSPI4PCwVW+m+?= =?koi8-r?Q?fu2FwhNIFg4QZpt12DiUe/XuYH0T9KJ0nesolzoNxeff2BlyHX2oB12LFBnkYd?= =?koi8-r?Q?htBvRF1lFPBhNgbZuI4AiNo3Oji16C+gNT0GdEJ5klRVVgdaFZCGpwdUGtHzJJ?= =?koi8-r?Q?RMx4xTr6bLcjaC/AJAzSxUWX297d+nZcRzjN7HbE5V9xLqLObamxp71Rf0qdIx?= =?koi8-r?Q?VqgT2o3+feLxq6+WWO/xqnrAyg8IcNsy14mEgsDCbYH9jlOgZcfR2sD3/kRbAU?= =?koi8-r?Q?dKifHa86JkjbB78IyJaN6ivzlzK/8MeBiLo3ASLHkifH+4uEzqQi9aweTR+kGq?= =?koi8-r?Q?0TkZZG0pjnpdkoK33pP/Dkz22dXlqzSMGZISEDqHu3ALDionPbyvT4C8qCSRNa?= =?koi8-r?Q?XCV5DvOL9D/FzkAtx0bvxO8IXNi8yvO8wOsHLv9J/jiQcwhu70/cQOosRjjiIW?= =?koi8-r?Q?+1+P3DRNADdtOVTqBfIsKdLMO/scz07zOHpz0nAP5//noESq1g9TjJhUYUU4Hb?= =?koi8-r?Q?8C392+vAVdEWS1DTV15s5pDXzMo1YdNcI5yGsiPf60VOR/uv23Ac1ryuKAxdA5?= =?koi8-r?Q?PXNyFfWr5Wrbl4hudhnRhcl0ukpb1nc7fFZcA9xdfJQawYxTbXa3hcD2A2bXza?= =?koi8-r?Q?lNppcqjVxVfoPZ/mR8550478P4nj2RoTxqCzLcc9UtIWP/oz8p+B3AJe/oR8Q5?= =?koi8-r?Q?e/TNBH+XYuBvZlPlU1onhW7C4Hac8YaZyB0uQDoXEDb1Caj7Y8mZiH16C31NHQ?= =?koi8-r?Q?ZnD3M/Ic2nZBF0yXDkF0GrFvUAxCZriIF5RWv3s1MC/Itr707aJaHdyIcjEw0k?= =?koi8-r?Q?8WKS63dD/HiY+paYyDhtIHWbQmKWbPlaZpO5/9jutcAh89+8h49gluliuORGsj?= =?koi8-r?Q?e3lGT/5f5qiywEiyJ+VodOn5G8T/ZMi5hwavK7Ehw34z6LY0hvmtp8ValIeoHc?= =?koi8-r?Q?i5RKcoHOxd2/MO9PFejQqF+o/Bq42kFtCjGYPMrh+rc9UQlW7VQf32YQOF3l3b?= =?koi8-r?Q?96iLXnjS77h8qO1DWc2iNt1JYfo70Z4sEwoEwECYiKIsgRIhuTYGDVmj3H7QXl?= =?koi8-r?Q?yZS29AaYPwcRK9j/sd17g=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM4PR08MB0739;6:26QdVeCZGXNdfVBQXnDzrTcDj9BPPEPZDEkLR43wgalcmtvVSv+Xd0RloNuC87RowHaCRs7+ssC0+WpKyplJoPtQaT841vVVIlR2Sno+mJS3rMs7Vq9ziMpg/4vGWRRTCP6xZXBPwZC/7UgjGM8IF2ZqPbca5cRbUuW20kcddhKBJ8UnZjus0TKbg69k2YEaxjbXrawPb1jeFJzXoNOx82exA1zvGwUIpnvn9AEzRyEnUTfq+6poF4IrbyakC6NQtNTrj3QuTmpswX7x2TccIb0BQ+2jAS+Fn52R6pLZqCESw6KAxVcfgpyr3PztbkKrNftyhLKLseEnnFqYyWO8mNIZN6IEHIYslhlROf1A9Mk=;5:qt/hz3Rg338CB+BtfNkPAMJazYQ04FmprxPn9CgZdzH3s9dudCF3GIyqs05YrvhqZ+OLROPMX+q/D8UG9PTUSdnHfTIlnxf7kqpN2LBmQ790ANdy64dUz04YBGaAeWJO8q4eCsGlbwwETP50oRWNKjgA75/ykucFRpupMMoCdoM=;24:HcUQjJgPdPkJlaji9nrjlNyvUxyJVXgRDjO8+Jz3jWSCdiU2l1kQd2TkM1MLE4Ok8sEfjgIWnYk+sLwL51p7aSbFpt6O8H+QWI4oSSSYXlQ=;7:GVWZ1YxSFw9rIvxjb2fyhHJqcAMYcCVK2nm3V37sZRru//qjWNcuQWw14mBLdNi/2e80l6hIhg4PjGW7YOhjIGbwr3rviwtKcLJ9TlddaNmwPfU3JTCDbtzvTI5SvUhz7KZYMD8EAwPK5pR0Rmc9db1qvxDzly1bpiONZ5s2bivTcSPyiOkl0749qqwHu1crPbpBpvROYKduEFTdEfy+8jQ0BNjMX7CPCJgErq+Z8t7K0kDP4kIZ3nt+NxJd6ADo SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM4PR08MB0739;20:KTYYtGkXJn4q+b7HgLnC8vSmgOeqXL+bQNKbP7M/45MCr0oOJ6zrpIorblXsGYVovX6uPfps3uTc6wcCGumoAr7o73YgaMDgeQ25v0gTlU5XxAYGciip8kpsRlwNu1+hKRRB0auKsR2XP1JUdemdDVHzi+8jAAxCS+IkhPkJ3Tc= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2018 18:35:10.0075 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9c1ef559-680f-4b77-ac81-08d55dd90d69 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR08MB0739 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1584610972271332451?= X-GMAIL-MSGID: =?utf-8?q?1589865738346025595?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: On Mon, Nov 20, 2017 at 09:32:55PM +0300, Kirill Tkhai wrote: > This adds new pernet_operations::async flag to indicate operations, > which ->init(), ->exit() and ->exit_batch() methods are allowed > to be executed in parallel with the methods of any other pernet_operations. > > When there are only asynchronous pernet_operations in the system, > net_mutex won't be taken for a net construction and destruction. > > Also, remove BUG_ON(mutex_is_locked()) from net_assign_generic() > without replacing with the equivalent net_sem check, as there is > one more lockdep assert below. > > Suggested-by: Eric W. Biederman > Signed-off-by: Kirill Tkhai > --- > include/net/net_namespace.h | 6 ++++++ > net/core/net_namespace.c | 29 +++++++++++++++++++---------- > 2 files changed, 25 insertions(+), 10 deletions(-) > > diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h > index 10f99dafd5ac..db978c4755f7 100644 > --- a/include/net/net_namespace.h > +++ b/include/net/net_namespace.h > @@ -303,6 +303,12 @@ struct pernet_operations { > void (*exit_batch)(struct list_head *net_exit_list); > unsigned int *id; > size_t size; > + /* > + * Indicates above methods are allowe to be executed in parallel > + * with methods of any other pernet_operations, i.e. they are not > + * need synchronization via net_mutex. > + */ > + bool async; > }; > > /* > diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c > index c4f7452906bb..550c766f73aa 100644 > --- a/net/core/net_namespace.c > +++ b/net/core/net_namespace.c > @@ -41,8 +41,9 @@ struct net init_net = { > EXPORT_SYMBOL(init_net); > > static bool init_net_initialized; > +static unsigned nr_sync_pernet_ops; > /* > - * net_sem: protects: pernet_list, net_generic_ids, > + * net_sem: protects: pernet_list, net_generic_ids, nr_sync_pernet_ops, > * init_net_initialized and first_device pointer. > */ > DECLARE_RWSEM(net_sem); > @@ -70,11 +71,10 @@ static int net_assign_generic(struct net *net, unsigned int id, void *data) > { > struct net_generic *ng, *old_ng; > > - BUG_ON(!mutex_is_locked(&net_mutex)); > BUG_ON(id < MIN_PERNET_OPS_ID); > > old_ng = rcu_dereference_protected(net->gen, > - lockdep_is_held(&net_mutex)); > + lockdep_is_held(&net_sem)); > if (old_ng->s.len > id) { > old_ng->ptr[id] = data; > return 0; > @@ -419,11 +419,14 @@ struct net *copy_net_ns(unsigned long flags, > rv = down_read_killable(&net_sem); > if (rv < 0) > goto put_userns; > - rv = mutex_lock_killable(&net_mutex); > - if (rv < 0) > - goto up_read; > + if (nr_sync_pernet_ops) { > + rv = mutex_lock_killable(&net_mutex); > + if (rv < 0) > + goto up_read; > + } > rv = setup_net(net, user_ns); > - mutex_unlock(&net_mutex); > + if (nr_sync_pernet_ops) > + mutex_unlock(&net_mutex); > up_read: > up_read(&net_sem); > if (rv < 0) { > @@ -453,7 +456,8 @@ static void cleanup_net(struct work_struct *work) > spin_unlock_irq(&cleanup_list_lock); > > down_read(&net_sem); > - mutex_lock(&net_mutex); > + if (nr_sync_pernet_ops) > + mutex_lock(&net_mutex); > > /* Don't let anyone else find us. */ > rtnl_lock(); > @@ -489,7 +493,8 @@ static void cleanup_net(struct work_struct *work) > list_for_each_entry_reverse(ops, &pernet_list, list) > ops_exit_list(ops, &net_exit_list); > > - mutex_unlock(&net_mutex); > + if (nr_sync_pernet_ops) > + mutex_unlock(&net_mutex); > > /* Free the net generic variables */ > list_for_each_entry_reverse(ops, &pernet_list, list) > @@ -961,6 +966,9 @@ static int register_pernet_operations(struct list_head *list, > rcu_barrier(); > if (ops->id) > ida_remove(&net_generic_ids, *ops->id); > + } else if (!ops->async) { > + pr_info_once("Pernet operations %ps are sync.\n", ops); As far as I understand, we have this sync mode for backward compatibility with non-upstream modules, don't we? If the answer is yes, it may be better to add WARN_ONCE here? > + nr_sync_pernet_ops++; > } > > return error; > @@ -968,7 +976,8 @@ static int register_pernet_operations(struct list_head *list, > > static void unregister_pernet_operations(struct pernet_operations *ops) > { > - > + if (!ops->async) > + BUG_ON(nr_sync_pernet_ops-- == 0); > __unregister_pernet_operations(ops); > rcu_barrier(); > if (ops->id) >