From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752636AbdKQS1c (ORCPT ); Fri, 17 Nov 2017 13:27:32 -0500 Received: from mail-he1eur01on0139.outbound.protection.outlook.com ([104.47.0.139]:38944 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752544AbdKQS1X (ORCPT ); Fri, 17 Nov 2017 13:27:23 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ktkhai@virtuozzo.com; Subject: [PATCH RFC 00/25] Replacing net_mutex with rw_semaphore From: Kirill Tkhai To: 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, ktkhai@virtuozzo.com, ebiederm@xmission.com, avagin@virtuozzo.com, gorcunov@virtuozzo.com, eric.dumazet@gmail.com, stephen@networkplumber.org, ktkhai@virtuozzo.com Date: Fri, 17 Nov 2017 21:27:13 +0300 Message-ID: <151094119999.20009.6955267140148739392.stgit@localhost.localdomain> User-Agent: StGit/0.18 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0902CA0006.eurprd09.prod.outlook.com (2603:10a6:3:e5::16) To HE1PR0801MB1337.eurprd08.prod.outlook.com (2603:10a6:3:39::27) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 77eca337-c40d-4865-574b-08d52de8d4e2 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(2017052603199);SRVR:HE1PR0801MB1337; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1337;3:iJf9SlQij+9yp10E0+Fmdl9sWN2rvGxuPBclNd7bo9+ziyeYz7W1FyqjtcDFwsL/8NLuiMhrDAI4jvTXu+LY5mg6fWMo5EjC4dp24Es+38HTSi23kv/0fodufBH8aXY50lif6j/g8rQoPFsYe8y0LvyTX1VxgqwZ2OdwAm/fldm8v+09PgMjeXDeVoOzxjsf08YxegXekzR0RX8tQZSFwvZPRxwSqxoiStnw5ix2b3q8agIABb3yTP8ezsxvAZjR;25:gOrayJjpFUFDPnP9Gz+y23xjIgF/0rw0V9jmKg/9k+HHGv5ADZDZEai1+5ArlaS/rUaQqP8StKfSywuV0oy+WQQr7XC5VUEicMQQrzx/2DdHkeMo82T/IBxbUYCGPnxACJztee/qvz//kiUe6o/Mqe+teU4h2b3w6ciDD72heTLtHaqb9kCg7xgzKvcnPWPVvqflnKG0ycya2rXH000qSUA27lha7wj0iBGX9dBfM+c1LpKq8XaqG/B4C2OfeCq0Ug/AyxZCGliBHMbe7hWuW18KFapoGI33OYCwIzzco83tSSgBvWvTO4dDYEUTiDeo0UUVQdgLbimEPExoWWh1wA==;31:YdU/stgwGHcAxX6cFGYYitIPeVQ4gkVCneOO86VIjKmXmfvqO9aoS/tw6D3ljyXZErmo42A54RVZDmtsL3m/IEpQZpP4SpDdRDnbV6uJMKwfomBqq6GQG3kRjfsMfLTKNVbiIvS/pcAi2Mmx6WUnIb7gX7yDuej5cOz/B2AnGsbGh1bUtPR+2BTCCQZJEldz2s84rMctskmvPtwrr/D9LuOZHA6yI7+UbWFG8Ow2yP0= X-MS-TrafficTypeDiagnostic: HE1PR0801MB1337: X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1337;20:wq9HkLdsC8FRjSd8V/i78ZyVfsGrN6NJtonWIXqlirbTNID08bPS4DTrje0clcISC9bbSddBMVJzYp0y3z+hrH9tCfpPG0tAc5zeyQ2DHUZRmqkZHg+HDS3jKHMer02u/CMkvTm5zQVoZSqY1O5R3DbcAC6+uFwuIM6XOTg85rrEGrV/4uLzggvD4xmiyuxk7eFZ7FGs7be/ICYg9gqef9nrjT2gqgwHsjIyMub2e+TloP8sGYlCqUiWsdF8n50XV7SA9t3ELv2rOM5T5dmjLQOv71ocHJWOvS9ONyoa3a5ibG9q0axy5mDGXURp6qRQSv91Y87QqNM5/hk4eavOer6Jw5Tg0nZN5za6QiyXfmI8CR2C+zhTzF4LWiIlQhD873H7l3y8CXaXdrjeHVSikUtMsS/0YYKkQKdNrWAuclk=;4:FGtQPKbUauNr6w37YSsedn/QicoiwQWkTo1fu6scEOZvJpJ4wrfjT4HaCryRfYHFtv35ArSW2s0xT30mM+RaJbGew1wcoqHpuJ3EvNCsQyknqqIh+Ert/+0jRPjlBUqX6oV+MpPPPLCO5MHkKP9E854G2dzSPF/jFu9ODQESRGubdRfivElGm0WBISURK3trf0aec6sGylsvX14YlzjbeovoVQxR9q+alOf8h0hDx3zWYYQUJyqV16FlY2BViiyC27RcNE96lLM1cgJbgKfPpw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(10201501046)(3231022)(93006095)(93001095)(100000703101)(100105400095)(3002001)(6041248)(20161123555025)(20161123558100)(20161123564025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:HE1PR0801MB1337;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:HE1PR0801MB1337; X-Forefront-PRVS: 049486C505 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6069001)(6009001)(376002)(346002)(189002)(199003)(76104003)(66066001)(50986999)(6666003)(230700001)(8936002)(47776003)(101416001)(8676002)(54356999)(61506002)(81166006)(86362001)(81156014)(6116002)(5660300001)(50466002)(7416002)(3846002)(189998001)(83506002)(23676003)(53936002)(6306002)(9686003)(39060400002)(58126008)(103116003)(55016002)(55236003)(6506006)(305945005)(97736004)(7736002)(33646002)(106356001)(316002)(25786009)(68736007)(16526018)(966005)(478600001)(2906002)(105586002)(921003)(1121003)(217873001);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1337;H:localhost.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA4MDFNQjEzMzc7MjM6ZmlLRXBoeWVkaDlpRzFVZ2IySTlXb3ho?= =?utf-8?B?ZGV1U3hDbXJkZWVabWgrTHB4aGlJbmh5REM4OXpVc1AzdGpacXNJRFJ2WnRm?= =?utf-8?B?eXZtOFBydDlxMW1BM2FGeXhHeGJrV1FOdm9BWkpocnBkTTNXS0VJRG9DUGV0?= =?utf-8?B?MWU3N1Bha3RwK2hHVkFOeUE4ek5DN3FCNjAxcW5ITkc4VjFLNG1pTWpZdVpq?= =?utf-8?B?TmhQWUNyMVJ6eVFRQXM4SWxNRC9Gd0JoZmMyd0NFOFdYdXVaQmU0Y2VHR29P?= =?utf-8?B?OXZtaFliVWZzNTRlLzd3U0NaTjIvYmJvQ2gvMDBpaVRxL09STmJxYkp5REp6?= =?utf-8?B?WldTRmJyWmVaVWZ5U3pqdU9pUFowazR0UGJtYjE5aGdHZHlXWEMvQ3hkM0NJ?= =?utf-8?B?ZXorc1NLLzM2Q3NkOHhEYjc1b2d6UExWSWpZaTIwc3o1TUtPaWo1bWtjVTVG?= =?utf-8?B?Z2RPRGM5YUlNZy83L09NcTRURldYdVFBZ0R0bU9JRWpCWUFVd0NaS1B6UVBj?= =?utf-8?B?a2VHYXdXQUVZQkI4aE4raGV1ejNCdzBhU0dVVlhwaUFVYmxQdS8vOWNWUW9H?= =?utf-8?B?Y1V6NHhtRVZidHNnd2lNcEFUNXJCaEFKRlgyeHlpZC9OZ0pBU1VySUlCWFpW?= =?utf-8?B?dGZGbTNrOEg3U2dHWEhQY082WFlqejg2RHJOQU9ud2tBMWlablU4ZHpndU1H?= =?utf-8?B?WXFFYVo0RUxZcmtSRUF0bFNoRi8vSmFJNGFFaHJMQTFabU1uN2RtRmE1Ungv?= =?utf-8?B?dFpUdUgwMDc4U1hoamQ0SkhnMUxidTlFRjZjWk04S3JVZ1lndHhKRnhzaVFR?= =?utf-8?B?SWE4azFsWG4rMU5EVEZ2bDNkZjdzR0V0Q044ZjZCNlE0TlBpdEI1Z3Z6V2VO?= =?utf-8?B?T3RNS2w0Zk9zRWpKZzZXVjhUMERwaWNCaGVyTk9PeGNPNE9KSDVrVUtPV0dC?= =?utf-8?B?cno1UWNPVHRWd04vbFNQdlhrdCtNb3NVVnZYL0xaYnZ1RzFFai9CSThpa1pt?= =?utf-8?B?dzNjVXJaQnRsMHkveno1V25ZOEJISVdUN3AxaGtvL1ZHNDlNcGU1UlFCSGc3?= =?utf-8?B?bHRUQkhGODY0WUNmUGhGODhhZ0lWM3hXYnFhUFFFSFFKRW55SzVSaGVMZnc2?= =?utf-8?B?NDhSTi9iMWRpd0JmY0JjdGlTSCtXc2pCb0IreUtDaHFOZ0NtU0RHaHhVRXhr?= =?utf-8?B?YVErTEpEOEJRc0NXcEpsai9RMlBHejBtUmE5ZE56RjhQU1RvMFMwOC9xRHNp?= =?utf-8?B?Nk9RQUZ6bmNZbERWckFyLy9OM0tmRnVPOFJudzlsWXhUN2IrckRaOERLZmZl?= =?utf-8?B?S0lvczhZRzhBWlIyaTBPeThSWmRrVGZKZUZzdG5Bb1NsaEUyYUt1YW1WQ1Ru?= =?utf-8?B?YWVUT1hYWTZMNFowTUxqNFVGSlV6MUJocDB6VEpjWmtpNlB6T3BIUFJic2ZQ?= =?utf-8?B?Mkd5Mm1KazZuNDFLNUNLb1AzMWVHUXVZd1NXck10RFJJVnZkdXhjUmlDbk1V?= =?utf-8?B?TTZTTDFIa0VMWjJYeW1BQ1ZwRi9BeEZtVHg3dW4xSFdER1NaUjNPT0NTZ0NK?= =?utf-8?B?c01zelFKbGtPNEgxUEgxSlBQZzBRN0JVZXVzVU9QUk54N216OUZWNEpSRCt1?= =?utf-8?Q?3p3scSiztMV6L0GND95d6F?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1337;6:acthrVLDdmq/CSMvYmJ08jViEbtX0NNEE87CH5wJIw7+KMwDx5SxqOefPIN2feuau+bO47ZbN7QS/CoxIkiMQ3LLalsQVQE37TPT4wbslsDukQUcRwViK84fLvFd2VlX3QxJFPwwmXplJKJTD43YVIZ3GUgCNOZNlI8iutHoKfiCJuOnH0jkVbnz0XFgGq7PRndKD513UarSEb9R7ZUbxCMUgKYloxnogmo2+K44B9BVsJkqB3mBhI0TTb9kXBsleoxVh64E9x8xVOXOOuhzl+PiBUqvtmH7SMzc1Sj3u2D1reSO1d7ziOpKRpnG0SuI1A69ghysG4pJMf+H0igcKyR9z9/rvb7yIzsnI5BGLoI=;5:wZ3xwY7nY1SxFQz2oYX4xvV9fiDrf+wzwny7avYnoNJQPkvELlUCXcXmlW4Zwt8jhyEb10BS+uwxBreMkKjy7nwSC5vKY0L3f4eNdUJSW9LRG+2C1upGF4eTs/0q3CqU3TPzwcPPjvtbf2ruqrlAvuebmxo6IfR1oIO5KECk8N4=;24:DDzuZWl4oWpuQnAnDZDLV0J2ZMmxc+Gl5V3JSa0OsZw45godd2MOBP+iZupBytQYndsQP2hCL9x5uHJmbu9OP437iW48eHPkv0vtET/mqno=;7:K/Nr6E5rK89NsDItWKeth1zZ5nnE8VBZlui+Yh3qemvIbL0mt7JKDUh2XHnWaVgLntE/cGh8CxevmAkipuEqoW4ChcDqPGxNjC+Mtn+DvvJlpfyi+dnizJCfZm11SQyqbKSsrdDLh+rm7VmOwmIIFuUGbdLchfY4yQMqnspc8c5Vd6gLk15O3vPDwqBkeQR+uNqplnHrvRxZkv9JeDZPEcawvBzdUAMC8BQin3+M0zkshXnjKPYwukKXOZi/IcDB SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1337;20:mlq+TAsDAZd6wjjt+3H5M/DWYV+UWQfH4uUIXCW26g8b9QMRkVDgGmoUJ167T5XrL2tq0/kTZTz/CTd9HoP8Wh2d9tbWnEXyRCOMnAgytnLZSC1l5zhMyAyr8SiooQLW3BwR8iCU9lIDARZcBtOIcEM7Wq7A0k092MMDM53NEQo= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Nov 2017 18:27:16.2090 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 77eca337-c40d-4865-574b-08d52de8d4e2 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1337 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, this is continuation of discussion from here: https://lkml.org/lkml/2017/11/14/298 The plan has changed a little bit, so I'd be happy to hear people's comments, before I dived into all 400+ pernet subsys and devices. The patch set adds pernet sys list ahead of subsys and device, and it's used for pernet_operations, which may be executed in parallel with any other pernet_operations methods. Also, some high-priority ops converted (up to registered using postcore_initcall(), and some subsys_initcall()) in order of appearance. The sequence in setup_net() is following: 1)execute all the callbacks from pernet_sys list 2)lock net_mutex 3)execute all the callbacks from pernet_subsys list 4)execute all the callbacks from pernet_device list 5)unlock net_mutex There was not pernet_operations, requiring additional synchronization, yet, but I've bumped in another problem. The problem is that some drivers may be compiled as modules and as kernel-image part. They register pernet_operations from device_initcall() for example. This initcall executes in different time comparing to in-kernel built-in only drivers. Imagine, we have three state driverA, and boolean driverB. driverA registers pernet_subsys from subsys_initcall(). driverB registers pernet_subsys from fs_initcall(). So, here we have two cases: driverA is module driverA is built-in -------------------- ------------------- register driverB ops register driverA ops register driverA ops register driverB ops So, the order is different. When converting driver one-by-one, it's impossible to make the order true for all .config states, because of the above. So, the bisect won't work. And it seems, it's just the same as to convert pernet_operations from all the files in file alphabetical order. What do you think about this? (Note, the patches has no such a problem at the moment, as there are all in-kernel early core drivers). Maybe there are another comments on the code. --- Kirill Tkhai (25): net: Assign net to net_namespace_list in setup_net() net: Cleanup copy_net_ns() net: Introduce net_sem for protection of pernet_list net: Move mutex_unlock() in cleanup_net() up net: Add primitives to update heads of pernet_list sublists net: Add pernet sys and registration functions net: Make sys sublist pernet_operations executed out of net_mutex net: Move proc_net_ns_ops to pernet_sys list net: Move net_ns_ops to pernet_sys list net: Move sysctl_pernet_ops to pernet_sys list net: Move netfilter_net_ops to pernet_sys list net: Move nf_log_net_ops to pernet_sys list net: Move net_inuse_ops to pernet_sys list net: Move net_defaults_ops to pernet_sys list net: Move netlink_net_ops to pernet_sys list net: Move rtnetlink_net_ops to pernet_sys list net: Move audit_net_ops to pernet_sys list net: Move uevent_net_ops to pernet_sys list net: Move proto_net_ops to pernet_sys list net: Move pernet_subsys, registered via net_dev_init(), to pernet_sys list net: Move fib_* pernet_operations, registered via subsys_initcall(), to pernet_sys list net: Move subsys_initcall() registered pernet_operations from net/sched to pernet_sys list net: Move genl_pernet_ops to pernet_sys list net: Move wext_pernet_ops to pernet_sys list net: Move sysctl_core_ops to pernet_sys list fs/proc/proc_net.c | 2 include/linux/rtnetlink.h | 1 include/net/net_namespace.h | 2 kernel/audit.c | 2 lib/kobject_uevent.c | 2 net/core/dev.c | 2 net/core/fib_notifier.c | 2 net/core/fib_rules.c | 2 net/core/net-procfs.c | 4 - net/core/net_namespace.c | 203 +++++++++++++++++++++++++++++++++---------- net/core/rtnetlink.c | 6 + net/core/sock.c | 4 - net/core/sysctl_net_core.c | 2 net/netfilter/core.c | 2 net/netfilter/nf_log.c | 2 net/netlink/af_netlink.c | 2 net/netlink/genetlink.c | 2 net/sched/act_api.c | 2 net/sched/sch_api.c | 2 net/sysctl_net.c | 2 net/wireless/wext-core.c | 2 21 files changed, 183 insertions(+), 67 deletions(-) -- Signed-off-by: Kirill Tkhai