From nobody Fri Apr 3 11:13:48 2026 Received: from mx0b-00364e01.pphosted.com (mx0b-00364e01.pphosted.com [148.163.139.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B525C286430 for ; Wed, 18 Feb 2026 21:33:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.139.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771450434; cv=none; b=UAGXVDEH1tsnFwKcdxXCDoaTCwUAI87/A4oBw+vrOTorVdI5Ouj84t5hD5TFCN4NVsZyWehL9mWgqJoU/rh1FfVjCQF8M40Qd48UXSzSBHs+by003xi/qOUtRQjtJJBZRxHH688Ukik0grGCbM0CEXOAbIj0hL1CpOEpfWgfYbM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771450434; c=relaxed/simple; bh=T0LvtdehGbkNJTSiNQgmirD033nsR1VjUZyYykwDeYI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=jn8zNajHW0imInM5Bj/bic6pTbayfdDMsthsaZMIAtMHYJuWbHShDurWmBB+IXtNMFs7T6EnCx5giimavQ0e9DiwYzwkPbcBgk8YEpPlQh8ZXbOvT9P36TSsVskZbwiDnRt/rigxjKxdv9oPZD+4drEED5oBo9bIJE2u2pZgrbQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu; spf=pass smtp.mailfrom=columbia.edu; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b=KeuNmF5o; arc=none smtp.client-ip=148.163.139.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=columbia.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=columbia.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=columbia.edu header.i=@columbia.edu header.b="KeuNmF5o" Received: from pps.filterd (m0167075.ppops.net [127.0.0.1]) by mx0b-00364e01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61ILDQAY1788804 for ; Wed, 18 Feb 2026 16:13:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=columbia.edu; h= cc:content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=pps01; bh=uuJ79dh9olk4pYGV3v3Dl4Z5kR JT1ZZ5CX7FO3lNziY=; b=KeuNmF5oPATHpJ95S8DRfxBbTUWTy53j/ULgNAxQWU 0ybJCdDUX8KamSqaD++34v507hflbquC/BwZaas9fSXXivIpGKw/MSm+qUZUB5By Zg47BJ93bNc1Msqqr18QqBYryLWctBDCM/7OfotBLr82TvVNoq6nw5xOFTPojuE6 njW9YWrIVgH9yBajGp7dN5y+dpo8AST5XOhyH8M7rHqFE1Q4LU7Goaj18A3+4DnO cxsp6MVO19RCoKXTk43qGsZYKR4eaYV7RSul6t5XySvt1JTiLN4rLf+pFjT3XU8r lxRdk6Edk9tpF2NfOCzmYVt6vUvNEw8JTi5xsF+H9GdQ== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0b-00364e01.pphosted.com (PPS) with ESMTPS id 4cdk3318hb-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 18 Feb 2026 16:13:34 -0500 (EST) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-503810dba87so26513131cf.1 for ; Wed, 18 Feb 2026 13:13:34 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771449205; x=1772054005; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=uuJ79dh9olk4pYGV3v3Dl4Z5kRJT1ZZ5CX7FO3lNziY=; b=w9gCZ65WnnLNcIe0zKK8h3XK9IpNIHpGlr8bDIdV3yyA3yOvRfjfNYs+9RDBu4vZZs 54ENqAIYiTsLa9BsohhCyxSHh2we+dnL5m908irgcTNHDLkzU3ySHjGsKIYEWl0A8CfQ dVBZqO6nzWMpsnzxjIrqUHBuc99vapkMHwoI4F8+3V4NqEFhLtIRTaomjbzg7hJjOq52 q5QLGmtRrTy0JY9AluAq+4HNB9gqrKelOi5knKeXmlhgcKnDklQ6ciE98UAUWI3Cbrou 9F415dhEGeCj3+xHpnl5z00wJ2/HV1R4h8M65eYM0fJH6AMh2YzVr9twX7r3Rj3Kxxmb 6+6A== X-Forwarded-Encrypted: i=1; AJvYcCU23rGwrtvJNlkCPUaeNSyCcE0A2kvH79OP6o4R9aYkKvkeANrW0boYkE9ResNaJkBb01eYqnSVLhW9/yw=@vger.kernel.org X-Gm-Message-State: AOJu0YxAlwBm2tDrk6O0jS+S/yKJSVpGi6eNrL/NphCd4960GqhPK1f+ s5N+5iFjjIu1EMoFXOhfb+FljV6DShmlM61hnIUf3EJqysVrGVxskYGYWO2VvXtrySjZKF0WfVF 5lKYs90KqNa11itx5RoqANwX2Mb2UexKWCYxAoC5yp1V+Tk3BbmHGe2Ile3PSRQ== X-Gm-Gg: AZuq6aJJQC7b2wvTXTbNT2zL7CPtvAHSkZNC9n2fGKp+EGMMnZobshx4Lkr0Wh1W1gX gW93ibRIiMyA6KGtcohT5up0SEh5/7IVl1NlmRCppZFxFSG1Oxi6Go2mMzvhqWWE5GBUbEI+DMh eaXsl2yKWgW+P6DKp3QsEQL09MVMoJ15yAAruv7S44LRFyhkHGrh3gaqSk6zuDGZ0RZE34j7Z40 9k5OfDpRS/ITtH0eVcbXB+t3s6Sc0JMnTNOjG5i1LEs4Y7hG8goLtOa+KCu9sTAEfPkIUlqsPxr Jo1yT54pg63D2/a9KZMCKqB5M2V1NYDSKKl7RmZiFy4OXYO1hFeHQ3PQlw/Ir2/xBXeQZEm3Vyo n0cm64+R7dyjkSraPbMLugbmM+ch3s8pm X-Received: by 2002:ac8:5ac3:0:b0:501:13b1:14cd with SMTP id d75a77b69052e-506b3f7dc4amr210923841cf.3.1771449204954; Wed, 18 Feb 2026 13:13:24 -0800 (PST) X-Received: by 2002:ac8:5ac3:0:b0:501:13b1:14cd with SMTP id d75a77b69052e-506b3f7dc4amr210923401cf.3.1771449204472; Wed, 18 Feb 2026 13:13:24 -0800 (PST) Received: from [127.0.1.1] ([216.158.158.246]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-8972a23c824sm180233646d6.34.2026.02.18.13.13.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Feb 2026 13:13:23 -0800 (PST) From: Tal Zussman Date: Wed, 18 Feb 2026 16:13:17 -0500 Subject: [PATCH RFC] block: enable RWF_DONTCACHE for block devices Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260218-blk-dontcache-v1-1-fad6675ef71f@columbia.edu> X-B4-Tracking: v=1; b=H4sIAGwrlmkC/6tWKk4tykwtVrJSqFYqSi3LLM7MzwNyDHUUlJIzE vPSU3UzU4B8JSMDIzMDI0ML3aScbN2U/LyS5MTkjFRdY2MLQ2PjlBQDE9NUJaCegqLUtMwKsHn RSkFuzkqxtbUAJdTZe2QAAAA= X-Change-ID: 20260218-blk-dontcache-338133dd045e To: Jens Axboe , "Tigran A. Aivazian" , Alexander Viro , Christian Brauner , Jan Kara , Namjae Jeon , Sungjong Seo , Yuezhang Mo , Dave Kleikamp , Ryusuke Konishi , Viacheslav Dubeyko , Konstantin Komarov , Bob Copeland Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, jfs-discussion@lists.sourceforge.net, linux-nilfs@vger.kernel.org, ntfs3@lists.linux.dev, linux-karma-devel@lists.sourceforge.net, Tal Zussman X-Mailer: b4 0.14.3-dev-d7477 X-Developer-Signature: v=1; a=ed25519-sha256; t=1771449202; l=9869; i=tz2294@columbia.edu; s=20250528; h=from:subject:message-id; bh=T0LvtdehGbkNJTSiNQgmirD033nsR1VjUZyYykwDeYI=; b=ncr9b3Og8wbWU8LbF6spEUvNolCpc/Omr1KB8euffU2v938xtBKSpJRbDWzlQXyoEaqvB7eBM EkxUdWlF2bvBic15lk0/0ypTHQFiFDCMJEjYAAgimrx91gq1j8YjEKy X-Developer-Key: i=tz2294@columbia.edu; a=ed25519; pk=BIj5KdACscEOyAC0oIkeZqLB3L94fzBnDccEooxeM5Y= X-Authority-Analysis: v=2.4 cv=Jqz8bc4C c=1 sm=1 tr=0 ts=69962b7e cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=mD05b5UW6KhLIDvowZ5dSQ==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=x7bEGLp0ZPQA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=Omgu3vtQbb9kFtOpCJYA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjE4MDE4MiBTYWx0ZWRfX0xcJw3eOlkVj 1wmmylHylO6SXlWpdUizJuDnUlS8yQaHL01lK5tKuJCZWKI9KALjyjEvvbov7dtXBbjJT5KDd86 8wybX7vxkHycEdUxrPL4WQsQnIdKy0OH2RkKYrHZcwaJ0Lx0amlmarrIsEVnw9lGPmZM6wgZy55 /xB5yVN5360gW5etBQ//mqgnsvn7wwxn5Cf3/l0JFa0fCUSHTurWgL5bxfOhjc5TGJEfGEdzBXb a6EFIH/rpO+yGVRrHvjAXg/oAyFOmHUuztX+MwWA4BCRI9Ie8I2NWaErLapIC3x6Qa8baqCabpq 5/YafA0HSrrij4l9xjrl2Jyd1iFTQIzncVRqEts9KeHcfRUlsNeh7WL9FBrjUTePG/JWn3eOw3P TtXH0u+IY2DaAld3LD84+PCxlHtQvJqRJ72gK01U6wkOCSKq7PuQDSWXt4eAUiv/XGfHEZVxt1K st0p5xo1Jk+Ydxc4ggA== X-Proofpoint-GUID: pDxWx2DLkbZZ8bmI-SFxeNrhXB1-Yu8i X-Proofpoint-ORIG-GUID: pDxWx2DLkbZZ8bmI-SFxeNrhXB1-Yu8i X-Proofpoint-Virus-Version: vendor=nai engine=6800 definitions=11705 signatures=596818 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 priorityscore=1501 bulkscore=10 spamscore=0 impostorscore=10 lowpriorityscore=10 phishscore=0 malwarescore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602180182 Block device buffered reads and writes already pass through filemap_read() and iomap_file_buffered_write() respectively, both of which handle IOCB_DONTCACHE. Enable RWF_DONTCACHE for block device files by setting FOP_DONTCACHE in def_blk_fops. For CONFIG_BUFFER_HEAD paths, thread the kiocb through block_write_begin() so that buffer_head-based I/O can use DONTCACHE behavior as well. Callers without a kiocb context (e.g. nilfs2 recovery) pass NULL, which preserves the existing behavior. This support is useful for databases that operate on raw block devices, among other userspace applications. Signed-off-by: Tal Zussman Reviewed-by: Jan Kara --- This is based on v6.19. Please let me know if there's a different tree I should base this on. I wasn't sure if the block_write_begin() changes were necessary for block device support if CONFIG_BUFFER_HEAD is set (hence the RFC tag). I can remove those if they're not necessary. --- block/fops.c | 4 ++-- fs/bfs/file.c | 2 +- fs/buffer.c | 12 ++++++++---- fs/exfat/inode.c | 2 +- fs/ext2/inode.c | 2 +- fs/jfs/inode.c | 2 +- fs/minix/inode.c | 2 +- fs/nilfs2/inode.c | 2 +- fs/nilfs2/recovery.c | 2 +- fs/ntfs3/inode.c | 2 +- fs/omfs/file.c | 2 +- fs/udf/inode.c | 2 +- fs/ufs/inode.c | 2 +- include/linux/buffer_head.h | 5 +++-- 14 files changed, 24 insertions(+), 19 deletions(-) diff --git a/block/fops.c b/block/fops.c index 4d32785b31d9..6bc727f8b252 100644 --- a/block/fops.c +++ b/block/fops.c @@ -505,7 +505,7 @@ static int blkdev_write_begin(const struct kiocb *iocb, unsigned len, struct folio **foliop, void **fsdata) { - return block_write_begin(mapping, pos, len, foliop, blkdev_get_block); + return block_write_begin(iocb, mapping, pos, len, foliop, blkdev_get_bloc= k); } =20 static int blkdev_write_end(const struct kiocb *iocb, @@ -967,7 +967,7 @@ const struct file_operations def_blk_fops =3D { .splice_write =3D iter_file_splice_write, .fallocate =3D blkdev_fallocate, .uring_cmd =3D blkdev_uring_cmd, - .fop_flags =3D FOP_BUFFER_RASYNC, + .fop_flags =3D FOP_BUFFER_RASYNC | FOP_DONTCACHE, }; =20 static __init int blkdev_init(void) diff --git a/fs/bfs/file.c b/fs/bfs/file.c index d33d6bde992b..f2804e38b8a7 100644 --- a/fs/bfs/file.c +++ b/fs/bfs/file.c @@ -177,7 +177,7 @@ static int bfs_write_begin(const struct kiocb *iocb, { int ret; =20 - ret =3D block_write_begin(mapping, pos, len, foliop, bfs_get_block); + ret =3D block_write_begin(iocb, mapping, pos, len, foliop, bfs_get_block); if (unlikely(ret)) bfs_write_failed(mapping, pos + len); =20 diff --git a/fs/buffer.c b/fs/buffer.c index 838c0c571022..33c3580b85d8 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2241,14 +2241,18 @@ EXPORT_SYMBOL(block_commit_write); * * The filesystem needs to handle block truncation upon failure. */ -int block_write_begin(struct address_space *mapping, loff_t pos, unsigned = len, - struct folio **foliop, get_block_t *get_block) +int block_write_begin(const struct kiocb *iocb, struct address_space *mapp= ing, + loff_t pos, unsigned len, struct folio **foliop, get_block_t *get_block) { pgoff_t index =3D pos >> PAGE_SHIFT; + fgf_t fgp_flags =3D FGP_WRITEBEGIN; struct folio *folio; int status; =20 - folio =3D __filemap_get_folio(mapping, index, FGP_WRITEBEGIN, + if (iocb && iocb->ki_flags & IOCB_DONTCACHE) + fgp_flags |=3D FGP_DONTCACHE; + + folio =3D __filemap_get_folio(mapping, index, fgp_flags, mapping_gfp_mask(mapping)); if (IS_ERR(folio)) return PTR_ERR(folio); @@ -2591,7 +2595,7 @@ int cont_write_begin(const struct kiocb *iocb, struct= address_space *mapping, (*bytes)++; } =20 - return block_write_begin(mapping, pos, len, foliop, get_block); + return block_write_begin(iocb, mapping, pos, len, foliop, get_block); } EXPORT_SYMBOL(cont_write_begin); =20 diff --git a/fs/exfat/inode.c b/fs/exfat/inode.c index f9501c3a3666..39d36e8fdfd6 100644 --- a/fs/exfat/inode.c +++ b/fs/exfat/inode.c @@ -456,7 +456,7 @@ static int exfat_write_begin(const struct kiocb *iocb, if (unlikely(exfat_forced_shutdown(mapping->host->i_sb))) return -EIO; =20 - ret =3D block_write_begin(mapping, pos, len, foliop, exfat_get_block); + ret =3D block_write_begin(iocb, mapping, pos, len, foliop, exfat_get_bloc= k); =20 if (ret < 0) exfat_write_failed(mapping, pos+len); diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index dbfe9098a124..11aab03de752 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c @@ -930,7 +930,7 @@ ext2_write_begin(const struct kiocb *iocb, struct addre= ss_space *mapping, { int ret; =20 - ret =3D block_write_begin(mapping, pos, len, foliop, ext2_get_block); + ret =3D block_write_begin(iocb, mapping, pos, len, foliop, ext2_get_block= ); if (ret < 0) ext2_write_failed(mapping, pos + len); return ret; diff --git a/fs/jfs/inode.c b/fs/jfs/inode.c index 4709762713ef..ae52db437771 100644 --- a/fs/jfs/inode.c +++ b/fs/jfs/inode.c @@ -303,7 +303,7 @@ static int jfs_write_begin(const struct kiocb *iocb, { int ret; =20 - ret =3D block_write_begin(mapping, pos, len, foliop, jfs_get_block); + ret =3D block_write_begin(iocb, mapping, pos, len, foliop, jfs_get_block); if (unlikely(ret)) jfs_write_failed(mapping, pos + len); =20 diff --git a/fs/minix/inode.c b/fs/minix/inode.c index 51ea9bdc813f..9075c0ba2f20 100644 --- a/fs/minix/inode.c +++ b/fs/minix/inode.c @@ -465,7 +465,7 @@ static int minix_write_begin(const struct kiocb *iocb, { int ret; =20 - ret =3D block_write_begin(mapping, pos, len, foliop, minix_get_block); + ret =3D block_write_begin(iocb, mapping, pos, len, foliop, minix_get_bloc= k); if (unlikely(ret)) minix_write_failed(mapping, pos + len); =20 diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c index 51bde45d5865..d9d57eeecc5d 100644 --- a/fs/nilfs2/inode.c +++ b/fs/nilfs2/inode.c @@ -230,7 +230,7 @@ static int nilfs_write_begin(const struct kiocb *iocb, if (unlikely(err)) return err; =20 - err =3D block_write_begin(mapping, pos, len, foliop, nilfs_get_block); + err =3D block_write_begin(iocb, mapping, pos, len, foliop, nilfs_get_bloc= k); if (unlikely(err)) { nilfs_write_failed(mapping, pos + len); nilfs_transaction_abort(inode->i_sb); diff --git a/fs/nilfs2/recovery.c b/fs/nilfs2/recovery.c index a9c61d0492cb..2f5fe44bf736 100644 --- a/fs/nilfs2/recovery.c +++ b/fs/nilfs2/recovery.c @@ -541,7 +541,7 @@ static int nilfs_recover_dsync_blocks(struct the_nilfs = *nilfs, } =20 pos =3D rb->blkoff << inode->i_blkbits; - err =3D block_write_begin(inode->i_mapping, pos, blocksize, + err =3D block_write_begin(NULL, inode->i_mapping, pos, blocksize, &folio, nilfs_get_block); if (unlikely(err)) { loff_t isize =3D inode->i_size; diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c index 0a9ac5efeb67..8c788feb319e 100644 --- a/fs/ntfs3/inode.c +++ b/fs/ntfs3/inode.c @@ -966,7 +966,7 @@ int ntfs_write_begin(const struct kiocb *iocb, struct a= ddress_space *mapping, goto out; } =20 - err =3D block_write_begin(mapping, pos, len, foliop, + err =3D block_write_begin(iocb, mapping, pos, len, foliop, ntfs_get_block_write_begin); =20 out: diff --git a/fs/omfs/file.c b/fs/omfs/file.c index 49a1de5a827f..3bade632e36e 100644 --- a/fs/omfs/file.c +++ b/fs/omfs/file.c @@ -317,7 +317,7 @@ static int omfs_write_begin(const struct kiocb *iocb, { int ret; =20 - ret =3D block_write_begin(mapping, pos, len, foliop, omfs_get_block); + ret =3D block_write_begin(iocb, mapping, pos, len, foliop, omfs_get_block= ); if (unlikely(ret)) omfs_write_failed(mapping, pos + len); =20 diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 7fae8002344a..aec9cdc938be 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -259,7 +259,7 @@ static int udf_write_begin(const struct kiocb *iocb, int ret; =20 if (iinfo->i_alloc_type !=3D ICBTAG_FLAG_AD_IN_ICB) { - ret =3D block_write_begin(mapping, pos, len, foliop, + ret =3D block_write_begin(iocb, mapping, pos, len, foliop, udf_get_block); if (unlikely(ret)) udf_write_failed(mapping, pos + len); diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c index e2b0a35de2a7..dfba985265a8 100644 --- a/fs/ufs/inode.c +++ b/fs/ufs/inode.c @@ -481,7 +481,7 @@ static int ufs_write_begin(const struct kiocb *iocb, { int ret; =20 - ret =3D block_write_begin(mapping, pos, len, foliop, ufs_getfrag_block); + ret =3D block_write_begin(iocb, mapping, pos, len, foliop, ufs_getfrag_bl= ock); if (unlikely(ret)) ufs_write_failed(mapping, pos + len); =20 diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index b16b88bfbc3e..4b07dec5f8eb 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h @@ -258,8 +258,9 @@ int __block_write_full_folio(struct inode *inode, struc= t folio *folio, get_block_t *get_block, struct writeback_control *wbc); int block_read_full_folio(struct folio *, get_block_t *); bool block_is_partially_uptodate(struct folio *, size_t from, size_t count= ); -int block_write_begin(struct address_space *mapping, loff_t pos, unsigned = len, - struct folio **foliop, get_block_t *get_block); +int block_write_begin(const struct kiocb *iocb, struct address_space *mapp= ing, + loff_t pos, unsigned len, struct folio **foliop, + get_block_t *get_block); int __block_write_begin(struct folio *folio, loff_t pos, unsigned len, get_block_t *get_block); int block_write_end(loff_t pos, unsigned len, unsigned copied, struct foli= o *); --- base-commit: 05f7e89ab9731565d8a62e3b5d1ec206485eeb0b change-id: 20260218-blk-dontcache-338133dd045e Best regards, --=20 Tal Zussman