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 {