From nobody Mon Feb 9 17:34:56 2026 Received: from mx9.didiglobal.com (mx9.didiglobal.com [111.202.70.124]) by smtp.subspace.kernel.org (Postfix) with SMTP id 643BA3D81; Mon, 21 Apr 2025 10:51:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=111.202.70.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745232666; cv=none; b=pF352+Bot2Pq+LKdOVJX6Z+NvqsJ3pFWO6NUgIHlDujhrkW5A5CAV9xDeWStvKAr+9kNllwPdxr78XJhlUEmjtzsuD3KVUnlI/2ToiAbgg2i2n6fH6J/fa25SkTdUZviDMPKimTGtAOGiXqj/vjAdPO1V6F9CFsuGAmrHZsypvM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745232666; c=relaxed/simple; bh=McnoqsM7OwZZHTfj0aes88UGnFIMmmjWOMz06TcW13Y=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:Content-Type: MIME-Version; b=M4mSZxGN53Q/ZXXPbWOBa9Jk94PeQFL1jKG4y4vdybh5qaQcFX+KP9P5phRN57JBwfj/EJr+vX/XnmTrQAjZL2+WcbSgaQVSAOe7ssEDXUkTV380S62d1On0QLM0TCiCApkHPkwNOLl/pNPqs/392k3agkCC9wco4xRdyqUdWpc= 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=hP+gH1aW; arc=none smtp.client-ip=111.202.70.124 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="hP+gH1aW" Received: from mail.didiglobal.com (unknown [10.79.71.37]) by mx9.didiglobal.com (MailData Gateway V2.8.8) with ESMTPS id 4D9EA18B81F549; Mon, 21 Apr 2025 18:50:06 +0800 (CST) Received: from BJ03-ACTMBX-09.didichuxing.com (10.79.71.36) by BJ03-ACTMBX-01.didichuxing.com (10.79.71.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.10; Mon, 21 Apr 2025 18:50:31 +0800 Received: from BJ03-ACTMBX-07.didichuxing.com (10.79.71.34) by BJ03-ACTMBX-09.didichuxing.com (10.79.71.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.10; Mon, 21 Apr 2025 18:50:30 +0800 Received: from BJ03-ACTMBX-07.didichuxing.com ([fe80::b00b:de35:2067:9787]) by BJ03-ACTMBX-07.didichuxing.com ([fe80::b00b:de35:2067:9787%7]) with mapi id 15.02.1748.010; Mon, 21 Apr 2025 18:50:30 +0800 X-MD-Sfrom: chentaotao@didiglobal.com X-MD-SrcIP: 10.79.71.37 From: =?gb2312?B?s8LMzszOIFRhb3RhbyBDaGVu?= To: "tytso@mit.edu" , "adilger.kernel@dilger.ca" , "akpm@linux-foundation.org" , "willy@infradead.org" CC: "linux-ext4@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-fsdevel@vger.kernel.org" , "linux-mm@kvack.org" , =?gb2312?B?s8LMzszOIFRhb3RhbyBDaGVu?= Subject: [PATCH 2/3] ext4: implement IOCB_DONTCACHE handling in write operations Thread-Topic: [PATCH 2/3] ext4: implement IOCB_DONTCACHE handling in write operations Thread-Index: AQHbsqsziv0lExfK60SVnrHOwWRNng== Date: Mon, 21 Apr 2025 10:50:30 +0000 Message-ID: <20250421105026.19577-3-chentaotao@didiglobal.com> In-Reply-To: <20250421105026.19577-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=1745232628; bh=McnoqsM7OwZZHTfj0aes88UGnFIMmmjWOMz06TcW13Y=; h=From:To:CC:Subject:Date:Message-ID:Content-Type; b=hP+gH1aWxLE1wVWUYHWLzI4LnWSwZmg6wsn4feGMWV44Vlz4mS2UZBQUJrWnFJUlb N0wINT8uMIhVDMbhWKrohD9tj/aug9Il29N5MHpFFmT0kUehl7pASjGVgHNuNFzRGs vGdxQCIDwGhhf/JSXQwzw6XX6Gngac3+XBQ47bM8= Content-Type: text/plain; charset="utf-8" From: Taotao Chen Implement IOCB_DONTCACHE flag handling in ext4 write paths: 1. Check IOCB_DONTCACHE flag passed via fsdata 2. Propagate FGP_DONTCACHE to page cache operations Existing write behavior remains unchanged when IOCB_DONTCACHE is not set. Signed-off-by: Taotao Chen --- fs/ext4/inode.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 94c7d2d828a6..787dd152a47e 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -1147,16 +1147,22 @@ static int ext4_write_begin(struct file *file, stru= ct address_space *mapping, { struct inode *inode =3D mapping->host; int ret, needed_blocks; + int iocb_flag; handle_t *handle; int retries =3D 0; struct folio *folio; pgoff_t index; + fgf_t fgp =3D FGP_WRITEBEGIN; unsigned from, to; =20 ret =3D ext4_emergency_state(inode->i_sb); if (unlikely(ret)) return ret; =20 + iocb_flag =3D (int)(uintptr_t)(*fsdata); + if (iocb_flag & IOCB_DONTCACHE) + fgp |=3D FGP_DONTCACHE; + trace_ext4_write_begin(inode, pos, len); /* * Reserve one block more for addition to orphan list in case @@ -1184,7 +1190,7 @@ static int ext4_write_begin(struct file *file, struct= address_space *mapping, * the folio (if needed) without using GFP_NOFS. */ retry_grab: - folio =3D __filemap_get_folio(mapping, index, FGP_WRITEBEGIN, + folio =3D __filemap_get_folio(mapping, index, fgp, mapping_gfp_mask(mapping)); if (IS_ERR(folio)) return PTR_ERR(folio); @@ -2917,6 +2923,8 @@ static int ext4_da_write_begin(struct file *file, str= uct address_space *mapping, struct folio **foliop, void **fsdata) { int ret, retries =3D 0; + int iocb_flag; + fgf_t fgp =3D FGP_WRITEBEGIN; struct folio *folio; pgoff_t index; struct inode *inode =3D mapping->host; @@ -2928,10 +2936,15 @@ static int ext4_da_write_begin(struct file *file, s= truct address_space *mapping, index =3D pos >> PAGE_SHIFT; =20 if (ext4_nonda_switch(inode->i_sb) || ext4_verity_in_progress(inode)) { + ret =3D ext4_write_begin(file, mapping, pos, len, foliop, fsdata); *fsdata =3D (void *)FALL_BACK_TO_NONDELALLOC; - return ext4_write_begin(file, mapping, pos, - len, foliop, fsdata); + return ret; } + + iocb_flag =3D (int)(uintptr_t)(*fsdata); + if (iocb_flag & IOCB_DONTCACHE) + fgp |=3D FGP_DONTCACHE; + *fsdata =3D (void *)0; trace_ext4_da_write_begin(inode, pos, len); =20 @@ -2945,7 +2958,7 @@ static int ext4_da_write_begin(struct file *file, str= uct address_space *mapping, } =20 retry: - folio =3D __filemap_get_folio(mapping, index, FGP_WRITEBEGIN, + folio =3D __filemap_get_folio(mapping, index, fgp, mapping_gfp_mask(mapping)); if (IS_ERR(folio)) return PTR_ERR(folio); --=20 2.34.1