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 9534AC369A2 for ; Thu, 10 Apr 2025 01:50:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 48EBE6B024E; Wed, 9 Apr 2025 21:49:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CF3876B02A1; Wed, 9 Apr 2025 21:49:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7CAA66B02A2; Wed, 9 Apr 2025 21:49:57 -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 3031E6B024D for ; Wed, 9 Apr 2025 21:49:57 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 5EF661A19CF for ; Thu, 10 Apr 2025 01:49:58 +0000 (UTC) X-FDA: 83316453276.14.D44CDBC Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf12.hostedemail.com (Postfix) with ESMTP id ADDBF4000E for ; Thu, 10 Apr 2025 01:49:56 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=ipBwvmyv; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine); spf=none (imf12.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744249796; 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=IJXPCgsWY2AYZ+ERHJ5qQZaJVfrH0dcPo+w1wteI5Ag=; b=ns+/5Ep+OKQCcvQa3/P5TWYRRxM7/cq+sIIjFrTc8EdvhERBlsWC1rNoNXnvuUnNFseRIs iQ4J359IRNb3LEISxlTxkYJ3SbBOmNSgZ9ZSQuRb5RWUVO4+VjtDOioLKQvpMNjYfYKrmC IEZGbVuqss5NUbmVrhDTOqkiaOS1wIM= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744249796; a=rsa-sha256; cv=none; b=YP6dUGjVSrwl24YEIZ4iPyo2z9dXCnyXHE9m/I1QZQ1srQi2i+dzalZxy/Ok0IECCHDj8i XJR6nAIjNvh9pCrqRzx0FB7Cs/hKAkF8YNZMvC0EMhUF2e8CVBRhDWnC2wKWt8rc93VJkF wO+vYHarRDxBcXaZ3LbeihAEoxyhDZ8= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=ipBwvmyv; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=quarantine); spf=none (imf12.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org 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=IJXPCgsWY2AYZ+ERHJ5qQZaJVfrH0dcPo+w1wteI5Ag=; b=ipBwvmyv4g4pzBPiSz5QUDcBzq AOtFV3f6RHrv9qNMsPiWLlXHk0KRNOGrx4o0iqcNXtL+XXYJYoXwJGwkUKVjnxVFLEuXVjPSVotHj SGg2Q4NS6KTe8Zzo/MoOyLZKMbbIKuQ9KiDWJd56PjYD/DqdQmhbq7k3Cy/XazUH0PeMwkOCMJKmn J7vCSCXbe8pjh2LRYUGn3TUSWwGQH/GENSZPo1vx6r18czqaysbyjQa8LN8tn0udRXK6VV4Rt7SSJ +kvcKp+BHk0YcENBoAuFFeIKkaWGMU9Bg5YoEqG8ALCnuEWNez6FH2LXV8JPxBzxruzLFCfrxwFuE 2ZgTSy8w==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.98.2 #2 (Red Hat Linux)) id 1u2h35-00000008yvJ-3gUy; Thu, 10 Apr 2025 01:49:47 +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 3/8] fs/buffer: introduce __find_get_block_nonatomic() Date: Wed, 9 Apr 2025 18:49:40 -0700 Message-ID: <20250410014945.2140781-4-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 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Queue-Id: ADDBF4000E X-Rspamd-Server: rspam07 X-Stat-Signature: asowzfaq8okm3oa5a9mdeih4y97pw8bi X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspam: Yes X-HE-Tag: 1744249796-577614 X-HE-Meta: U2FsdGVkX1+di4XLMu3DaEb//ZFisKm1NP9lbpK6OtzQ58Wz4UzFWWU48iJWRU9aHNPdHUGq07BBqsCewlR3YFTKW92O6IRDAx5EF/6AU51buOjQIooQfVM9Dw80tbRafDUesoP4AvJhqu0Z2JyuDLFIFtKox5LHq8yhWl0r+6PwG4k68zw1YfKnX1YmPXrRU1dADnNLT1MpsWXhDwUF8FsoiNFgWqUcN9ypKlW902QCHSpQThagLaAu+BbX2ORMG1jtA8zQfPd+ySub9Zw60wya9XiZpcVyFjBRQVGdEDEzIk1d8j7jFYhkoPKnP7wTq1sI04Hs+7xSn7a49j2l1V5EztzVzCgrzuJOTblifc+WxmLPLMD6yjbPq8CsKFSpTf31gDAYNnZyYYmnuMwlmvu/y/2q/3/TkNTDr2pOgFrQhpUpfPdRMjKWEfqI9tYP41PPuVkOm8e/zgA89g7133KDgT37KUJIkRrqHcQLvKWy5Ak6J4B73EHHNe2SiKv8eSLd+QwXwd3wytGaRU0Lt0n8/L4dqfn/yjv7qrINpD5eBer/pFZ9CO0jBK6BHAY9EKopTpixXIyUrwaaa8Xy3agmsOM5fOm/05nbEGR/AVx0W7PT806u99YRca8JJkQbXTw0W0CBmYxNDqU+qdQglLfYpzyu6fjBPAZabJYZ4aXkHtlggJlTxw/ewMIkfuXpK+hCL4e9xGw9zVa+r77dKjkGgnP2c7CaBo/r4U2/gY+ZG5yB3gRFKpIdy712z9myU9KadUtYTMF0Wc8zMia5smJw9JkW/+fbz9C5Ki3jOJAHwApUNboLBmgLVkg826zkKOyv4xsuiTzKPCDTnoyst1k83Hjjy5mz6YaYYU0BGlPwtx5IuQkM2gE0YefYuUhPagh8XXyyOBvoPOpF3dGEVaL9lHMd99KegIV8mQblCkrjF2XFoDaOg/mHEoKQev5IueyfdicZ+O9QYToNOv4 Wp6d+JPb itHdeofsk/3fnxtoKASzAYz5Mzbue6yTiVmFZes0e5i3IHW1h1KLmtXMcbb2RLIuuJKF1a+jcF7As0noSNdA7SxhHCZKok8FeGP5y2p2jfgujVdwpV0KYrV+MbC5ctiuzJUJ8ZuG21Qmy8B/K3A6Is3z88IImfQQRYPsp86tc2+x8w/UQGgtssTv1wvvrEAX32pLf+b3L+6/Vd8r+d2zWu2ltRMmy9mU4T4gdtb6DuuVdX+NU3xYfkJSgxPEMhFiI374zTOTl1lsLuIwkazBina2JRDjaKfGaSQ24k0iZ3WWj/GpZvLQhVWQlRFqLNQaNR02Vx0kKGYFKEVHhtiSEZuA2EsGdCXXyMhubslEgk0oSi3w1zvLeJQ/T3Ri04RM++gh62NfyoXbnzmycOk/EA1W/XfI5mw26qjiTk/HS/YNTi+AsACYOw3MRiodRilD6kbBysEPGrNn2LSRKSvx6ARIH7mPaKQZf2KDQxpaq5SIFgcYa3h3m46RSdi975KxWD5o5vUUJSPp5+uEFwZchAs+eCNqqw15Sp4IDOg7DVIWJ4p9Rg/ft5B6NHM5sR6XUnTiYWGNbQaDFOiHO1Wl7O/qCVkyduVgdjTqx 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 Callers that do not require atomic context for pagecache lookups can use this flavor to avoid the unnencesary contention on the blockdev mapping i_private_lock as well as waiting on noref migration. Convert local caller write_boundary_block() which already takes the buffer lock as well as bdev_getblk() depending on the respective gpf flags. Either way there are no currently changes in semantics. Signed-off-by: Davidlohr Bueso Signed-off-by: Luis Chamberlain --- fs/buffer.c | 19 +++++++++++++++++-- include/linux/buffer_head.h | 2 ++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index 5a1a37a6840a..07ec57ec100e 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -662,7 +662,8 @@ EXPORT_SYMBOL(generic_buffers_fsync); void write_boundary_block(struct block_device *bdev, sector_t bblock, unsigned blocksize) { - struct buffer_head *bh = __find_get_block(bdev, bblock + 1, blocksize); + struct buffer_head *bh = __find_get_block_nonatomic(bdev, bblock + 1, + blocksize); if (bh) { if (buffer_dirty(bh)) write_dirty_buffer(bh, 0); @@ -1418,6 +1419,15 @@ __find_get_block(struct block_device *bdev, sector_t block, unsigned size) } EXPORT_SYMBOL(__find_get_block); +/* same as __find_get_block() but allows sleeping contexts */ +struct buffer_head * +__find_get_block_nonatomic(struct block_device *bdev, sector_t block, + unsigned size) +{ + return find_get_block_common(bdev, block, size, false); +} +EXPORT_SYMBOL(__find_get_block_nonatomic); + /** * bdev_getblk - Get a buffer_head in a block device's buffer cache. * @bdev: The block device. @@ -1435,7 +1445,12 @@ EXPORT_SYMBOL(__find_get_block); struct buffer_head *bdev_getblk(struct block_device *bdev, sector_t block, unsigned size, gfp_t gfp) { - struct buffer_head *bh = __find_get_block(bdev, block, size); + struct buffer_head *bh; + + if (gfpflags_allow_blocking(gfp)) + bh = __find_get_block_nonatomic(bdev, block, size); + else + bh = __find_get_block(bdev, block, size); might_alloc(gfp); if (bh) diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index f0a4ad7839b6..2b5458517def 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h @@ -222,6 +222,8 @@ void __wait_on_buffer(struct buffer_head *); wait_queue_head_t *bh_waitq_head(struct buffer_head *bh); struct buffer_head *__find_get_block(struct block_device *bdev, sector_t block, unsigned size); +struct buffer_head *__find_get_block_nonatomic(struct block_device *bdev, + sector_t block, unsigned size); struct buffer_head *bdev_getblk(struct block_device *bdev, sector_t block, unsigned size, gfp_t gfp); void __brelse(struct buffer_head *); -- 2.47.2