From mboxrd@z Thu Jan 1 00:00:00 1970 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 9EEEBC27C40 for ; Thu, 24 Aug 2023 09:50:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D64CC280073; Thu, 24 Aug 2023 05:50:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D14EA280071; Thu, 24 Aug 2023 05:50:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BDCA1280073; Thu, 24 Aug 2023 05:50:00 -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 A8877280071 for ; Thu, 24 Aug 2023 05:50:00 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 6446312026B for ; Thu, 24 Aug 2023 09:50:00 +0000 (UTC) X-FDA: 81158526960.21.233D436 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf03.hostedemail.com (Postfix) with ESMTP id 726BB20014 for ; Thu, 24 Aug 2023 09:49:57 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=pIILLK6V; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=fButr8P1; dmarc=none; spf=pass (imf03.hostedemail.com: domain of jack@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=jack@suse.cz ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692870597; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=OLwPzBreyOpR95YcVVb3yFmDKybDs7swq9/uz2pOYw8=; b=P28/r/h3Xn5AfP25TH8O1zjMQwCZiY3YzeRiuluDEISVzgOuZiidkEnzpySRKqtRT2inqc 3x3elmUHhJvuZQvvY1CJ06e/hkHV+IL4Ev+Laza534NVJfM6XNA1xQJR+7eavI+U5avWGv swnf+k/zwU5uUCRwgxwYYfuLU+LbYvk= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=pIILLK6V; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=fButr8P1; dmarc=none; spf=pass (imf03.hostedemail.com: domain of jack@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=jack@suse.cz ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692870597; a=rsa-sha256; cv=none; b=Q68VJI4Ow3an5igxcmqB4Xi2ORSuQeDHNvubO2PUXJ/mWUjRT1+5sR71DDmrlJXOCn2z+Z efNG8u+trZzbKrCCFrpMFCUrFVH26YEyYzxxR+vVOnb/+kQUHeSRYtRVclBPbkqX642rVP f3/x4oPxVlaf3AHJf17BiimlgHdlgnc= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 8323820ABE; Thu, 24 Aug 2023 09:49:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1692870595; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=OLwPzBreyOpR95YcVVb3yFmDKybDs7swq9/uz2pOYw8=; b=pIILLK6VFVIGHfOid6dE0pz/PWtA7zHKr/Lal9VQKx1HvmUYqmnNOp48GblM2ukV+J4MJV qAuiAtQ7bIfvBAHpyWWf3ahO1SIrtCYI4Dn9nffO/+XqMwP0c5bvybg1JKaZtjcx2M3iS5 oF0RLgHTygiLRVe9UQuRPmQiXjtS0o8= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1692870595; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=OLwPzBreyOpR95YcVVb3yFmDKybDs7swq9/uz2pOYw8=; b=fButr8P1xPqo0MdN43U0wNMp6A8A0DEH+CUD0eDxqWGDZmqkMD0kdU1+oBQBCxi5sZF6Uo jUUPPVxveU2Z2KCw== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 64994132F2; Thu, 24 Aug 2023 09:49:55 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id k7MOF8Mn52QhIwAAMHmgww (envelope-from ); Thu, 24 Aug 2023 09:49:55 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id D7A14A0774; Thu, 24 Aug 2023 11:49:54 +0200 (CEST) Date: Thu, 24 Aug 2023 11:49:54 +0200 From: Jan Kara To: Qi Zheng Cc: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, Muchun Song , Jan Kara , linux-ext4@vger.kernel.org Subject: Re: [PATCH v5 31/45] jbd2,ext4: dynamically allocate the jbd2-journal shrinker Message-ID: <20230824094954.ndobdyabdxw3xvbc@quack3> References: <20230824034304.37411-1-zhengqi.arch@bytedance.com> <20230824034304.37411-32-zhengqi.arch@bytedance.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230824034304.37411-32-zhengqi.arch@bytedance.com> X-Rspam-User: X-Stat-Signature: oidysty4axdtozrb8asbfn7e9rzutu36 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 726BB20014 X-HE-Tag: 1692870597-277137 X-HE-Meta: U2FsdGVkX1+CsOaaGUoBFjLvcWfkZcyUOU0h3H+ctpFVeoAGNMvZI0lfaGhKYK3fGCrWVUMR14tt+GC1bZzkzOIRtlkV9aNKKUSb4TBN5sk8k1Qj5VccxKyo1eaA63Kbtyubc6eKPBbdjoyqo+kfUXHfxwIzMY7OEIFtEYOsA4C76PJs2f1b1K2GwpNYnWnPnDSbeqe2FTJQjHFXvLq7vYHcrncdmvQxhVjYs90VaLbcEX6ftD/nZFILig28cIo2+z9Va8O/RuTiAHUatfe2JUxd3G70WaqAJQ3jouITJGdxhGlHa2d4gv3E45gQQn6H3I8BqPtely4IycT7VNe7YLxGqWyYxOpt10t0Z9l+vx/ClGPq+mOR49BwDYf6dMXWyMsOCVJThiqlMoaEYNVzAzH/LWbWr2xrpj9i3EsE/7N6n9ewR4iXsE/XlwAGe+4jW2uE+LDjLjqQMzR8w3LO5vPO/4uAgg8BnXQMWmRT304ooL//AHmslmWUKM+fyzZB9q39yl7NTbX9Q/ygXeoETaUVsZDdpRhkcd/pznwIX6wZGs4HxvPhlrz0DSxkbWNGzit0QzY7rUlpe+aySlY0JvWvY3HSMB/vVa5/y0Belgha84rApz/MZ936ZVlHKyzX2dQaEHWKeyr4MbEeh7+k6QGssZCQUVNkov7VnVxguVbZfKsPBn0JNYz70pQ+ADDpHnDBBu9Q5dDCPa7vK+WmCTQyvn8wUXVYyemBWNmjFtHssi9jcMkCPSwaMUy+il0TyvTuNJpYQyWD0gyHDOFNVWaPzt/I1naqhHPdfl9v1y1+36lt1xmOaAdUc44RjAELQ79Nj+RDy7oA8B71iXOgBPlt8D+Th6pNiM63IM0w3X04XjN2l7SdgKwI3LHQxrG71lVX/i3Uyj2i058pcu8MOPkESpyy2duLKUwfQurHRixLYSl5Qvk+/KrjQhASjv+fiYfIRUk5BFCR+wKUQJr cyFvUeP0 etHfb0Kdo4wtIyKDrZ6MmerjhoLGUmDJBsP/IPRbdFB0IOXleJxk9fB3ztAQIgvGs0V1N0d+XyQptGGka8QySaWMowL3pZAEwLSxYw2sdwnHNAcSDH5bMQ2FGOMhCNr7wIWbR/6M/dflVZ36hzjnU+Iw0jo9+ECT6I+Hmq7Rs7SRlZhyAPys7v9dwJ6YwtYnTi9B4AL2Q3UDXrkXevxX8xAwZtMLnehU7+lFIvaxv7Ym8llkoZzCIza3ZZv/keE1ughZDaFn7lnYlQcGB5fLWseQWm1Qt9WW67YYApuUdjbtXhCFr+BzwFKf2oSiILBn55qfpm5R6QaZ4MsMewcQzZJdEr1sDhlIepvdkEptbVW3GHcOwHYQqFLKgRA== 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: On Thu 24-08-23 11:42:50, Qi Zheng wrote: > In preparation for implementing lockless slab shrink, use new APIs to > dynamically allocate the jbd2-journal shrinker, so that it can be freed > asynchronously via RCU. Then it doesn't need to wait for RCU read-side > critical section when releasing the struct journal_s. > > Signed-off-by: Qi Zheng > Reviewed-by: Muchun Song > CC: "Theodore Ts'o" > CC: Jan Kara > CC: linux-ext4@vger.kernel.org Looks good to me. Feel free to add: Acked-by: Jan Kara Honza > --- > fs/jbd2/journal.c | 30 +++++++++++++++++++----------- > include/linux/jbd2.h | 2 +- > 2 files changed, 20 insertions(+), 12 deletions(-) > > diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c > index 768fa05bcbed..75692baa76e8 100644 > --- a/fs/jbd2/journal.c > +++ b/fs/jbd2/journal.c > @@ -1290,7 +1290,7 @@ static int jbd2_min_tag_size(void) > static unsigned long jbd2_journal_shrink_scan(struct shrinker *shrink, > struct shrink_control *sc) > { > - journal_t *journal = container_of(shrink, journal_t, j_shrinker); > + journal_t *journal = shrink->private_data; > unsigned long nr_to_scan = sc->nr_to_scan; > unsigned long nr_shrunk; > unsigned long count; > @@ -1316,7 +1316,7 @@ static unsigned long jbd2_journal_shrink_scan(struct shrinker *shrink, > static unsigned long jbd2_journal_shrink_count(struct shrinker *shrink, > struct shrink_control *sc) > { > - journal_t *journal = container_of(shrink, journal_t, j_shrinker); > + journal_t *journal = shrink->private_data; > unsigned long count; > > count = percpu_counter_read_positive(&journal->j_checkpoint_jh_count); > @@ -1588,14 +1588,22 @@ static journal_t *journal_init_common(struct block_device *bdev, > goto err_cleanup; > > journal->j_shrink_transaction = NULL; > - journal->j_shrinker.scan_objects = jbd2_journal_shrink_scan; > - journal->j_shrinker.count_objects = jbd2_journal_shrink_count; > - journal->j_shrinker.seeks = DEFAULT_SEEKS; > - journal->j_shrinker.batch = journal->j_max_transaction_buffers; > - err = register_shrinker(&journal->j_shrinker, "jbd2-journal:(%u:%u)", > - MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); > - if (err) > + > + journal->j_shrinker = shrinker_alloc(0, "jbd2-journal:(%u:%u)", > + MAJOR(bdev->bd_dev), > + MINOR(bdev->bd_dev)); > + if (!journal->j_shrinker) { > + err = -ENOMEM; > goto err_cleanup; > + } > + > + journal->j_shrinker->scan_objects = jbd2_journal_shrink_scan; > + journal->j_shrinker->count_objects = jbd2_journal_shrink_count; > + journal->j_shrinker->seeks = DEFAULT_SEEKS; > + journal->j_shrinker->batch = journal->j_max_transaction_buffers; > + journal->j_shrinker->private_data = journal; > + > + shrinker_register(journal->j_shrinker); > > return journal; > > @@ -2170,9 +2178,9 @@ int jbd2_journal_destroy(journal_t *journal) > brelse(journal->j_sb_buffer); > } > > - if (journal->j_shrinker.flags & SHRINKER_REGISTERED) { > + if (journal->j_shrinker) { > percpu_counter_destroy(&journal->j_checkpoint_jh_count); > - unregister_shrinker(&journal->j_shrinker); > + shrinker_free(journal->j_shrinker); > } > if (journal->j_proc_entry) > jbd2_stats_proc_exit(journal); > diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h > index 52772c826c86..6dcbb4eb80fb 100644 > --- a/include/linux/jbd2.h > +++ b/include/linux/jbd2.h > @@ -886,7 +886,7 @@ struct journal_s > * Journal head shrinker, reclaim buffer's journal head which > * has been written back. > */ > - struct shrinker j_shrinker; > + struct shrinker *j_shrinker; > > /** > * @j_checkpoint_jh_count: > -- > 2.30.2 > -- Jan Kara SUSE Labs, CR