From nobody Tue Oct 7 21:39:56 2025 Received: from mx10.didiglobal.com (mx10.didiglobal.com [111.202.70.125]) by smtp.subspace.kernel.org (Postfix) with SMTP id CDA3527AC37; Mon, 7 Jul 2025 07:00:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=111.202.70.125 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751871662; cv=none; b=VowB2kPCXyHwJ5q5419mRmu6Gtnk9dGRiJlZZhQvYAeoDXY5+u98SKbFLmi6VV2HwEMLkRRjZ/SIJpg9pXijnyd7PgkeN6DLRm0XC8/PxCuOhvZjpa3wod5Tb0ooAlTcPoHgvilMF74/6hBJK5ZMMhygZ1Kq53oNcFaGqVQvHgY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751871662; c=relaxed/simple; bh=2JZTlbnqJn+HPRGwEk8v3nLMgt4gjj2zA82WVyb9JJY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:Content-Type: MIME-Version; b=FjenZofOgbQRdcrJ3lauaubE9/xp3SeuqXEpaM1KhEjrg07eYWk+RizeN9dJYN6tTd8Ulfw4rHmw4aqUYu1yYSL4JS2SwEEj6Bc5z+GTsFS01fsRH9FDiP/l1Sl9vOIYTrBZfrPK33ceApaWKQBmrZzvh1RIlEQwVnnkSP2t984= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=didiglobal.com; spf=pass smtp.mailfrom=didiglobal.com; dkim=pass (1024-bit key) header.d=didiglobal.com header.i=@didiglobal.com header.b=gs2FiokD; arc=none smtp.client-ip=111.202.70.125 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=didiglobal.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=didiglobal.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=didiglobal.com header.i=@didiglobal.com header.b="gs2FiokD" Received: from mail.didiglobal.com (unknown [10.79.64.21]) by mx10.didiglobal.com (MailData Gateway V2.8.8) with ESMTPS id 73645188C71FFE; Mon, 7 Jul 2025 14:59:49 +0800 (CST) Received: from BJ02-ACTMBX-09.didichuxing.com (10.79.65.18) by BJ01-ACTMBX-02.didichuxing.com (10.79.64.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.10; Mon, 7 Jul 2025 15:00:33 +0800 Received: from BJ03-ACTMBX-07.didichuxing.com (10.79.71.34) by BJ02-ACTMBX-09.didichuxing.com (10.79.65.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.10; Mon, 7 Jul 2025 15:00:33 +0800 Received: from BJ03-ACTMBX-07.didichuxing.com ([fe80::2e1a:dd47:6d25:287e]) by BJ03-ACTMBX-07.didichuxing.com ([fe80::2e1a:dd47:6d25:287e%7]) with mapi id 15.02.1748.010; Mon, 7 Jul 2025 15:00:33 +0800 X-MD-Sfrom: chentaotao@didiglobal.com X-MD-SrcIP: 10.79.64.21 From: =?gb2312?B?s8LMzszOIFRhb3RhbyBDaGVu?= To: "tytso@mit.edu" , "hch@infradead.org" , "adilger.kernel@dilger.ca" , "willy@infradead.org" , "brauner@kernel.org" , "jani.nikula@linux.intel.com" , "rodrigo.vivi@intel.com" , "tursulin@ursulin.net" , "airlied@gmail.com" CC: "linux-fsdevel@vger.kernel.org" , "linux-ext4@vger.kernel.org" , "linux-block@vger.kernel.org" , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , "linux-mm@kvack.org" , "linux-doc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "chentao325@qq.com" , "frank.li@vivo.com" , =?gb2312?B?s8LMzszOIFRhb3RhbyBDaGVu?= Subject: [PATCH v4 4/5] mm/filemap: add write_begin_get_folio() helper function Thread-Topic: [PATCH v4 4/5] mm/filemap: add write_begin_get_folio() helper function Thread-Index: AQHb7wzV/NCTl0Y/WEyIyiHtat/IIg== Date: Mon, 7 Jul 2025 07:00:33 +0000 Message-ID: <20250707070023.206725-5-chentaotao@didiglobal.com> In-Reply-To: <20250707070023.206725-1-chentaotao@didiglobal.com> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=didiglobal.com; s=2025; t=1751871611; bh=2JZTlbnqJn+HPRGwEk8v3nLMgt4gjj2zA82WVyb9JJY=; h=From:To:CC:Subject:Date:Message-ID:Content-Type; b=gs2FiokDPwfz7bfDI0bB5uIa5k9gi5N5G+EexPh+mke8Fok5OqljHJKhOAsuPL2aS hCUWofXRCPpoglP3NDps/SqOfwbwNF1Y84LVrHF6os5mlxXS83LYi9X9gb7R/bdujH znYVuNrX9Wxddr/bxsd5aRHBoV+ED4vmSSaTBYbY= Content-Type: text/plain; charset="utf-8" From: Taotao Chen Add write_begin_get_folio() to simplify the common folio lookup logic used by filesystem ->write_begin() implementations. This helper wraps __filemap_get_folio() with common flags such as FGP_WRITEBEGIN, conditional FGP_DONTCACHE, and set folio order based on the write length. Part of a series refactoring address_space_operations write_begin and write_end callbacks to use struct kiocb for passing write context and flags. Signed-off-by: Taotao Chen --- include/linux/pagemap.h | 3 +++ mm/filemap.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index e63fbfbd5b0f..cbf8539ba11b 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -749,6 +749,9 @@ struct folio *__filemap_get_folio(struct address_space = *mapping, pgoff_t index, fgf_t fgp_flags, gfp_t gfp); struct page *pagecache_get_page(struct address_space *mapping, pgoff_t ind= ex, fgf_t fgp_flags, gfp_t gfp); +struct folio *write_begin_get_folio(const struct kiocb *iocb, + struct address_space *mapping, + pgoff_t index, size_t len); =20 /** * filemap_get_folio - Find and get a folio. diff --git a/mm/filemap.c b/mm/filemap.c index ba089d75fc86..9520f65c287a 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2026,6 +2026,36 @@ struct folio *__filemap_get_folio(struct address_spa= ce *mapping, pgoff_t index, } EXPORT_SYMBOL(__filemap_get_folio); =20 + +/** + * write_begin_get_folio - Get folio for write_begin with flags + * @iocb: kiocb passed from write_begin (may be NULL) + * @mapping: the address space to search in + * @index: page cache index + * @len: length of data being written + * + * This is a helper for filesystem write_begin() implementations. + * It wraps __filemap_get_folio(), setting appropriate flags in + * the write begin context. + * + * Returns a folio or an ERR_PTR. + */ +struct folio *write_begin_get_folio(const struct kiocb *iocb, + struct address_space *mapping, + pgoff_t index, size_t len) +{ + fgf_t fgp_flags =3D FGP_WRITEBEGIN; + + fgp_flags |=3D fgf_set_order(len); + + if (iocb && iocb->ki_flags & IOCB_DONTCACHE) + fgp_flags |=3D FGP_DONTCACHE; + + return __filemap_get_folio(mapping, index, fgp_flags, + mapping_gfp_mask(mapping)); +} +EXPORT_SYMBOL(write_begin_get_folio); + static inline struct folio *find_get_entry(struct xa_state *xas, pgoff_t m= ax, xa_mark_t mark) { --=20 2.34.1