From: "Darrick J. Wong" <djwong@kernel.org>
To: Namjae Jeon <linkinjeon@kernel.org>
Cc: sj1557.seo@samsung.com, yuezhang.mo@sony.com, brauner@kernel.org,
hch@lst.de, linux-fsdevel@vger.kernel.org, anmuxixixi@gmail.com,
dxdt@dev.snart.me, chizhiling@kylinos.cn, chizhiling@163.com,
linux-kernel@vger.kernel.org, charsyam@gmail.com
Subject: Re: [PATCH v4 01/11] iomap: introduce IOMAP_F_ZERO_TAIL flag
Date: Mon, 18 May 2026 09:03:56 -0700 [thread overview]
Message-ID: <20260518160356.GH9568@frogsfrogsfrogs> (raw)
In-Reply-To: <20260518114705.9601-2-linkinjeon@kernel.org>
On Mon, May 18, 2026 at 08:46:55PM +0900, Namjae Jeon wrote:
> In filesystems that maintain a separate Valid Data Length, such as exFAT
> and NTFS, a partial write may start at or beyond the current valid_size and
> extend it. In this case, the region after the previous valid_size but
> within the same filesystem block is considered unwritten.
>
> This patch introduces IOMAP_F_ZERO_TAIL. When this flag is set in iomap,
> __iomap_write_begin() will zero only the tail portion while preserving any
> valid data before it in the same block.
>
> Without this tail zeroing, stale data in the unwritten portion of the block
> can remain in the page cache. Subsequent reads can then return incorrect
> contents from that region.
>
> Acked-by: Christoph Hellwig <hch@lst.de>
> Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
AFAICT, the "valid size" means "all space between valid_size and i_size
is unwritten", and that's why you need the tail of the block to be
zeroed, right?
So if, say, the fsblock size is 4k and valid_size is 80k; and I initiate
a pwrite of 300 bytes at 121k, exfat will do its own zeroing to bump
valid_size up to 121k, right? Then the actual iomap_write call will
copy the 300 bytes into the pagecache, and now it needs ZERO_TAIL to
zero the rest of the pagecache from (121k + 300) to 124k, correct?
(What I'm probing for is, there's no need for a ZERO_HEAD at this time
because exfat has to take care of that, right?)
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> ---
> fs/iomap/buffered-io.c | 4 ++++
> include/linux/iomap.h | 4 ++++
> 2 files changed, 8 insertions(+)
>
> diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
> index d7b648421a70..44046c648df4 100644
> --- a/fs/iomap/buffered-io.c
> +++ b/fs/iomap/buffered-io.c
> @@ -836,6 +836,7 @@ static int __iomap_write_begin(const struct iomap_iter *iter,
> return -EIO;
> folio_zero_segments(folio, poff, from, to, poff + plen);
> } else {
> + const struct iomap *iomap = iomap_iter_srcmap(iter);
> int status;
>
> if (iter->flags & IOMAP_NOWAIT)
> @@ -853,6 +854,9 @@ static int __iomap_write_begin(const struct iomap_iter *iter,
> len, status, GFP_NOFS);
> if (status)
> return status;
> +
> + if (iomap->flags & IOMAP_F_ZERO_TAIL)
> + folio_zero_segment(folio, to, poff + plen);
> }
> iomap_set_range_uptodate(folio, poff, plen);
> } while ((block_start += plen) < block_end);
> diff --git a/include/linux/iomap.h b/include/linux/iomap.h
> index 2c5685adf3a9..750602e18750 100644
> --- a/include/linux/iomap.h
> +++ b/include/linux/iomap.h
> @@ -67,6 +67,9 @@ struct vm_fault;
> * bio, i.e. set REQ_ATOMIC.
> *
> * IOMAP_F_INTEGRITY indicates that the filesystems handles integrity metadata.
> + *
> + * IOMAP_F_ZERO_TAIL indicates the remainder of the block after the data
> + * written should be zeroed.
> */
> #define IOMAP_F_NEW (1U << 0)
> #define IOMAP_F_DIRTY (1U << 1)
> @@ -86,6 +89,7 @@ struct vm_fault;
> #else
> #define IOMAP_F_INTEGRITY 0
> #endif /* CONFIG_BLK_DEV_INTEGRITY */
> +#define IOMAP_F_ZERO_TAIL (1U << 10)
>
> /*
> * Flag reserved for file system specific usage
> --
> 2.25.1
>
next prev parent reply other threads:[~2026-05-18 16:03 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-18 11:46 [PATCH v4 00/11] exfat: convert to iomap Namjae Jeon
2026-05-18 11:46 ` [PATCH v4 01/11] iomap: introduce IOMAP_F_ZERO_TAIL flag Namjae Jeon
2026-05-18 16:03 ` Darrick J. Wong [this message]
2026-05-19 3:32 ` Namjae Jeon
2026-05-22 12:53 ` Christian Brauner
2026-05-22 15:02 ` Namjae Jeon
2026-05-18 11:46 ` [PATCH v4 02/11] exfat: replace unsafe macros with static inline functions Namjae Jeon
2026-05-18 11:46 ` [PATCH v4 03/11] exfat: add balloc parameter to exfat_map_cluster() for iomap support Namjae Jeon
2026-05-18 11:46 ` [PATCH v4 04/11] exfat: add exfat_file_open() Namjae Jeon
2026-05-18 11:46 ` [PATCH v4 05/11] exfat: add support for multi-cluster allocation Namjae Jeon
2026-05-18 11:47 ` [PATCH v4 06/11] exfat: add data_start_bytes and exfat_cluster_to_phys_bytes() helper Namjae Jeon
2026-05-18 11:47 ` [PATCH v4 07/11] exfat: fix implicit declaration of brelse() Namjae Jeon
2026-05-18 11:47 ` [PATCH v4 08/11] exfat: add iomap buffered I/O support Namjae Jeon
2026-05-19 5:21 ` Yuezhang.Mo
2026-05-18 11:47 ` [PATCH v4 09/11] exfat: add iomap direct " Namjae Jeon
2026-05-18 11:47 ` [PATCH v4 10/11] exfat: add support for SEEK_HOLE and SEEK_DATA in llseek Namjae Jeon
2026-05-18 11:47 ` [PATCH v4 11/11] exfat: make exfat_truncate() return error code Namjae Jeon
2026-05-19 3:40 ` [PATCH v4 00/11] exfat: convert to iomap Darrick J. Wong
2026-05-19 4:05 ` Namjae Jeon
2026-05-19 7:04 ` Christoph Hellwig
2026-05-19 7:45 ` Namjae Jeon
2026-05-22 12:53 ` (subset) " Christian Brauner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260518160356.GH9568@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=anmuxixixi@gmail.com \
--cc=brauner@kernel.org \
--cc=charsyam@gmail.com \
--cc=chizhiling@163.com \
--cc=chizhiling@kylinos.cn \
--cc=dxdt@dev.snart.me \
--cc=hch@lst.de \
--cc=linkinjeon@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sj1557.seo@samsung.com \
--cc=yuezhang.mo@sony.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.