From patchwork Thu Apr 10 01:49:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 14045787 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 3F6A1C369A2 for ; Thu, 10 Apr 2025 02:26:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2D36C28008E; Wed, 9 Apr 2025 22:26:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2812428008A; Wed, 9 Apr 2025 22:26:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0FCB028008E; Wed, 9 Apr 2025 22:26:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id DF84528008A for ; Wed, 9 Apr 2025 22:26:32 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id D7B6012193F for ; Thu, 10 Apr 2025 02:26:33 +0000 (UTC) X-FDA: 83316545466.02.A888B5C Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf07.hostedemail.com (Postfix) with ESMTP id F1D6D40003 for ; Thu, 10 Apr 2025 02:26:31 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=phLch9jc; spf=none (imf07.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744251992; h=from:from:sender: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=xzMVQnlSZLVrjFGORLU1U+D4R5k/13V//cM2BeZORKg=; b=Nh9+5FTzH0ZGsfLQRy+EuScnTz031rv3xDJt0Se2GbEs3rKOmd7vhXlXo6D1R8BixdA12e DEfHu0PkeHPbBygsCvu1WUbBExiIAGBM3zBUbTE6+mF755Bv/F9pQNvDcAJMyEBGx+re+B TBG6f/I+rmMLhhp9N8PWJ1U4bj/TgIY= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=phLch9jc; spf=none (imf07.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744251992; a=rsa-sha256; cv=none; b=0ZCIInw6RzTA7gTj4saQ2Ei0lFy5B8zzJEtKQDyvK9B253XyU6NMslblH6aeSFqznoFr5f +EI1Pv/5Bqdw2uBVWyBwpj/Lq4t5a2OFU3t7hIsX2fu2sLquw+WCmpmyQ47xdYSZhANbWn yR/j+YiUdRnVkcOdloMYC3ZAdY042i4= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=xzMVQnlSZLVrjFGORLU1U+D4R5k/13V//cM2BeZORKg=; b=phLch9jcit+F/148sP3LkjXCiZ /KwpKJXZqxT7edP+btyTcTvrMUZl1GQP0pguCo6GmdzIW16Yke7+tI3/Wv2kifqdyRUdpjwxHY8Kf Ag9kTDteSqT75mrwU89HyrAHr2oWdnrq6YGjXQqjR6tzKiaa+EX7F+L3uusKkSxmIW1G+d8jQ3CvE kZ9BVRX8/Yk/up+pVzR+ZGHbejP+a2cJTT/5JSWQ92WS4LMV88u1PCvKXGJu9GX5xl8lAp9vQeQ0d kmZIn8BP+CjXxaDUH4zaTbywssOP/ELkdlO3d4/pE4du3xn+AQ9Fmx98q8lH2ZKnk7/5TPZjsMIB5 VXkVN5wg==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2h36-00000008yvS-0MvB; Thu, 10 Apr 2025 01:49:48 +0000 From: Luis Chamberlain To: brauner@kernel.org, jack@suse.cz, tytso@mit.edu, adilger.kernel@dilger.ca, linux-ext4@vger.kernel.org, riel@surriel.com Cc: dave@stgolabs.net, willy@infradead.org, hannes@cmpxchg.org, oliver.sang@intel.com, david@redhat.com, axboe@kernel.dk, hare@suse.de, david@fromorbit.com, djwong@kernel.org, ritesh.list@gmail.com, linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, gost.dev@samsung.com, p.raghav@samsung.com, da.gomez@samsung.com, mcgrof@kernel.org Subject: [PATCH v2 7/8] mm/migrate: enable noref migration for jbd2 Date: Wed, 9 Apr 2025 18:49:44 -0700 Message-ID: <20250410014945.2140781-8-mcgrof@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250410014945.2140781-1-mcgrof@kernel.org> References: <20250410014945.2140781-1-mcgrof@kernel.org> MIME-Version: 1.0 X-Rspamd-Queue-Id: F1D6D40003 X-Stat-Signature: 4cx4o7wbjd64met7ipxpfyreuxjwwhoq X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspam: Yes X-HE-Tag: 1744251991-780240 X-HE-Meta: U2FsdGVkX1+UdaxAAZz9TUppfSHDl+BAyv6uzHpXX1PjfDRtSR1Y1TCr1Lvn2VFa1oT0s5t7MErk5/nH+QcNup8J7EEE2wP2xKE+Wk7facjVmuH7Bnu6SiPw43bNHR0k5S8HYtypETyqjpA1AHXRghIRmupyHUmVMmBQZ2LlndK/0Pr1VBqaEQAcEItSIu/nXQiP36yMtggAEPIw8eW5wNU9FHc3n/8Moe+4QeLQzispDCCysCnftSEhOyM/grPqtTn1jucSB0FdxxnqiJexs17ltpc4eTmTn7t0u0mgk1J1oT+6u68Ly4KeFi9oHQBUQe1TCP/MZOWOC9/0GopXS6xsW/K0qPCBN25UcflGpVlmKuWH0nv9jwyq7eTnEtXkN6lFP/CSqwZo8eo0wGSAG64mnmXZFcvFTl+niyP7k2mYUqzwlhFrxEmEv2Dpe3Vmz8SkBCYB5PhASOVNZDNXiOsAyiOzt0NndebncQv6Oqta4hin1s8VOECTyVqjduW38eSbVNSfsQ4bcqMQ5UwX++g02/AL1KzumsWqyniEYEj4hN3SErVQ5L/P79M+uk8dZyRk4Xn8dEiKp9bQbhF0D1u4c7oGkqboYdoPyKnp/Dxl8rz5grmdaDh+BDYsOtKrblCnjEFIYPpNCO6pp+XwwZ+GOtULLE6TWkIs8DCDGzW9yc0oDKy2bMzl91XYZU2V2kNYdaFM3ESaNz9sMAxOT2HbkV/gMC6KBESgs5eYQAjM7aRQtfjZMm2+neLQRHrrUCyX1A6ODJXO9m2wCcV2oTMw6G296cIK41Mor5DMeSbVQx7g4UY5QLu8l8nt1VILsOi9RgQUHdWhRzKNpJob64ooVBilW8FWQBoJ+LvlV5lGYi4T/n96d1BwW9sxVdql51lcyAAyFN526tWkYG++g1VkuLU6NRTtAlnU7L2MthlubTkuCwrsTFHOxwoMUgP4fwJeJVAfO0VLxbln1UV p9ioBTQg LePYc202PnVi1CCjaKL/17zJKdZi144fNHV/l2l61MRXieHxNYg7wnyurAM5v7yL0OlRuoC8/jh2LxtAZe3LN64wKHroudV9FsrnwKd3SanRtW0g1B0KhCeZZRZbUDUNMNrQVWFZshRlLfujfOX5NnWu4G+bfVAGgJq8G8sF4W+Py4XXM3wwjzht5tTWyGGyYN3OPXF22MAhKYHolqipP8FmEltsYiVyH7kkCXpHmLjAoHPk7Ffir0nSsAFc0wh19Sjhx+mE7DX1SSRjnunimPUBXpfS6tPleW1YP6R7wFwHLCzD7QM9WiwA7sJ2AaucTZUEoKhbfMQpELEVDhT6qWsxtKOVPzyrG17mMp5US9qOf1m+IjsZHNozHklGGonaCe9/xOQXpBG1ItBzxJ0v9IP2+Qk6onbwB9YbncExXHV4ZOm848Y6OzTuJmWYMe/rYPXUgZ6jvNpv9dCuwUfy3ngjoRDeRDK/DXIDsPmyhWOq5Oh//ZnbKNI3jVE1iemhJaMYUjVeXvDNaFChjOmanoyJBzX0orehipkUkBexzL0YcybEKCk+hUR1wyQ== 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: List-Subscribe: List-Unsubscribe: From: Davidlohr Bueso Add semantics to enable future optimizations for buffer head noref jbd2 migration. This adds a new BH_Migrate flag which ensures we can bail on the lookup path. This should enable jbd2 to get semantics of when a buffer head is under folio migration, and should yield to it and to eventually remove the buffer_meta() check skipping current jbd2 folio migration. Suggested-by: Jan Kara Co-developed-by: Luis Chamberlain Signed-off-by: Davidlohr Bueso Signed-off-by: Luis Chamberlain --- fs/buffer.c | 12 +++++++++++- fs/ext4/ialloc.c | 3 ++- include/linux/buffer_head.h | 1 + mm/migrate.c | 4 ++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index 07ec57ec100e..753fc45667da 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -211,6 +211,15 @@ __find_get_block_slow(struct block_device *bdev, sector_t block, bool atomic) head = folio_buffers(folio); if (!head) goto out_unlock; + /* + * Upon a noref migration, the folio lock serializes here; + * otherwise bail. + */ + if (test_bit_acquire(BH_Migrate, &head->b_state)) { + WARN_ON(folio_locked); + goto out_unlock; + } + bh = head; do { if (!buffer_mapped(bh)) @@ -1393,7 +1402,8 @@ lookup_bh_lru(struct block_device *bdev, sector_t block, unsigned size) /* * Perform a pagecache lookup for the matching buffer. If it's there, refresh * it in the LRU and mark it as accessed. If it is not present then return - * NULL + * NULL. Atomic context callers may also return NULL if the buffer is being + * migrated; similarly the page is not marked accessed either. */ static struct buffer_head * find_get_block_common(struct block_device *bdev, sector_t block, diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index 38bc8d74f4cc..e7ecc7c8a729 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c @@ -691,7 +691,8 @@ static int recently_deleted(struct super_block *sb, ext4_group_t group, int ino) if (!bh || !buffer_uptodate(bh)) /* * If the block is not in the buffer cache, then it - * must have been written out. + * must have been written out, or, most unlikely, is + * being migrated - false failure should be OK here. */ goto out; diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 8db10ca288fc..5559b906b1de 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h @@ -34,6 +34,7 @@ enum bh_state_bits { BH_Meta, /* Buffer contains metadata */ BH_Prio, /* Buffer should be submitted with REQ_PRIO */ BH_Defer_Completion, /* Defer AIO completion to workqueue */ + BH_Migrate, /* Buffer is being migrated (norefs) */ BH_PrivateStart,/* not a state bit, but the first bit available * for private allocation by other entities diff --git a/mm/migrate.c b/mm/migrate.c index 32fa72ba10b4..8fed2655f2e8 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -851,6 +851,8 @@ static int __buffer_migrate_folio(struct address_space *mapping, bool busy; bool invalidated = false; + VM_WARN_ON_ONCE(test_and_set_bit_lock(BH_Migrate, + &head->b_state)); recheck_buffers: busy = false; spin_lock(&mapping->i_private_lock); @@ -884,6 +886,8 @@ static int __buffer_migrate_folio(struct address_space *mapping, bh = bh->b_this_page; } while (bh != head); unlock_buffers: + if (check_refs) + clear_bit_unlock(BH_Migrate, &head->b_state); bh = head; do { unlock_buffer(bh);