From patchwork Wed May 31 09:57:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13261852 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id CE8FFC77B73 for ; Wed, 31 May 2023 09:58:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5126E6B0072; Wed, 31 May 2023 05:58:24 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4C30A8E0002; Wed, 31 May 2023 05:58:24 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 33BB46B0075; Wed, 31 May 2023 05:58:24 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 26D5B6B0072 for ; Wed, 31 May 2023 05:58:24 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id F11D21C72C5 for ; Wed, 31 May 2023 09:58:23 +0000 (UTC) X-FDA: 80850100086.09.7B6D6A8 Received: from out-11.mta0.migadu.com (out-11.mta0.migadu.com [91.218.175.11]) by imf25.hostedemail.com (Postfix) with ESMTP id 297D6A0014 for ; Wed, 31 May 2023 09:58:20 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=sxRHWVlL; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf25.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.11 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1685527101; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=lnzxWyBrjsXVofp7h2XNt51t4g+fsU+gJXs/ea1cFR8=; b=q4XWrzEum9+ZTZC5hV96/aqxsYsxs9RrVoYH15ra9IT8q6c5qTclW6n4HrTSVsAgJpRJB/ RzTRUz/2tEKGH6M4JwXMGWxbzJkX3ZcmpaW9uEoBWhr/DmRyDaOiHIr4JvZFdeJhLYr5AH KxdVzuHfugrd+4f7PSB1An0Ms9Zy0jw= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=sxRHWVlL; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf25.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.11 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1685527101; a=rsa-sha256; cv=none; b=KmSeh7XiQkM+cEP51SdGrLXCIy2ViGdsSISsR63yh+/9kxcel7OWDHFKFh/bbkwemNCURw F+r1ScTAnC4hQKvYP4WTGJMraILT9mec9DBN9pKiIFbEgBHcZNja/AX8c8G3869zlyVTj7 PbYR5Frw9nXMuehnIVD4ED52Mif7Otc= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1685527099; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=lnzxWyBrjsXVofp7h2XNt51t4g+fsU+gJXs/ea1cFR8=; b=sxRHWVlLu+rreVBFxwIJMsPglUs7BP6JtCkUt3t8Jj4/N9ua1Q2/SjbYdZXtKFG7R9C7pt 2t9WN+oDIJxf1PqTSf920IDKgkWQRBFGYeyKYjIsrWLrD8tL2dxfTRirVmdU/LhybNhnyd QK69UVOEAmxZHnZIIPi+vT1ngAY56cU= From: Qi Zheng To: akpm@linux-foundation.org, tkhai@ya.ru, roman.gushchin@linux.dev, vbabka@suse.cz, viro@zeniv.linux.org.uk, brauner@kernel.org, djwong@kernel.org, hughd@google.com, paulmck@kernel.org, muchun.song@linux.dev Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, Qi Zheng Subject: [PATCH 1/8] mm: vmscan: move shrinker_debugfs_remove() before synchronize_srcu() Date: Wed, 31 May 2023 09:57:35 +0000 Message-Id: <20230531095742.2480623-2-qi.zheng@linux.dev> In-Reply-To: <20230531095742.2480623-1-qi.zheng@linux.dev> References: <20230531095742.2480623-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: 297D6A0014 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: a4wmc1tf7xyaa1endqqbr9ogrp84pd5z X-HE-Tag: 1685527100-480301 X-HE-Meta: U2FsdGVkX18kJY+/UMRikFUIicF5tJ2LQnYlthKAusWQvk/qBpShapp5zz3H5+ryE6HbvxaLa0Imu35cX6+Cq3dxqMjlS/vCuQ2tapBGvcfVRV3yo2cvlM7YMZzJWLXsM8L+M5SFrokpP2Iv7TLAvZfQALxoUqInOtw2xqvOHx9qV+rbPlt1EI7Nr7LL1ImT5BdQOFfJ8ZmG5nmgBkPD2/aj0H3Me6xFzH6yVcijAXRsN5UsMDxR5WOK470WxlFBPDverP4ZAMQY3Zx80pt3RQ06KsZjHUvNRpkXlhZVjtzF0AQHGgxVZLzTv63ZF1bLTjYOdScQqelOR+tNYx2Rbpxd2p27nhAFoFhJSAeKocanX5ooHsbujNhKKY+mD3VghW1jEL5RCvXHQObhnf2GBNCzbLlH4WoaLI17vS2Tl0YFzkEodXAkcZKueUlKod4Gb/ZM0O30f3awIUU5frlGkBnrbdACyHodqsU+ZmC2CR2L6slqLN2zdfgIgYFn9a40Qd9pA2DR64lnLjKSPdB7NOE1lFtsI/XQs6HoE7FNEpDmrcmd8P47M8gr9juZrH99Cq3jteYEUM/EIZeCyxkU98kHTb664/QMSGxeaRLHSf5BiAGAnKv4yXkAnFQ0fduwiOay79s7zWgcEfRejpMtI+jwynA9Cs4wswJvwnzV2dwFyWf1s8S+WlK/XWjLh8CBm0aCQudQOwAeLDGj19QlKE7kCL0gpRUqKo2QgQYaehCXpXXlu9bth3uKghZ/ogBg1NMR+N44WXpZwhNKc5lHjDp/L3KBUc7wMVGEBUs1j37+lZOYIJT6hm3CRgfU9/UwB1kv/9eLieuLH5+dvESSjeav68Fcc5/laeQdrYqVMo4qpwN7ZDjbXii2xIAJxDmmpLnNcB2mhQCIboRdALN4NeICdy8MTDS4arS7RqQ8LgS8Btk8yLmmGYy8Q7A1/wiRF6z6+RN1caAhKpzxxdO BIYiCZY8 YtNgSpYRqUJUJFNiaR6i4Css9joYydCHVJlTaZSinQGmI/J+0EnZxS9FIMbe+B4Fohc6Shw1WHJcz9peXs35FyP3y0JdCjgPh5DnFGSKyTw0GWEe2jD15P8p0bjKvWc7wWMYDQCsZAduvflM25zdT3NzcWHRLH9pSnD73Z30OKXEPjBUMjvEs/Qi6Lw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Qi Zheng The debugfs_remove_recursive() will wait for debugfs_file_put() to return, so there is no need to put it after synchronize_srcu() to wait for the rcu read-side critical section to exit. Just move it before synchronize_srcu(), which is also convenient to put the heavy synchronize_srcu() in the delayed work later. Signed-off-by: Qi Zheng --- mm/vmscan.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index eeca83e28c9b..a773e97e152e 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -818,11 +818,11 @@ void unregister_shrinker(struct shrinker *shrinker) debugfs_entry = shrinker_debugfs_detach(shrinker, &debugfs_id); mutex_unlock(&shrinker_mutex); + shrinker_debugfs_remove(debugfs_entry, debugfs_id); + atomic_inc(&shrinker_srcu_generation); synchronize_srcu(&shrinker_srcu); - shrinker_debugfs_remove(debugfs_entry, debugfs_id); - kfree(shrinker->nr_deferred); shrinker->nr_deferred = NULL; } From patchwork Wed May 31 09:57:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13261853 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E828DC77B73 for ; Wed, 31 May 2023 09:58:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 698E18E0003; Wed, 31 May 2023 05:58:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 64A8D8E0002; Wed, 31 May 2023 05:58:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 510D08E0003; Wed, 31 May 2023 05:58:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 435C78E0002 for ; Wed, 31 May 2023 05:58:27 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 0D9E9C0311 for ; Wed, 31 May 2023 09:58:27 +0000 (UTC) X-FDA: 80850100254.14.568EC90 Received: from out-7.mta0.migadu.com (out-7.mta0.migadu.com [91.218.175.7]) by imf07.hostedemail.com (Postfix) with ESMTP id 4F8344000A for ; Wed, 31 May 2023 09:58:25 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=ZihWgnR2; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf07.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.7 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1685527105; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ZzyzkXd70pYEdWJhGutN+U1hmZmD/p5d/wpcM6Ajy+8=; b=3uyajgJByU4E3Ny+d/dWvOOoEQ3HyusH0gBkcUADUU98HTAN8v71cpdR/1mORc5fUFbDZT 2Qvd0znbD8zBalPbj/+Pu+EZgBuO3y0D9BYKVUSutFDRK2m0jQurT+xBoSVMXBF2N9XUOT 1qKCB0Wikhfbi6GrUBNQX5J89iE5Cu0= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=ZihWgnR2; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf07.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.7 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1685527105; a=rsa-sha256; cv=none; b=5m0V/lsCJ1Bi2UHH5owO7tEx3M8gR4RtSKdIvNSaL+xlk9Sa4s5Hxh8ol2lADMAAuGaWCa XGGF0mesP0WVIHEuJ9/KjQg0XWeUzp54FZJ3gBxyvJhZa3C+e1gWIvKbfDnuBCARbJwkyS pj1PQjKT+WHIIsRCnHEPZsHnxu69rV0= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1685527104; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZzyzkXd70pYEdWJhGutN+U1hmZmD/p5d/wpcM6Ajy+8=; b=ZihWgnR2scrQOnB2k5nDPiR/oFSAGcE5oxTl8DJZlC6c35SkDHP860/TT0nEoqYq/lrcq1 d6CKRaCpb2dkgODgBX/qkpML3eCN0n5h1kziLNHv4ErGYZOVxBG6L8XG40g2Y8QxSO+u0s Pr9f8hmxkoCyCfWi4RAZ5pmhxQ/yWCA= From: Qi Zheng To: akpm@linux-foundation.org, tkhai@ya.ru, roman.gushchin@linux.dev, vbabka@suse.cz, viro@zeniv.linux.org.uk, brauner@kernel.org, djwong@kernel.org, hughd@google.com, paulmck@kernel.org, muchun.song@linux.dev Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, Qi Zheng Subject: [PATCH 2/8] mm: vmscan: split unregister_shrinker() Date: Wed, 31 May 2023 09:57:36 +0000 Message-Id: <20230531095742.2480623-3-qi.zheng@linux.dev> In-Reply-To: <20230531095742.2480623-1-qi.zheng@linux.dev> References: <20230531095742.2480623-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: 4F8344000A X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: nsu3k9ri9osqucawfayb77crcprw7zxb X-HE-Tag: 1685527105-584895 X-HE-Meta: U2FsdGVkX19IpETPvg1xTvdE2wH7FBu6TXODVkC9cC/03SMnOYYBfOXPCMBUGIx0MfKBytwFw66OYgWUhsUB+7BNMTT72+PEXHDZd9rpWT8xBl8kmFMtCjxKLw1At0pRwc/db/y4SsyU9t6Y4ODqt5KaJPf/tiw1g1+NRmJX39O2TE4gMCHWsFTJQpPGqfjpVO89G+5ie4hc6scNAhxf9VpS6LT8oyXyWUW+//cvwjVj+qjHwckXaqNkKxf/ad0ymXEJfJIrAtUHeMuH9bhr1wZ39OMsBgchgqTliqOyuE74IeI5V1Ak69oT6F/t2Ypk9cDV9rdI9BW/LCSMS1CCWq0844qQ/Zs2UYXR7oDcJ6y+eyvysFOQZjEQyuhqlkmMBt/6M8eNRBd57L10hgI2paJpaGlBX/d00TI+um/hvDwaav59SzPzV+l6Bd11Was+xSSF7m9EdEkWgcht5i6gD2g4nlIInkAHt4HgY3WNv+mLmaNcWgcg53RE9VB0WuKXk0QU+vvucNtiZUiPRNEQid6fnUwT45F+E192iAm0xkKuiJQCq9bxAhCwFbx0DuebaMrvOrBKCHdCC+InW5L4FeT17/hjoc/xPZUzFh4Pvv+uQh2yu750UBGLexWJ4Lh+ie5oHnIZ4yEIVFS02bFejlhkKRwhY/A6OKrD5QuN5VT1ULHM/4vJepVl+NK/ZydTUsrf2PMCeTTvuhdZKm+7jRPzhHENmUnzqTIw0CxTNw7D3lfy5QWB5dej9GIqgRZR3arO6Qksp2LCVCbUnMXVarCBjkuhrYfYNTbhjFMFuOzirmGbim2Qk71iVIO6NBUC93JXMiRXsdQ/GQ+Qomd0hMB8hS+o4avdwIDn8iEiHt5YZoVkSM0PjVjQXWYbdK+1xFXvWEt5bAEO8NFW+0zjVWvDmAPxGz6ox5EaGOTdOA4zGsvu6FcCLpeWAjH3EbJGdmJD/bIU0slmNgIW1yE c74/rNIp FnFkMx6Bh3SLjMcQYicROUgq3z/Q8CbSn8uqQI6/GGWbQ5aHpnQZRhRq0EeSJ3IooPFx/PcVU4TJzYfUdCws/j5PWxsgO8nvLv0Ms7OYyqtj7JRLCKS+LgcThUHCgtJHmy21K0ERmsGewskyKP0weiATKz7FHV57lIbaNLd5xSztXp/95zXxnZk25QpeId/6OFiNJlR2V+pvhZWbVa65NpKW88Cc6ZWTfYzWnQrNING3AZwX5y9vGlRWauw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Kirill Tkhai This and the next patches in this series aim to make time effect of synchronize_srcu() invisible for user. The patch splits unregister_shrinker() in two functions: unregister_shrinker_delayed_initiate() unregister_shrinker_delayed_finalize() and shrinker users may make the second of them to be called asynchronous (e.g., from workqueue). Next patches make superblock shrinker to follow this way, so user-visible umount() time won't contain delays from synchronize_srcu(). Signed-off-by: Kirill Tkhai Signed-off-by: Qi Zheng --- include/linux/shrinker.h | 2 ++ mm/vmscan.c | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 224293b2dd06..e9d5a19d83fe 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -102,6 +102,8 @@ extern void register_shrinker_prepared(struct shrinker *shrinker); extern int __printf(2, 3) register_shrinker(struct shrinker *shrinker, const char *fmt, ...); extern void unregister_shrinker(struct shrinker *shrinker); +extern void unregister_shrinker_delayed_initiate(struct shrinker *shrinker); +extern void unregister_shrinker_delayed_finalize(struct shrinker *shrinker); extern void free_prealloced_shrinker(struct shrinker *shrinker); extern void synchronize_shrinkers(void); diff --git a/mm/vmscan.c b/mm/vmscan.c index a773e97e152e..baf8d2327d70 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -799,10 +799,7 @@ int register_shrinker(struct shrinker *shrinker, const char *fmt, ...) #endif EXPORT_SYMBOL(register_shrinker); -/* - * Remove one - */ -void unregister_shrinker(struct shrinker *shrinker) +void unregister_shrinker_delayed_initiate(struct shrinker *shrinker) { struct dentry *debugfs_entry; int debugfs_id; @@ -819,6 +816,13 @@ void unregister_shrinker(struct shrinker *shrinker) mutex_unlock(&shrinker_mutex); shrinker_debugfs_remove(debugfs_entry, debugfs_id); +} +EXPORT_SYMBOL(unregister_shrinker_delayed_initiate); + +void unregister_shrinker_delayed_finalize(struct shrinker *shrinker) +{ + if (!shrinker->nr_deferred) + return; atomic_inc(&shrinker_srcu_generation); synchronize_srcu(&shrinker_srcu); @@ -826,6 +830,16 @@ void unregister_shrinker(struct shrinker *shrinker) kfree(shrinker->nr_deferred); shrinker->nr_deferred = NULL; } +EXPORT_SYMBOL(unregister_shrinker_delayed_finalize); + +/* + * Remove one + */ +void unregister_shrinker(struct shrinker *shrinker) +{ + unregister_shrinker_delayed_initiate(shrinker); + unregister_shrinker_delayed_finalize(shrinker); +} EXPORT_SYMBOL(unregister_shrinker); /** From patchwork Wed May 31 09:57:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13261854 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 711F4C77B7C for ; Wed, 31 May 2023 09:58:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0A5078E0005; Wed, 31 May 2023 05:58:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 055A88E0002; Wed, 31 May 2023 05:58:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E5EFA8E0005; Wed, 31 May 2023 05:58:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id D88158E0002 for ; Wed, 31 May 2023 05:58:31 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id A5454A02E9 for ; Wed, 31 May 2023 09:58:31 +0000 (UTC) X-FDA: 80850100422.14.3AFC7E6 Received: from out-26.mta0.migadu.com (out-26.mta0.migadu.com [91.218.175.26]) by imf15.hostedemail.com (Postfix) with ESMTP id EC596A0014 for ; Wed, 31 May 2023 09:58:29 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=aqACCvCW; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf15.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.26 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1685527110; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=E+T6MU8ntbBOvHLVHWyWd2NDGkscltn2p+HVjRapVkY=; b=EVZ2BxW6ciVOsxrz73QJfZX210ioGhaMUpbrDrYVRa7zNwb4eGsFBkPcE97ktMs6ZJ1yGb XRS8DQWxfgYzPUT8mXnk94IaxO5rzolmUV9mLxZ64UiuYRYu6wKfSeI5iC9zyOV5dAIWFb 40hqbe3ogfzRJNfqfU0w2woIPqHLnfI= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=aqACCvCW; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf15.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.26 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1685527110; a=rsa-sha256; cv=none; b=b+IGJCEEw4ffIK/vnVo2kekgNu/S3w+xlGjMu4MTGyWuckH4CX8maLDcXE8DmKx11p8xcR 3OXJgtPvC9Ux2IcMxxjZu1joxSg1JBqtdglmNC09JZ19HaO7E35FU2wwoubKsSHiBtiSb7 gdxHPmk2l+C5AoXx3GoWhtg5aEJTu7o= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1685527108; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=E+T6MU8ntbBOvHLVHWyWd2NDGkscltn2p+HVjRapVkY=; b=aqACCvCWYJ0Y4210xFVIKOz1nuLZMkNqtH4dgIpFYFS1UqcYGGT2q8rSFyFjyZK7Pydu3w AuV1qecNPdxf4ytiJQpoRe0LH1oNWMkq+SrmRCO9rTKGu8v6q1BZVpGwerN8shJucy3Wif OiE0gEWmKmuhpBJRVVQpYf7vzkydq24= From: Qi Zheng To: akpm@linux-foundation.org, tkhai@ya.ru, roman.gushchin@linux.dev, vbabka@suse.cz, viro@zeniv.linux.org.uk, brauner@kernel.org, djwong@kernel.org, hughd@google.com, paulmck@kernel.org, muchun.song@linux.dev Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, Qi Zheng Subject: [PATCH 3/8] fs: move list_lru_destroy() to destroy_super_work() Date: Wed, 31 May 2023 09:57:37 +0000 Message-Id: <20230531095742.2480623-4-qi.zheng@linux.dev> In-Reply-To: <20230531095742.2480623-1-qi.zheng@linux.dev> References: <20230531095742.2480623-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Stat-Signature: hzx4jgondsgfqkrggy3pj36reh48tjko X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: EC596A0014 X-HE-Tag: 1685527109-962137 X-HE-Meta: U2FsdGVkX1+aG+HEu/VPOcOdIgs5GOAQI5W3g1WhwsE2/y9e3OCBMPnmSDF9BFUSNbhgZ/YtBoXXZaE96aarkYa7EttUxbffOBTJdsqo9csaKDlFN6n3zFcB5vVNv30eY/vfFW6OJJ5RN/flC5veyqQ9GYijJNtWFQzQrnh0pe82Y625DKrg4ADVIUwfyfsRWAmhc5JP1tHT0raFNUEC0h75RXTMnWa7G23CHSUEOC4zcwjMgG4tPCA9gUNB02q9n4dpWVzo7F661L5TT2hpwNd9QBhVUWB4y/zK1SVDlG6piuRbMaqTfJg4k2FEdHvr8kFo7EQqgMXPWn+MwkAjRpCQwPgn82fFpwJ4p7WLe/b2DFYDinpRSZtbYgHQMUoCECPwPM1XAtBulLD3LZXBn8LHQmn2E8lg/06Rji7CgmALmspYSNK1GpPtZrhuksVJdUbO+HsspuPTPqTClCz4UQI8u+DCTU6ndAr3sqJsOOB2dwrEFXIk6m6zD2wWr1ydOJnXd1LrafNAWzA09kS+cmER3oBXoNRu4q2iWNftrp2Mr49G6YIb9PFHy5Si0ts5WohhSnVuP2dXm9VFtBgFMUgMmDRNk42OQS+/jX930r1ZltjfG8gFeF70871efX3VXFtJ1TeaUluGZxB6TMWdtBoBhf6VL2iTSmHE3PBXBn9At66BYooojYyPz2Qb8vmY6EFTUhztDqFABBKLHuU9Tx42Igz9BPVAaCqGdJCdEPz2qvJI8yDDTvbGybUrV5kpmvyjGrTZxIs+ld1vaOr0bdxwU/ctoyKaqmviFlye9xDLcHpsZmlLKqnRHNXDBXngAEtdaGcxh8MuzA/CoIktkyCLyAH2PDxM9k7o+5epw/lVzAr1+TkXyG3fjooVOGOjWh3HWcHs86z6SXdNmXcvUnnX1TG5CkTiGAWw640Fuluawab/tlY6GwIwVgOLTG8lDH/fkOa3bkKIdbZ8LFE +CXuZ+A1 pmi0T3sYitNTBcNIYR5a3fLnaDQvxZQpIGrClAk62OyD4J3/M5MaXw5ckG2s9MKpxysqJYE/o7okAq4SvOLb7B1OD6G59OncVdQpXt9UGSrtjFWIWXld6y+iV6PI6bVqifsjHhEHlo1BFmLZ+dC2uncuUZiSsVmVTeLZOb/4hpbjwMYbowRDyvM0sA3yqLtkzDD60vAZ+HOOGh8jIDmq3S6/9u5070sU/aE1takR3b2Bv6L9LTUQvIX7TVQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Kirill Tkhai The patch makes s_dentry_lru and s_inode_lru be destroyed later from the workqueue. This is preparation to split unregister_shrinker(super_block::s_shrink) in two stages, and to call finalize stage from destroy_super_work(). Note, that generic filesystem shrinker unregistration is safe to be split in two stages right after this patch, since super_cache_count() and super_cache_scan() have a deal with s_dentry_lru and s_inode_lru only. But there are two exceptions: XFS and SHMEM, which define .nr_cached_objects() and .free_cached_objects() callbacks. These two do not allow us to do the splitting right after this patch. They touch fs-specific data, which is destroyed earlier, than destroy_super_work(). So, we can't call unregister_shrinker_delayed_finalize() from destroy_super_work() because of them, and next patches make preparations to make this possible. Signed-off-by: Kirill Tkhai Signed-off-by: Qi Zheng --- fs/super.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/fs/super.c b/fs/super.c index 8d8d68799b34..2ce4c72720f3 100644 --- a/fs/super.c +++ b/fs/super.c @@ -159,6 +159,11 @@ static void destroy_super_work(struct work_struct *work) destroy_work); int i; + WARN_ON(list_lru_count(&s->s_dentry_lru)); + WARN_ON(list_lru_count(&s->s_inode_lru)); + list_lru_destroy(&s->s_dentry_lru); + list_lru_destroy(&s->s_inode_lru); + for (i = 0; i < SB_FREEZE_LEVELS; i++) percpu_free_rwsem(&s->s_writers.rw_sem[i]); kfree(s); @@ -177,8 +182,6 @@ static void destroy_unused_super(struct super_block *s) if (!s) return; up_write(&s->s_umount); - list_lru_destroy(&s->s_dentry_lru); - list_lru_destroy(&s->s_inode_lru); security_sb_free(s); put_user_ns(s->s_user_ns); kfree(s->s_subtype); @@ -287,8 +290,6 @@ static void __put_super(struct super_block *s) { if (!--s->s_count) { list_del_init(&s->s_list); - WARN_ON(s->s_dentry_lru.node); - WARN_ON(s->s_inode_lru.node); WARN_ON(!list_empty(&s->s_mounts)); security_sb_free(s); put_user_ns(s->s_user_ns); @@ -330,14 +331,6 @@ void deactivate_locked_super(struct super_block *s) unregister_shrinker(&s->s_shrink); fs->kill_sb(s); - /* - * Since list_lru_destroy() may sleep, we cannot call it from - * put_super(), where we hold the sb_lock. Therefore we destroy - * the lru lists right now. - */ - list_lru_destroy(&s->s_dentry_lru); - list_lru_destroy(&s->s_inode_lru); - put_filesystem(fs); put_super(s); } else { From patchwork Wed May 31 09:57:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13261855 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A5F44C77B73 for ; Wed, 31 May 2023 09:58:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3DA3E8E0006; Wed, 31 May 2023 05:58:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 389A88E0002; Wed, 31 May 2023 05:58:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 29FAD8E0006; Wed, 31 May 2023 05:58:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 1E6C38E0002 for ; Wed, 31 May 2023 05:58:36 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id DB554802E6 for ; Wed, 31 May 2023 09:58:35 +0000 (UTC) X-FDA: 80850100590.13.49745A4 Received: from out-45.mta0.migadu.com (out-45.mta0.migadu.com [91.218.175.45]) by imf04.hostedemail.com (Postfix) with ESMTP id 158B840010 for ; Wed, 31 May 2023 09:58:33 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=pME7V5sg; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf04.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.45 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1685527114; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=+ES1OZTmJM6HPZiOufnJqkIPYyFHG+uxk+XMAxdW/H0=; b=Zhqnq4e104SbjChie6x5L34CG9AZz582gpHjEPJjx6m9iBP8HGiecjCbS9sNbVlQcIb6+l CXjlkmGL6Z53GgNvpIJqU3g4GGAjCMnU4wbxpJ8yB0p5N3bz6hDNFGyuHEa7kpF4E04XSD 0fq29teiN0zEsltVznO4PCV4vmaD8Y4= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=pME7V5sg; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf04.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.45 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1685527114; a=rsa-sha256; cv=none; b=ReOHWBQZVhWIViWGrYOiv9D/V8FCYKQuXFhmYE+AtocIVCoZX6M8nE6qmCJcLN8nGBstYB +2VTRVBexzQq4RXkGqZc6EKJTR3e8UmBIVfFESUge1iBEYkkqCX7NATNp1UKM4TUiTXCzQ yIOWN06GH+peDNp8t9QgJ6ikFqmFBlo= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1685527112; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+ES1OZTmJM6HPZiOufnJqkIPYyFHG+uxk+XMAxdW/H0=; b=pME7V5sghWDhiBYKlYhlIGGcd+I8ZIhtp+E9A11aBMxPx6kduDLdGh2+5uOlz/UhrC8USH AInETjEYhvnYApFG/QCWzh1ONDgIapx8Zsu0DP7P6tbY+y9jVOZnflKJtLkCkwkXmah55p +X/uwLrssbh7WgAqh01669o0MFk+pHM= From: Qi Zheng To: akpm@linux-foundation.org, tkhai@ya.ru, roman.gushchin@linux.dev, vbabka@suse.cz, viro@zeniv.linux.org.uk, brauner@kernel.org, djwong@kernel.org, hughd@google.com, paulmck@kernel.org, muchun.song@linux.dev Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, Qi Zheng Subject: [PATCH 4/8] fs: shrink only (SB_ACTIVE|SB_BORN) superblocks in super_cache_scan() Date: Wed, 31 May 2023 09:57:38 +0000 Message-Id: <20230531095742.2480623-5-qi.zheng@linux.dev> In-Reply-To: <20230531095742.2480623-1-qi.zheng@linux.dev> References: <20230531095742.2480623-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: 158B840010 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: zq7wh4qfhnctfc85ju7k7m9obsqa7ycd X-HE-Tag: 1685527113-750613 X-HE-Meta: U2FsdGVkX1/DFJXsDYSvD2UiPhORaq67zEcMFJgRlSniYHtqI+lEVhr49RwDeB9SLRPfvpDTxQY1xYgFTekqwiidG8OUhl5WCEzuTnvUoqEqYZN/gGtGhyZx4/dmKluX6kbjr5Wh159hH8F7Vdz9tT48gKk2CqywWHHcrado01mfvlmsih1jmL70BEPF8azF0qBW9DdyA/qGBNv/QbBTIFIoLwB34kZ9NWu5D5sMVmN2v3K9N5uUQ1/wW+ZOqSZcbump8Zwspzt+82J43C1cW8LZmCp0gM3ltQEpKK1y2KeTlzZyDuQidVcSw3C9JASllcWPgONidRP5RJufe0caTT3ejSh2maUIqvpMRfWfdoHqmbC8YozoqLrTle7j4mecgC8lNfp3YgFe3K8SNFRMf+pW6+Q1MUQWIYLwNGOEsqadcDyG4DsUeIPuw9Ee/Xo1SJaCaL+wean+vr1znSJaRYXplwBLfjmUW6JGxcoDj2DiumX5E2CrqsRtnQMzx6JmiL8wXBevVyVIyiOFe9SaoIpfufOXRsnYfC/EOqvm+T0gmwmj4IANMxITIf4ClC0O7fbTuBPaWgJ4b0u09RtldjsdNkkkiYmBcelPxlBzBgBPghe0A5J7P4w5i7npWfEvsW+8HH2f43Affy0AyvVPAsHzNTGY+WupynkMQAP7ckZ1tqWcSbCS36L8S7FnwLzstMH2lAO01oJ5QNFerCJ6mfDr9uWOmj4gtzc3zltd+Fm87x9otzEQNhiJiNUN1n0mfG3Zre77C4Q8Lo1C5zYSLIPpd8zIOM4LIxVb0/fwSr+oRcYsS2GCGc9/Exi17myD5BRWNGaA5GnB57c6CmFgFRiwEe3BYbihEjHbOphM5fMSm7Gd73hfRCaMoW+TD70BwdZsZzYEMMCtCSSU2lVD7xlXMvxBnnUp2AyMnclE2QNj7G+p9k5y93abFLx84jzdRqwKLX0s3C9VbpBhR1R G7z4Xuvs 8Ha4daFk36oi81zbBuNi6k+CZko/+flybDF40fHUJtMorU3kEUMj/iOT5eHX0OHeAPoR5ok0M7dzW/wOc4o5jvF4JgmwxzFFFv2U9TEXO5MNVTBUzerDrxgokyKqnIX0L7P2T5mYFb1m5dHxQ81uRYXVAt5nzHGXog9Cb6K72vl5tHfNwuOvwjeXsuCVAm2zLQ5D6hm2bS9zi/K2cf9KbRpOYDJpJh40s4o9FpcbaAUB3YMQklwSFl1wh2w== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Kirill Tkhai This patch prepares superblock shrinker for delayed unregistering. It makes super_cache_scan() avoid shrinking of not active superblocks. SB_ACTIVE is used as such the indicator. In case of superblock is not active, super_cache_scan() just exits with SHRINK_STOP as result. Note, that SB_ACTIVE is cleared in generic_shutdown_super() and this is made under the write lock of s_umount. Function super_cache_scan() also takes the read lock of s_umount, so it can't skip this flag cleared. SB_BORN check is added to super_cache_scan() just for uniformity with super_cache_count(), while super_cache_count() received SB_ACTIVE check just for uniformity with super_cache_scan(). After this patch super_cache_scan() becomes to ignore unregistering superblocks, so this function is OK with splitting unregister_shrinker(). Next patches prepare super_cache_count() to follow this way. Signed-off-by: Kirill Tkhai Signed-off-by: Qi Zheng --- fs/super.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fs/super.c b/fs/super.c index 2ce4c72720f3..2ce54561e82e 100644 --- a/fs/super.c +++ b/fs/super.c @@ -79,6 +79,11 @@ static unsigned long super_cache_scan(struct shrinker *shrink, if (!trylock_super(sb)) return SHRINK_STOP; + if ((sb->s_flags & (SB_BORN|SB_ACTIVE)) != (SB_BORN|SB_ACTIVE)) { + freed = SHRINK_STOP; + goto unlock; + } + if (sb->s_op->nr_cached_objects) fs_objects = sb->s_op->nr_cached_objects(sb, sc); @@ -110,6 +115,7 @@ static unsigned long super_cache_scan(struct shrinker *shrink, freed += sb->s_op->free_cached_objects(sb, sc); } +unlock: up_read(&sb->s_umount); return freed; } @@ -136,7 +142,7 @@ static unsigned long super_cache_count(struct shrinker *shrink, * avoid this situation, so do the same here. The memory barrier is * matched with the one in mount_fs() as we don't hold locks here. */ - if (!(sb->s_flags & SB_BORN)) + if ((sb->s_flags & (SB_BORN|SB_ACTIVE)) != (SB_BORN|SB_ACTIVE)) return 0; smp_rmb(); From patchwork Wed May 31 09:57:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13261856 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id BBEB5C77B73 for ; Wed, 31 May 2023 09:58:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5FCAC8E0007; Wed, 31 May 2023 05:58:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5AC338E0002; Wed, 31 May 2023 05:58:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 49B228E0007; Wed, 31 May 2023 05:58:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 3BF5D8E0002 for ; Wed, 31 May 2023 05:58:40 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 0F5781202F4 for ; Wed, 31 May 2023 09:58:40 +0000 (UTC) X-FDA: 80850100800.08.2823E9D Received: from out-2.mta0.migadu.com (out-2.mta0.migadu.com [91.218.175.2]) by imf01.hostedemail.com (Postfix) with ESMTP id 572FD40014 for ; Wed, 31 May 2023 09:58:38 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=PlSv9IPm; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf01.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.2 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1685527118; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=TtT/YiPGcEdmTG9OAN3DQ5AumhKObXT9/Vj+qIl0WEg=; b=MqR63qJ7ggP6YnmtHxkiDLm+gflCe+Il2FETPXfhJJzU9FW5BqlYKFKw+T5P3MLbmhMRwl yb5GMkMSv28BzzlfXAo0zPy3ImZHMHIUzeYJLaZbrKTUj2glmWL+n+C6t+g1I26GEbb+8q 1Jtc6JKbLupk3Ze29OkqyJHqW/aUhCM= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=PlSv9IPm; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf01.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.2 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1685527118; a=rsa-sha256; cv=none; b=DBQePM2MkP7XFFOf+0cOLSTeBc9ImSg1nFY7/boltQ0FNjfruuqPzktgNpRNZSP+1FiEwg YN8TYvwnK8CSJyMdFGPx6/g96QFtMDY+G7PLJuhIB/qhU9C8iKrki4zdQzxziMhyxmow+K 1U0Un+E4VpdJH8YZ8y4zXhwqQHrIyYw= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1685527116; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TtT/YiPGcEdmTG9OAN3DQ5AumhKObXT9/Vj+qIl0WEg=; b=PlSv9IPmuSHjdrKvEPl7w4TEiIOKkc/t+uD+8kCUMyQjVkWRlPkNzabQJ7hHCOKGaBYK7W bUUNx1CrZkZITlDuz0x6psukNLY7bBJ0k/0MQR2aKvy2s33NxB3JNm4Ms6dXTNpvioEckI QgaCfDLB4ZAFsh5XY9kozVeBEH/jkVw= From: Qi Zheng To: akpm@linux-foundation.org, tkhai@ya.ru, roman.gushchin@linux.dev, vbabka@suse.cz, viro@zeniv.linux.org.uk, brauner@kernel.org, djwong@kernel.org, hughd@google.com, paulmck@kernel.org, muchun.song@linux.dev Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, Qi Zheng Subject: [PATCH 5/8] fs: introduce struct super_operations::destroy_super() callback Date: Wed, 31 May 2023 09:57:39 +0000 Message-Id: <20230531095742.2480623-6-qi.zheng@linux.dev> In-Reply-To: <20230531095742.2480623-1-qi.zheng@linux.dev> References: <20230531095742.2480623-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: 572FD40014 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: pxqsu3d7exug6x7mne44ntiescxkd4s1 X-HE-Tag: 1685527118-290201 X-HE-Meta: U2FsdGVkX1/2c0XXIGJKNnwqbOyuzTrtooB1HTkg4CIVZVZpgUbrRYTnSi9Ak4G34uLxDDT08/l4ewP007NAohMaF+lscuXGofjXmZfniT3joCc2ofhFwJbzxwEC8Ld9sepzG13Zzf3lOGr4e8wXvolBUavde5Ilk1roKjYDWA1J6zMcBHeRK6kuaecpnq50js+8CivYhmVRNRy+AGibbHnZmb5DEGdDxCTnruGc7yXya7HWzi+sCrlChe2VxHio26Wmk6ogBgDvIPNgDnHjXyNXNdr1dlR9ulhH1urBgowV+lj49xxBJoooBflKaAyZCyEh9ZcQQkh8u1KhHHwCzgQWVEpi1aOilyiVGOL/NwvL1ZobgoNpS8D9sTUFL4mTiiG7R7XUIa9rUpWL08uavgBWfCYNADZeSj41DZzf0wDwbzsR1gFSz543GXrlyGY6mKw11llBGuYNkZA8BqmGssmM1/r9HxC7RgfumcdsELzujn1Femuj/iHUdlnrhrm7m05eJuU4Qu7heVBbIb4QVxsxV9r20tlS9HzHzhC26WeFVSNhGqxF2F8udZQzXEQBS2zqTbgbrEIoZu9aChW4Ptm5NdHFZY3ZAneAPISrjEjGxYd6dwtBul13j7MPuzGACifGslsJpszJcma/CtLf8+54ZM763O3PISD4AZ95e4q58khxZsm+Uzybd6vWuLt2Ymck693maYntoE0bHt8cn4GRrgs6MEdr7a1P6zfaSNMrnJGTzQUtpNmWB9emTgToy2XW2Z6fMT4nRjnPfG1NmK8qv4HWSXxz5L/CsdQFn5NYd8wlqkxWCUsuIYdHcY6Y37COmkMt2BKsFAU7q61K2jcLntM43zZSK0+aPf/T/A22dzyHSNniSDTMG/u9GQOtumq5b5E6kn8b+VmYh6XhvUJWJd1zXCxEVVKZ0648Lrludh1aK4lMs8f900DZOMX9cyHc0g8R3C5K4eldFcr gsdMpB1p jvZ+r9FM2TpwShTMgy647uaReBXmiUqW2QPmSo4UUbs43GptfhF3YBomUw8st9AnyXMirjpYeMegY+fUf0kbKwq0vYLw3VJ1QcLqzLx4Lc7SiuzlVrsQfeIvjn1mC4xqDsLSFDa+KagfYS/n/asc2AdZ6N8S3wsqQoIZVbhodkSJNPo6bAR+EzuzDjmOgKf0sVCxWVIHdhYXXtcRfEbYP1A/aQuizFIO7iLRKnrqyvjq20p9PR+G8o56WnQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Kirill Tkhai The patch introduces a new callback, which will be called asynchronous from delayed work. This will allows to make ::nr_cached_objects() safe to be called on destroying superblock in next patches, and to split unregister_shrinker() into two primitives. Signed-off-by: Kirill Tkhai Signed-off-by: Qi Zheng --- fs/super.c | 3 +++ include/linux/fs.h | 1 + 2 files changed, 4 insertions(+) diff --git a/fs/super.c b/fs/super.c index 2ce54561e82e..4e9d08224f86 100644 --- a/fs/super.c +++ b/fs/super.c @@ -170,6 +170,9 @@ static void destroy_super_work(struct work_struct *work) list_lru_destroy(&s->s_dentry_lru); list_lru_destroy(&s->s_inode_lru); + if (s->s_op->destroy_super) + s->s_op->destroy_super(s); + for (i = 0; i < SB_FREEZE_LEVELS; i++) percpu_free_rwsem(&s->s_writers.rw_sem[i]); kfree(s); diff --git a/include/linux/fs.h b/include/linux/fs.h index 0b54ac1d331b..30b46d0facfc 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1910,6 +1910,7 @@ struct super_operations { int (*drop_inode) (struct inode *); void (*evict_inode) (struct inode *); void (*put_super) (struct super_block *); + void (*destroy_super) (struct super_block *); int (*sync_fs)(struct super_block *sb, int wait); int (*freeze_super) (struct super_block *); int (*freeze_fs) (struct super_block *); From patchwork Wed May 31 09:57:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13261857 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5A566C7EE24 for ; Wed, 31 May 2023 09:58:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D01BD8E0002; Wed, 31 May 2023 05:58:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CD8256B0074; Wed, 31 May 2023 05:58:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BC7218E0002; Wed, 31 May 2023 05:58:44 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id B181E6B0072 for ; Wed, 31 May 2023 05:58:44 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 77D74160329 for ; Wed, 31 May 2023 09:58:44 +0000 (UTC) X-FDA: 80850100968.11.56EEE84 Received: from out-31.mta0.migadu.com (out-31.mta0.migadu.com [91.218.175.31]) by imf17.hostedemail.com (Postfix) with ESMTP id BCAFF4001D for ; Wed, 31 May 2023 09:58:42 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=rS4mRe4L; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf17.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.31 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1685527122; a=rsa-sha256; cv=none; b=SZGy3wLWlzuWhXN4IyI5y1ec4IwJZspQc5/Xf0lOue+VUv8V2nJl+xZzZoI3QMLt8GX4gW 03m/kXlUDS4rZfF63EAuMSd/ihBf3F/y3z/MEm5BCKVuX6DrrwlvWaise1oSGQqRzSza9K lNiP1mxX0D1ige4uk+wf3XzvlcxrnDg= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=rS4mRe4L; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf17.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.31 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1685527122; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=E1v6Nmr+iDUp1so91WjqnHTNpH9v5OnKQ0PJi2AfGq4=; b=5ofZ/nCdfxJWWX3xXIDbNYCKtXQ02ruRkTHz9qKwDEw0ZCqhN5KNCSq1NVuTXoEoeGWX8X V/lTpQHO3saNl3Namnlfjb5jiGNK0IbkXzEUwc6cSlgIDsBU876eVgiWWHz1/kbkxZdgZo 1qu01cmkh4W9SL25fWI0ZKYxTVXowuU= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1685527121; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=E1v6Nmr+iDUp1so91WjqnHTNpH9v5OnKQ0PJi2AfGq4=; b=rS4mRe4LmeoSOb/mL2JDcthPretqgBkrv8Kq1Nka9fPmRIXJQ4mg/9Wg8Bj9SViBUA7yr6 PoZXbDH9wstFXz3FQzUyM1geHY3OxQh815EPwbi4X/Zntio/xy3pCNOacpjQfTALY9gKYI zTMcUPF8nNFvCOF+ZtfaP9t9mQ6pBAk= From: Qi Zheng To: akpm@linux-foundation.org, tkhai@ya.ru, roman.gushchin@linux.dev, vbabka@suse.cz, viro@zeniv.linux.org.uk, brauner@kernel.org, djwong@kernel.org, hughd@google.com, paulmck@kernel.org, muchun.song@linux.dev Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, Qi Zheng Subject: [PATCH 6/8] xfs: introduce xfs_fs_destroy_super() Date: Wed, 31 May 2023 09:57:40 +0000 Message-Id: <20230531095742.2480623-7-qi.zheng@linux.dev> In-Reply-To: <20230531095742.2480623-1-qi.zheng@linux.dev> References: <20230531095742.2480623-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: BCAFF4001D X-Stat-Signature: pykdi58kig65fnfbau3obm5zj7xi3na1 X-HE-Tag: 1685527122-311246 X-HE-Meta: U2FsdGVkX190zUnrztWTJ6kA6AKoaYqTW1ZVaEF34KJSEUxgKqrvEx2dpx98omWEdOp3ku3PU3bMXxT95xERpK2wUDd4HIeVjkz3DAlAgFRzYAzXyKHAWmz8D/5mvxSOM0xaiXHx8tMwA4EqA0e25smJrMytqYPB0pvXdb3iGoLybyqZugaxjMEPdzoDyTf8HY3Ay6V2fVSB/RGjSF/61uEdxyQrh2D/PLZgukotxR3I8p75KCYK/uu16WZvtAdwSPTi4aOrEbbPcj5Poisv6U3cQVKrYez63CbD+geEPAVaahiX31DLz4jTgw0kH0lXnqIl9yWRoSPui/KspY9uQ/setK2pU2nkFk137Phd19ZxtKS5y86iP6cuyl148eJLC9UJBDRA/O68pStmBstUwPXhJhQ6CMp8qh/u8A9FjO7sbTm1FUUl8XXSUoJO2j4SpLmdW0Fa8lbEKyVD3EEozemZXmS1PJWOrBd5rdgEDr+mAiwK/yHuXkRtvks0U/jJC1eggZgJlLxIQLtdnmF+EyczuDy/DXzpYmgl8RHB2S5IPES1EWivH2nNCiP7sdqDYU0fVAXG+IzdVQbrRzB7YZ/hksX66MXbWmKY1pAiShd+XvFmQNDWteUIDknOJHeKV4eA9xc6RKsl3hyZ4i1j9kZr7bTkhzkp0EsLXC+HeSKjCpPMQAWkFz6BNwIzk9kVvU9cJOOTOBixMfoBU5S+oAdmw68JwaJfQhT4is+Uvepfbq2MMDuz6hM23nc7eRTbUtX7M506PGN7JVAc1AI3nPm/qib8lM+w0aCtD7DsbaXq+zIPqbj9dD179FTF4AMbjMFkbVCCcId9HHPHAf5X9UIegImgq6VPeHT+DRBTxmsvTAvGRL6/oqkfYJ/W0M4pDKujysyDSqrT7lY6pofU+XXG4SaRJlZgoKBobX0YDMgZB+BJoyLVTgeFhLJ22Rs34wHSvrYQz8goPdzUsTj L9Pq+X2F 4isgd3gAuLEpvuNErw0mIBafguYe1TBAtZCsDgHULQsl7Ppl4Wq5a1BRIaxuFT51vdQcuDiPC2FQHRrBzR2WfTOcE3SOJf4ZXhqEB7RLAayw8ymYJryfhlXoIOHTn4XvoPVxHnue3AIfgFxf93q88ne/VY9rmGF35XgmLF4FGz9l5mHnvQzm2QybTpV3XsSO/Dmmkl5VdMZBdOlA8+dPswLwCynJ23qdxFXrcV5m8czO4nYD9ZiCJjJN5nA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Kirill Tkhai xfs_fs_nr_cached_objects() touches sb->s_fs_info, and this patch makes it to be destructed later. After this patch xfs_fs_nr_cached_objects() is safe for splitting unregister_shrinker(): mp->m_perag_tree is stable till destroy_super_work(), while iteration over it is already RCU-protected by internal XFS business. Signed-off-by: Kirill Tkhai Signed-off-by: Qi Zheng --- fs/xfs/xfs_super.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 7e706255f165..694616524c76 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -743,11 +743,18 @@ xfs_fs_drop_inode( } static void -xfs_mount_free( +xfs_free_names( struct xfs_mount *mp) { kfree(mp->m_rtname); kfree(mp->m_logname); +} + +static void +xfs_mount_free( + struct xfs_mount *mp) +{ + xfs_free_names(mp); kmem_free(mp); } @@ -1136,8 +1143,19 @@ xfs_fs_put_super( xfs_destroy_mount_workqueues(mp); xfs_close_devices(mp); - sb->s_fs_info = NULL; - xfs_mount_free(mp); + xfs_free_names(mp); +} + +static void +xfs_fs_destroy_super( + struct super_block *sb) +{ + if (sb->s_fs_info) { + struct xfs_mount *mp = XFS_M(sb); + + kmem_free(mp); + sb->s_fs_info = NULL; + } } static long @@ -1165,6 +1183,7 @@ static const struct super_operations xfs_super_operations = { .dirty_inode = xfs_fs_dirty_inode, .drop_inode = xfs_fs_drop_inode, .put_super = xfs_fs_put_super, + .destroy_super = xfs_fs_destroy_super, .sync_fs = xfs_fs_sync_fs, .freeze_fs = xfs_fs_freeze, .unfreeze_fs = xfs_fs_unfreeze, From patchwork Wed May 31 09:57:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13261858 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B408C77B7C for ; Wed, 31 May 2023 09:58:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ED6158E0003; Wed, 31 May 2023 05:58:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E85A26B0074; Wed, 31 May 2023 05:58:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D75128E0003; Wed, 31 May 2023 05:58:48 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id CC2E56B0072 for ; Wed, 31 May 2023 05:58:48 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id A406880254 for ; Wed, 31 May 2023 09:58:48 +0000 (UTC) X-FDA: 80850101136.04.8D1074F Received: from out-6.mta0.migadu.com (out-6.mta0.migadu.com [91.218.175.6]) by imf09.hostedemail.com (Postfix) with ESMTP id E275E14000D for ; Wed, 31 May 2023 09:58:46 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=lvO7SWW0; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf09.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.6 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1685527127; a=rsa-sha256; cv=none; b=FP6kvq+8VANjXIwgigfY/jIEhudeEga6FsMRzbktyx4hzJAswxIrVkdp9su738ymhhOqNW MQZNP6ZfxF4+N2YvF0rbkmZj1AbkuDCj4grTUMvx8uhZvo2Dc3JVEg5aWHmUOsKoXIxNCV VkysUaUN6mBBqFb2G6eiUzxFKkznLzo= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=lvO7SWW0; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf09.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.6 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1685527127; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=cNetM4XBa/Gbuqkaq6l+2vD89eQsIgmLTdtu3cv7dk8=; b=KLLC/4Jw+29Bw8GEhcQEWTcso1hUcJa4cspZwaNMSGFlwY4hbo8IVibfYjPmRUQloCDYo4 bxjexNE5O6KqId8pSGkqm3Wj1fVj6k1Xzq3D4YabbO+D/q5QOQ1DmVvIvafwEAYtOTPEPc EHlmRXg9Hb5ZLkMrCzJkGnTHPq8dmy4= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1685527125; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cNetM4XBa/Gbuqkaq6l+2vD89eQsIgmLTdtu3cv7dk8=; b=lvO7SWW0g6amQil27w7Ch1WvlKqI4Syaj9ZKVX28hbNP7t8j4/5bAKuiTPnmEYRwcznnpM FC4tcITydxIA3hqHO31xf6p70DR7WKVF4bsUNWyhiAhBcj85YqAuj7QvPpCBdGQUEYFJeW 8/DXDI12VzN61sf4+h1P/9MfcFO1sIc= From: Qi Zheng To: akpm@linux-foundation.org, tkhai@ya.ru, roman.gushchin@linux.dev, vbabka@suse.cz, viro@zeniv.linux.org.uk, brauner@kernel.org, djwong@kernel.org, hughd@google.com, paulmck@kernel.org, muchun.song@linux.dev Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, Qi Zheng Subject: [PATCH 7/8] shmem: implement shmem_destroy_super() Date: Wed, 31 May 2023 09:57:41 +0000 Message-Id: <20230531095742.2480623-8-qi.zheng@linux.dev> In-Reply-To: <20230531095742.2480623-1-qi.zheng@linux.dev> References: <20230531095742.2480623-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: E275E14000D X-Stat-Signature: 9cdibu8waw1em7cjd8iderhdt3ckka1n X-HE-Tag: 1685527126-21962 X-HE-Meta: U2FsdGVkX1+1S38oPeinIYyMt5pj5q4WaO09zKiPZQr/BXz4Mmu6JU/cCkTDnxLHizO8QWhVPVrGXKE85Gz0llblCDKwxNriwM7b3RCD5A2tam4VhLD665AquXM6xgqUfwrMlRakRg1uDlmPm9+LvPU8TYwUe7R7pbJPREBQ9n5cV43zSGSDCFAqwFyZMi3moQ2/5y9e4eyLxn6G1TgskvKAlMPvt1w2ikEDueb0jUDdP4g73jtxV086bPWqATHHdz1+W3ekCk9HFXBMNt5wC0htQqAQKD14gT0NrgRekEStWc3+MPTd11sxSmYN8xGAiBBtldT5FRN09AabR7yvaj9swg1CEcq5rxsSAKURQ/+vzaObyHU9Fe4yjvbbG/Ay3QeZUyQcIe/BRMSORzK2ogoiykTPOAed58bpJb3++TzWUpaJwPzdhgxwFauIbNG3IZkzXzUAw7BNeXkL5zYLHjD9+LdMdE4U0NwsjtdGsvWoa8IBS1LcbV4cqUzt/Wy4smXZ6HKNtugoYrRJOsuv+q6oLhAvJF4MjC9Z1WBwKc1ymK2BN/iP6yLSrtVT0g+BsTBQHNxbzOZIgWoMH++8xaij/OCkszS1GTpu3LRoFKgHAQEPVsDcJugxBb6gwtNd+6umEqQwGpMfF9XFt3mCcps60193t0eShi0u1ubR9OgLauzbOGfpvICPFR1dpfOsxJ3cVaP3ZKelCJWTJC6bB5Dlws6B2e/Toekr4rKJFSL2IE/MhN4GLlyobDyDuQeBFdyvjyMEd7lJkkiFQzuSKXpdJD0GboWzcSgAFMml+edOrr19m6naabAmvGQk4rvXE6xJ+A26+B7VuXbKdI4cZKU3C0u+9/OXbbsvdSu2HeKFniuArtkujja2+wNYt6/hYherquE6uVUO889MY1vnN8Dt+obJ4cWSRHzWF7X9T36+S6EHqZ2V4qxgc0vpVs+4GMteTRD7bi1a2LXqJKD hiz35Mv8 hFDP4hSHGxGypAKY0apv3pGwI6x6rr6vSQFvPFVCv1aV6ymav+hv4qsNW/RL+zaPFTs0pMKqn3QTEOWVjVmyjsbVapkKfIqwJkBP092r7z2ToUlSLZ1GxBh8UgVZKqiF/EMBZGnSOCbAvE98yavmzymf1ztwbblPfmpGRuQkNDa5uYs03VWIO7U77ro0d1Tx91QK6AyJ+ZeAF1WFqh55S2VAKwkQhV4wp0Sr6UnqN3HKrGewLqr6FrrzmTQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Kirill Tkhai Similar to xfs_fs_destroy_super() implement the method for shmem. shmem_unused_huge_count() just touches sb->s_fs_info. After such the later freeing it will be safe for unregister_shrinker() splitting (which is made in next patch). Signed-off-by: Kirill Tkhai Signed-off-by: Qi Zheng --- mm/shmem.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mm/shmem.c b/mm/shmem.c index 71e6c9855770..a4c3fdf23838 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -3930,6 +3930,12 @@ static void shmem_put_super(struct super_block *sb) free_percpu(sbinfo->ino_batch); percpu_counter_destroy(&sbinfo->used_blocks); mpol_put(sbinfo->mpol); +} + +static void shmem_destroy_super(struct super_block *sb) +{ + struct shmem_sb_info *sbinfo = SHMEM_SB(sb); + kfree(sbinfo); sb->s_fs_info = NULL; } @@ -4018,6 +4024,7 @@ static int shmem_fill_super(struct super_block *sb, struct fs_context *fc) failed: shmem_put_super(sb); + shmem_destroy_super(sb); return -ENOMEM; } @@ -4182,6 +4189,7 @@ static const struct super_operations shmem_ops = { .evict_inode = shmem_evict_inode, .drop_inode = generic_delete_inode, .put_super = shmem_put_super, + .destroy_super = shmem_destroy_super, #ifdef CONFIG_TRANSPARENT_HUGEPAGE .nr_cached_objects = shmem_unused_huge_count, .free_cached_objects = shmem_unused_huge_scan, From patchwork Wed May 31 09:57:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13261859 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id DD0F1C77B73 for ; Wed, 31 May 2023 09:58:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 512456B0072; Wed, 31 May 2023 05:58:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 49C338E0009; Wed, 31 May 2023 05:58:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2F0218E0008; Wed, 31 May 2023 05:58:53 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 16D106B0072 for ; Wed, 31 May 2023 05:58:53 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id D2A61AE407 for ; Wed, 31 May 2023 09:58:52 +0000 (UTC) X-FDA: 80850101304.04.DA6C7F3 Received: from out-7.mta0.migadu.com (out-7.mta0.migadu.com [91.218.175.7]) by imf27.hostedemail.com (Postfix) with ESMTP id 213AA40016 for ; Wed, 31 May 2023 09:58:50 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=baMB2GLV; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf27.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.7 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1685527131; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=mjcsinqX7KwTJ40/JcL+JgGM2W0swatrtd18npIFtVk=; b=lv131jWBkvD+8W8vwXm6UbSpkUvq+brShSI0RGuA+AHr7HDpBSUsBzBGyv94GvpfAKhfrp YTw42Mps+uGgG+y7WDU/rFOws9kTWSBm4VF22xOHDc2uLUB4avxtuFHyGwFiSn+l3VE5D6 K2kSMCJERHu0QL9igEHVejFf+k7k92I= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=baMB2GLV; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf27.hostedemail.com: domain of qi.zheng@linux.dev designates 91.218.175.7 as permitted sender) smtp.mailfrom=qi.zheng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1685527131; a=rsa-sha256; cv=none; b=JAzPIsa9pX/Q6zjqX/5eEpdl5GsuLU+K8jMKx79EjjQw4+X/zZJ6UXNkSJJi79JqrZ6VYV rj0ljAaM+qf21Rz/TyZoZ9ZZf+8feWFUYW4k6a5RWzwSBFpBbDjuePuEGRs9RKUe9UjeiS V5fGuj5NbRsxRYe6wkLeh9VNol7Jmys= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1685527129; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mjcsinqX7KwTJ40/JcL+JgGM2W0swatrtd18npIFtVk=; b=baMB2GLVbbUmgLTp+CUXyhhVv/9x56bQV3iqZ8MjrGpSa7p5jatJsXPULpCV9EV8+jBrYl PchelLFH6ZF8vYpgvhoNebbx99TRM79XB4NftLwSZ90r/JoVrRMdf+o3xlQ1brouvtCBtm EjXCENjNIePsNVRgiPye7pdqlsEyPGs= From: Qi Zheng To: akpm@linux-foundation.org, tkhai@ya.ru, roman.gushchin@linux.dev, vbabka@suse.cz, viro@zeniv.linux.org.uk, brauner@kernel.org, djwong@kernel.org, hughd@google.com, paulmck@kernel.org, muchun.song@linux.dev Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, Qi Zheng Subject: [PATCH 8/8] fs: use unregister_shrinker_delayed_{initiate, finalize} for super_block shrinker Date: Wed, 31 May 2023 09:57:42 +0000 Message-Id: <20230531095742.2480623-9-qi.zheng@linux.dev> In-Reply-To: <20230531095742.2480623-1-qi.zheng@linux.dev> References: <20230531095742.2480623-1-qi.zheng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 213AA40016 X-Stat-Signature: 7ox5htxdemwi61ykcr8gbnx8idsksb37 X-HE-Tag: 1685527130-593337 X-HE-Meta: U2FsdGVkX187aQXCSDZPbn+CBfD7gyo39pP0Uq69rOLP3mjruATJ58+LqDZ+xO95fj8jt5Crdtk0wvMXPEy54VSo+mjuwT6lVOI5y5ChQvTX/yi5RAso6XJghU/BKKIa0oTPCN6tinBv1UNLj6wlnd7IPscjx/ek90hLjqawmr77wqrJCew3+xEc1sSKbvnLQiQojOC3kPc8BMzJiIi3pWaY/wew+q/lNG1l3e/oNfgvyoeTkobAFmDybVw9aIYToNDC6yDJdIHgoeSu9MKK1a8nkkkpSdscqqiODMYrr0t953lofnNiM4fkC+b5oNDoYkgqBRInFKmQJWaZFe316lcB434R8whJObnQ36gwZekgdNsylYmwb+b5xlXNV8+WeVIhJen8kaOP2pdEfnidUD222HWp/gxeXDEve8m44TxuZ4hTfAa2GEiec4l6vsL1axqeFtZR1QY1iMQpRoU4NAqdZaFE0oi8EpOfEYhyYmpI7PFkg6Ls5jZ/j1r2FL7wP6/wdgMpiHEy5ADybItu9/0WMbyqfS21BUL68wXLHSso+8tzzn/4XOIRHbOIjW9JQoSsNIcMVa+7ZTg8qDJ0TfW+zABKdXuPQ2LzDUYoRsJugJ7W35+gpEk1zrlx3ppDyBzoDF8HO33QSdys21fAfKDut5OMMggAEaZxZvrHSodszkeM7jWB+GyjjUYSbma8/Np1ammywVm+z/xmiMwEFtcw1AOursSOIdrklrjv3SArFelbx14uG6ttYSFoUEWRGVtoUc7XGM9gUK6ZaDJGDPPHt0x7d8n3aeRyxfkFs6G5Ql1IznaHSouIwZy4fuLmEoBd2x+0Kc8gLchnPP7r4YDSvgUwERdz7q58fe4zKys4m0/3v6wN3qQd7/3t3dvyjkYUCVZaj9Yxx/DinhPRtHvX0rL3YRU9RFTLviIiWBuVYt1fZ643+dmE/gUx8Go59fTKClRYkEUDvjWILI0 lq4JpSrf GsLctwsg7FylFYKPqsaPxFOzTbJKHmwR2QEKvyh8cg5KSII3fJ0FUJupH/IcObsxE65A9nNVleJnJfEYWVoq34vTgbXB4/YppTn5qpZ9JCFiT0pkr4dJWTzRmPp+eutxM25da5X9JUpY9hWmPOzcH1y+90i0j9eG2iSNHSf6i6UyoEtCkcPs07tdBEbo5aJlFpymaJypht6tcgI2BbJnIkfWcvwITPaLM4NOunpCGKjJxoHgJHM3ZQgLAqA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Kirill Tkhai Previous patches made all the data, which is touched from super_cache_count(), destroyed from destroy_super_work(): s_dentry_lru, s_inode_lru and super_block::s_fs_info. super_cache_scan() can't be called after SB_ACTIVE is cleared in generic_shutdown_super(). So, it safe to move heavy unregister_shrinker_delayed_finalize() part to delayed work, i.e. it's safe for parallel do_shrink_slab() to be executed between unregister_shrinker_delayed_initiate() and destroy_super_work()->unregister_shrinker_delayed_finalize(). This makes the heavy synchronize_srcu() to do not affect on user-visible unregistration speed (since now it's executed from workqueue). All further time-critical for unregistration places may be written in the same conception. Signed-off-by: Kirill Tkhai Signed-off-by: Qi Zheng --- fs/super.c | 4 +++- include/linux/fs.h | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/fs/super.c b/fs/super.c index 4e9d08224f86..c61efb74fa7f 100644 --- a/fs/super.c +++ b/fs/super.c @@ -165,6 +165,8 @@ static void destroy_super_work(struct work_struct *work) destroy_work); int i; + unregister_shrinker_delayed_finalize(&s->s_shrink); + WARN_ON(list_lru_count(&s->s_dentry_lru)); WARN_ON(list_lru_count(&s->s_inode_lru)); list_lru_destroy(&s->s_dentry_lru); @@ -337,7 +339,7 @@ void deactivate_locked_super(struct super_block *s) { struct file_system_type *fs = s->s_type; if (atomic_dec_and_test(&s->s_active)) { - unregister_shrinker(&s->s_shrink); + unregister_shrinker_delayed_initiate(&s->s_shrink); fs->kill_sb(s); put_filesystem(fs); diff --git a/include/linux/fs.h b/include/linux/fs.h index 30b46d0facfc..869dd8de91a5 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1929,6 +1929,11 @@ struct super_operations { ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); struct dquot **(*get_dquots)(struct inode *); #endif + /* + * Shrinker may call these two function on destructing super_block + * till unregister_shrinker_delayed_finalize() has completed + * in destroy_super_work(), and they must care about that. + */ long (*nr_cached_objects)(struct super_block *, struct shrink_control *); long (*free_cached_objects)(struct super_block *,