From: "Darrick J. Wong" <djwong@kernel.org>
To: Brian Foster <bfoster@redhat.com>
Cc: linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org,
Christoph Hellwig <hch@infradead.org>
Subject: Re: [PATCH v2 11/12] iomap: rename iomap_iter processed field to status
Date: Wed, 19 Feb 2025 14:30:47 -0800 [thread overview]
Message-ID: <20250219223047.GF21808@frogsfrogsfrogs> (raw)
In-Reply-To: <20250219175050.83986-12-bfoster@redhat.com>
On Wed, Feb 19, 2025 at 12:50:49PM -0500, Brian Foster wrote:
> The iter.processed field name is no longer appropriate now that
> iomap operations do not return the number of bytes processed. Rename
> the field to iter.status to reflect that a success or error code is
> expected.
>
> Also change the type to int as there is no longer a need for an s64.
> This reduces the size of iomap_iter by 8 bytes due to a combination
> of smaller type and reduction in structure padding. While here, fix
> up the return types of various _iter() helpers to reflect the type
> change.
>
> Signed-off-by: Brian Foster <bfoster@redhat.com>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
Aha, this is the answer to my question from the first patch.
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> ---
> fs/dax.c | 20 ++++++++++----------
> fs/iomap/buffered-io.c | 42 +++++++++++++++++++++---------------------
> fs/iomap/direct-io.c | 2 +-
> fs/iomap/fiemap.c | 6 +++---
> fs/iomap/iter.c | 12 ++++++------
> fs/iomap/seek.c | 8 ++++----
> fs/iomap/swapfile.c | 4 ++--
> fs/iomap/trace.h | 8 ++++----
> include/linux/iomap.h | 7 +++----
> 9 files changed, 54 insertions(+), 55 deletions(-)
>
> diff --git a/fs/dax.c b/fs/dax.c
> index 44701865ca94..cab3c5abe5cb 100644
> --- a/fs/dax.c
> +++ b/fs/dax.c
> @@ -1258,7 +1258,7 @@ static vm_fault_t dax_pmd_load_hole(struct xa_state *xas, struct vm_fault *vmf,
> }
> #endif /* CONFIG_FS_DAX_PMD */
>
> -static s64 dax_unshare_iter(struct iomap_iter *iter)
> +static int dax_unshare_iter(struct iomap_iter *iter)
> {
> struct iomap *iomap = &iter->iomap;
> const struct iomap *srcmap = iomap_iter_srcmap(iter);
> @@ -1328,7 +1328,7 @@ int dax_file_unshare(struct inode *inode, loff_t pos, loff_t len,
>
> iter.len = min(len, size - pos);
> while ((ret = iomap_iter(&iter, ops)) > 0)
> - iter.processed = dax_unshare_iter(&iter);
> + iter.status = dax_unshare_iter(&iter);
> return ret;
> }
> EXPORT_SYMBOL_GPL(dax_file_unshare);
> @@ -1356,12 +1356,12 @@ static int dax_memzero(struct iomap_iter *iter, loff_t pos, size_t size)
> return ret;
> }
>
> -static s64 dax_zero_iter(struct iomap_iter *iter, bool *did_zero)
> +static int dax_zero_iter(struct iomap_iter *iter, bool *did_zero)
> {
> const struct iomap *iomap = &iter->iomap;
> const struct iomap *srcmap = iomap_iter_srcmap(iter);
> u64 length = iomap_length(iter);
> - s64 ret;
> + int ret;
>
> /* already zeroed? we're done. */
> if (srcmap->type == IOMAP_HOLE || srcmap->type == IOMAP_UNWRITTEN)
> @@ -1416,7 +1416,7 @@ int dax_zero_range(struct inode *inode, loff_t pos, loff_t len, bool *did_zero,
> int ret;
>
> while ((ret = iomap_iter(&iter, ops)) > 0)
> - iter.processed = dax_zero_iter(&iter, did_zero);
> + iter.status = dax_zero_iter(&iter, did_zero);
> return ret;
> }
> EXPORT_SYMBOL_GPL(dax_zero_range);
> @@ -1588,7 +1588,7 @@ dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
> iomi.flags |= IOMAP_NOWAIT;
>
> while ((ret = iomap_iter(&iomi, ops)) > 0)
> - iomi.processed = dax_iomap_iter(&iomi, iter);
> + iomi.status = dax_iomap_iter(&iomi, iter);
>
> done = iomi.pos - iocb->ki_pos;
> iocb->ki_pos = iomi.pos;
> @@ -1759,7 +1759,7 @@ static vm_fault_t dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp,
>
> while ((error = iomap_iter(&iter, ops)) > 0) {
> if (WARN_ON_ONCE(iomap_length(&iter) < PAGE_SIZE)) {
> - iter.processed = -EIO; /* fs corruption? */
> + iter.status = -EIO; /* fs corruption? */
> continue;
> }
>
> @@ -1773,7 +1773,7 @@ static vm_fault_t dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp,
>
> if (!(ret & VM_FAULT_ERROR)) {
> u64 length = PAGE_SIZE;
> - iter.processed = iomap_iter_advance(&iter, &length);
> + iter.status = iomap_iter_advance(&iter, &length);
> }
> }
>
> @@ -1889,7 +1889,7 @@ static vm_fault_t dax_iomap_pmd_fault(struct vm_fault *vmf, pfn_t *pfnp,
> ret = dax_fault_iter(vmf, &iter, pfnp, &xas, &entry, true);
> if (ret != VM_FAULT_FALLBACK) {
> u64 length = PMD_SIZE;
> - iter.processed = iomap_iter_advance(&iter, &length);
> + iter.status = iomap_iter_advance(&iter, &length);
> }
> }
>
> @@ -2079,7 +2079,7 @@ int dax_dedupe_file_range_compare(struct inode *src, loff_t srcoff,
> min(src_iter.len, dst_iter.len), same);
> if (status < 0)
> return ret;
> - src_iter.processed = dst_iter.processed = status;
> + src_iter.status = dst_iter.status = status;
> }
> return ret;
> }
> diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
> index ddc82dab6bb5..2b86978010bb 100644
> --- a/fs/iomap/buffered-io.c
> +++ b/fs/iomap/buffered-io.c
> @@ -366,7 +366,7 @@ static inline bool iomap_block_needs_zeroing(const struct iomap_iter *iter,
> pos >= i_size_read(iter->inode);
> }
>
> -static loff_t iomap_readpage_iter(struct iomap_iter *iter,
> +static int iomap_readpage_iter(struct iomap_iter *iter,
> struct iomap_readpage_ctx *ctx)
> {
> const struct iomap *iomap = &iter->iomap;
> @@ -441,10 +441,10 @@ static loff_t iomap_readpage_iter(struct iomap_iter *iter,
> return iomap_iter_advance(iter, &length);
> }
>
> -static loff_t iomap_read_folio_iter(struct iomap_iter *iter,
> +static int iomap_read_folio_iter(struct iomap_iter *iter,
> struct iomap_readpage_ctx *ctx)
> {
> - loff_t ret;
> + int ret;
>
> while (iomap_length(iter)) {
> ret = iomap_readpage_iter(iter, ctx);
> @@ -470,7 +470,7 @@ int iomap_read_folio(struct folio *folio, const struct iomap_ops *ops)
> trace_iomap_readpage(iter.inode, 1);
>
> while ((ret = iomap_iter(&iter, ops)) > 0)
> - iter.processed = iomap_read_folio_iter(&iter, &ctx);
> + iter.status = iomap_read_folio_iter(&iter, &ctx);
>
> if (ctx.bio) {
> submit_bio(ctx.bio);
> @@ -489,10 +489,10 @@ int iomap_read_folio(struct folio *folio, const struct iomap_ops *ops)
> }
> EXPORT_SYMBOL_GPL(iomap_read_folio);
>
> -static loff_t iomap_readahead_iter(struct iomap_iter *iter,
> +static int iomap_readahead_iter(struct iomap_iter *iter,
> struct iomap_readpage_ctx *ctx)
> {
> - loff_t ret;
> + int ret;
>
> while (iomap_length(iter)) {
> if (ctx->cur_folio &&
> @@ -542,7 +542,7 @@ void iomap_readahead(struct readahead_control *rac, const struct iomap_ops *ops)
> trace_iomap_readahead(rac->mapping->host, readahead_count(rac));
>
> while (iomap_iter(&iter, ops) > 0)
> - iter.processed = iomap_readahead_iter(&iter, &ctx);
> + iter.status = iomap_readahead_iter(&iter, &ctx);
>
> if (ctx.bio)
> submit_bio(ctx.bio);
> @@ -902,10 +902,10 @@ static bool iomap_write_end(struct iomap_iter *iter, loff_t pos, size_t len,
> return __iomap_write_end(iter->inode, pos, len, copied, folio);
> }
>
> -static loff_t iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i)
> +static int iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i)
> {
> ssize_t total_written = 0;
> - long status = 0;
> + int status = 0;
> struct address_space *mapping = iter->inode->i_mapping;
> size_t chunk = mapping_max_folio_size(mapping);
> unsigned int bdp_flags = (iter->flags & IOMAP_NOWAIT) ? BDP_ASYNC : 0;
> @@ -1025,7 +1025,7 @@ iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *i,
> iter.flags |= IOMAP_NOWAIT;
>
> while ((ret = iomap_iter(&iter, ops)) > 0)
> - iter.processed = iomap_write_iter(&iter, i);
> + iter.status = iomap_write_iter(&iter, i);
>
> if (unlikely(iter.pos == iocb->ki_pos))
> return ret;
> @@ -1259,7 +1259,7 @@ void iomap_write_delalloc_release(struct inode *inode, loff_t start_byte,
> }
> EXPORT_SYMBOL_GPL(iomap_write_delalloc_release);
>
> -static loff_t iomap_unshare_iter(struct iomap_iter *iter)
> +static int iomap_unshare_iter(struct iomap_iter *iter)
> {
> struct iomap *iomap = &iter->iomap;
> u64 bytes = iomap_length(iter);
> @@ -1319,7 +1319,7 @@ iomap_file_unshare(struct inode *inode, loff_t pos, loff_t len,
>
> iter.len = min(len, size - pos);
> while ((ret = iomap_iter(&iter, ops)) > 0)
> - iter.processed = iomap_unshare_iter(&iter);
> + iter.status = iomap_unshare_iter(&iter);
> return ret;
> }
> EXPORT_SYMBOL_GPL(iomap_file_unshare);
> @@ -1338,7 +1338,7 @@ static inline int iomap_zero_iter_flush_and_stale(struct iomap_iter *i)
> return filemap_write_and_wait_range(mapping, i->pos, end);
> }
>
> -static loff_t iomap_zero_iter(struct iomap_iter *iter, bool *did_zero)
> +static int iomap_zero_iter(struct iomap_iter *iter, bool *did_zero)
> {
> u64 bytes = iomap_length(iter);
> int status;
> @@ -1411,7 +1411,7 @@ iomap_zero_range(struct inode *inode, loff_t pos, loff_t len, bool *did_zero,
> filemap_range_needs_writeback(mapping, pos, pos + plen - 1)) {
> iter.len = plen;
> while ((ret = iomap_iter(&iter, ops)) > 0)
> - iter.processed = iomap_zero_iter(&iter, did_zero);
> + iter.status = iomap_zero_iter(&iter, did_zero);
>
> iter.len = len - (iter.pos - pos);
> if (ret || !iter.len)
> @@ -1430,20 +1430,20 @@ iomap_zero_range(struct inode *inode, loff_t pos, loff_t len, bool *did_zero,
>
> if (srcmap->type == IOMAP_HOLE ||
> srcmap->type == IOMAP_UNWRITTEN) {
> - s64 proc;
> + s64 status;
>
> if (range_dirty) {
> range_dirty = false;
> - proc = iomap_zero_iter_flush_and_stale(&iter);
> + status = iomap_zero_iter_flush_and_stale(&iter);
> } else {
> u64 length = iomap_length(&iter);
> - proc = iomap_iter_advance(&iter, &length);
> + status = iomap_iter_advance(&iter, &length);
> }
> - iter.processed = proc;
> + iter.status = status;
> continue;
> }
>
> - iter.processed = iomap_zero_iter(&iter, did_zero);
> + iter.status = iomap_zero_iter(&iter, did_zero);
> }
> return ret;
> }
> @@ -1463,7 +1463,7 @@ iomap_truncate_page(struct inode *inode, loff_t pos, bool *did_zero,
> }
> EXPORT_SYMBOL_GPL(iomap_truncate_page);
>
> -static loff_t iomap_folio_mkwrite_iter(struct iomap_iter *iter,
> +static int iomap_folio_mkwrite_iter(struct iomap_iter *iter,
> struct folio *folio)
> {
> loff_t length = iomap_length(iter);
> @@ -1499,7 +1499,7 @@ vm_fault_t iomap_page_mkwrite(struct vm_fault *vmf, const struct iomap_ops *ops)
> iter.pos = folio_pos(folio);
> iter.len = ret;
> while ((ret = iomap_iter(&iter, ops)) > 0)
> - iter.processed = iomap_folio_mkwrite_iter(&iter, folio);
> + iter.status = iomap_folio_mkwrite_iter(&iter, folio);
>
> if (ret < 0)
> goto out_unlock;
> diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c
> index b3599f8d12ac..a84bba651e14 100644
> --- a/fs/iomap/direct-io.c
> +++ b/fs/iomap/direct-io.c
> @@ -696,7 +696,7 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
>
> blk_start_plug(&plug);
> while ((ret = iomap_iter(&iomi, ops)) > 0) {
> - iomi.processed = iomap_dio_iter(&iomi, dio);
> + iomi.status = iomap_dio_iter(&iomi, dio);
>
> /*
> * We can only poll for single bio I/Os.
> diff --git a/fs/iomap/fiemap.c b/fs/iomap/fiemap.c
> index 8a0d8b034218..6776b800bde7 100644
> --- a/fs/iomap/fiemap.c
> +++ b/fs/iomap/fiemap.c
> @@ -39,7 +39,7 @@ static int iomap_to_fiemap(struct fiemap_extent_info *fi,
> iomap->length, flags);
> }
>
> -static loff_t iomap_fiemap_iter(struct iomap_iter *iter,
> +static int iomap_fiemap_iter(struct iomap_iter *iter,
> struct fiemap_extent_info *fi, struct iomap *prev)
> {
> u64 length = iomap_length(iter);
> @@ -78,7 +78,7 @@ int iomap_fiemap(struct inode *inode, struct fiemap_extent_info *fi,
> return ret;
>
> while ((ret = iomap_iter(&iter, ops)) > 0)
> - iter.processed = iomap_fiemap_iter(&iter, fi, &prev);
> + iter.status = iomap_fiemap_iter(&iter, fi, &prev);
>
> if (prev.type != IOMAP_HOLE) {
> ret = iomap_to_fiemap(fi, &prev, FIEMAP_EXTENT_LAST);
> @@ -114,7 +114,7 @@ iomap_bmap(struct address_space *mapping, sector_t bno,
> while ((ret = iomap_iter(&iter, ops)) > 0) {
> if (iter.iomap.type == IOMAP_MAPPED)
> bno = iomap_sector(&iter.iomap, iter.pos) >> blkshift;
> - /* leave iter.processed unset to abort loop */
> + /* leave iter.status unset to abort loop */
> }
> if (ret)
> return 0;
> diff --git a/fs/iomap/iter.c b/fs/iomap/iter.c
> index e4dfe64029cc..6ffc6a7b9ba5 100644
> --- a/fs/iomap/iter.c
> +++ b/fs/iomap/iter.c
> @@ -9,7 +9,7 @@
>
> static inline void iomap_iter_reset_iomap(struct iomap_iter *iter)
> {
> - iter->processed = 0;
> + iter->status = 0;
> memset(&iter->iomap, 0, sizeof(iter->iomap));
> memset(&iter->srcmap, 0, sizeof(iter->srcmap));
> }
> @@ -54,7 +54,7 @@ static inline void iomap_iter_done(struct iomap_iter *iter)
> * function must be called in a loop that continues as long it returns a
> * positive value. If 0 or a negative value is returned, the caller must not
> * return to the loop body. Within a loop body, there are two ways to break out
> - * of the loop body: leave @iter.processed unchanged, or set it to a negative
> + * of the loop body: leave @iter.status unchanged, or set it to a negative
> * errno.
> */
> int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops)
> @@ -86,8 +86,8 @@ int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops)
> }
>
> /* detect old return semantics where this would advance */
> - if (WARN_ON_ONCE(iter->processed > 0))
> - iter->processed = -EIO;
> + if (WARN_ON_ONCE(iter->status > 0))
> + iter->status = -EIO;
>
> /*
> * Use iter->len to determine whether to continue onto the next mapping.
> @@ -95,8 +95,8 @@ int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops)
> * advanced at all (i.e. no work was done for some reason) unless the
> * mapping has been marked stale and needs to be reprocessed.
> */
> - if (iter->processed < 0)
> - ret = iter->processed;
> + if (iter->status < 0)
> + ret = iter->status;
> else if (iter->len == 0 || (!advanced && !stale))
> ret = 0;
> else
> diff --git a/fs/iomap/seek.c b/fs/iomap/seek.c
> index 83c687d6ccc0..04d7919636c1 100644
> --- a/fs/iomap/seek.c
> +++ b/fs/iomap/seek.c
> @@ -10,7 +10,7 @@
> #include <linux/pagemap.h>
> #include <linux/pagevec.h>
>
> -static loff_t iomap_seek_hole_iter(struct iomap_iter *iter,
> +static int iomap_seek_hole_iter(struct iomap_iter *iter,
> loff_t *hole_pos)
> {
> loff_t length = iomap_length(iter);
> @@ -47,7 +47,7 @@ iomap_seek_hole(struct inode *inode, loff_t pos, const struct iomap_ops *ops)
>
> iter.len = size - pos;
> while ((ret = iomap_iter(&iter, ops)) > 0)
> - iter.processed = iomap_seek_hole_iter(&iter, &pos);
> + iter.status = iomap_seek_hole_iter(&iter, &pos);
> if (ret < 0)
> return ret;
> if (iter.len) /* found hole before EOF */
> @@ -56,7 +56,7 @@ iomap_seek_hole(struct inode *inode, loff_t pos, const struct iomap_ops *ops)
> }
> EXPORT_SYMBOL_GPL(iomap_seek_hole);
>
> -static loff_t iomap_seek_data_iter(struct iomap_iter *iter,
> +static int iomap_seek_data_iter(struct iomap_iter *iter,
> loff_t *hole_pos)
> {
> loff_t length = iomap_length(iter);
> @@ -93,7 +93,7 @@ iomap_seek_data(struct inode *inode, loff_t pos, const struct iomap_ops *ops)
>
> iter.len = size - pos;
> while ((ret = iomap_iter(&iter, ops)) > 0)
> - iter.processed = iomap_seek_data_iter(&iter, &pos);
> + iter.status = iomap_seek_data_iter(&iter, &pos);
> if (ret < 0)
> return ret;
> if (iter.len) /* found data before EOF */
> diff --git a/fs/iomap/swapfile.c b/fs/iomap/swapfile.c
> index 4395e46a4dc7..9ea185e58ca7 100644
> --- a/fs/iomap/swapfile.c
> +++ b/fs/iomap/swapfile.c
> @@ -94,7 +94,7 @@ static int iomap_swapfile_fail(struct iomap_swapfile_info *isi, const char *str)
> * swap only cares about contiguous page-aligned physical extents and makes no
> * distinction between written and unwritten extents.
> */
> -static loff_t iomap_swapfile_iter(struct iomap_iter *iter,
> +static int iomap_swapfile_iter(struct iomap_iter *iter,
> struct iomap *iomap, struct iomap_swapfile_info *isi)
> {
> u64 length = iomap_length(iter);
> @@ -169,7 +169,7 @@ int iomap_swapfile_activate(struct swap_info_struct *sis,
> return ret;
>
> while ((ret = iomap_iter(&iter, ops)) > 0)
> - iter.processed = iomap_swapfile_iter(&iter, &iter.iomap, &isi);
> + iter.status = iomap_swapfile_iter(&iter, &iter.iomap, &isi);
> if (ret < 0)
> return ret;
>
> diff --git a/fs/iomap/trace.h b/fs/iomap/trace.h
> index 4118a42cdab0..9eab2c8ac3c5 100644
> --- a/fs/iomap/trace.h
> +++ b/fs/iomap/trace.h
> @@ -207,7 +207,7 @@ TRACE_EVENT(iomap_iter,
> __field(u64, ino)
> __field(loff_t, pos)
> __field(u64, length)
> - __field(s64, processed)
> + __field(int, status)
> __field(unsigned int, flags)
> __field(const void *, ops)
> __field(unsigned long, caller)
> @@ -217,17 +217,17 @@ TRACE_EVENT(iomap_iter,
> __entry->ino = iter->inode->i_ino;
> __entry->pos = iter->pos;
> __entry->length = iomap_length(iter);
> - __entry->processed = iter->processed;
> + __entry->status = iter->status;
> __entry->flags = iter->flags;
> __entry->ops = ops;
> __entry->caller = caller;
> ),
> - TP_printk("dev %d:%d ino 0x%llx pos 0x%llx length 0x%llx processed %lld flags %s (0x%x) ops %ps caller %pS",
> + TP_printk("dev %d:%d ino 0x%llx pos 0x%llx length 0x%llx status %d flags %s (0x%x) ops %ps caller %pS",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->ino,
> __entry->pos,
> __entry->length,
> - __entry->processed,
> + __entry->status,
> __print_flags(__entry->flags, "|", IOMAP_FLAGS_STRINGS),
> __entry->flags,
> __entry->ops,
> diff --git a/include/linux/iomap.h b/include/linux/iomap.h
> index d832a540cc72..29b72a671104 100644
> --- a/include/linux/iomap.h
> +++ b/include/linux/iomap.h
> @@ -213,9 +213,8 @@ struct iomap_ops {
> * It is updated at the same time as @pos.
> * @iter_start_pos: The original start pos for the current iomap. Used for
> * incremental iter advance.
> - * @processed: The number of bytes the most recent iteration needs iomap_iter()
> - * to advance the iter, zero if the iter was already advanced, or a
> - * negative errno for an error during the operation.
> + * @status: Status of the most recent iteration. Zero on success or a negative
> + * errno on error.
> * @flags: Zero or more of the iomap_begin flags above.
> * @iomap: Map describing the I/O iteration
> * @srcmap: Source map for COW operations
> @@ -225,7 +224,7 @@ struct iomap_iter {
> loff_t pos;
> u64 len;
> loff_t iter_start_pos;
> - s64 processed;
> + int status;
> unsigned flags;
> struct iomap iomap;
> struct iomap srcmap;
> --
> 2.48.1
>
>
next prev parent reply other threads:[~2025-02-19 22:30 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-19 17:50 [PATCH v2 00/12] iomap: incremental advance conversion -- phase 2 Brian Foster
2025-02-19 17:50 ` [PATCH v2 01/12] iomap: advance the iter directly on buffered read Brian Foster
2025-02-19 22:22 ` Darrick J. Wong
2025-02-19 22:31 ` Darrick J. Wong
2025-02-19 17:50 ` [PATCH v2 02/12] iomap: advance the iter on direct I/O Brian Foster
2025-02-19 22:22 ` Darrick J. Wong
2025-02-19 17:50 ` [PATCH v2 03/12] iomap: convert misc simple ops to incremental advance Brian Foster
2025-02-19 22:24 ` Darrick J. Wong
2025-02-19 22:31 ` Darrick J. Wong
2025-02-19 17:50 ` [PATCH v2 04/12] dax: advance the iomap_iter in the read/write path Brian Foster
2025-02-19 22:33 ` Darrick J. Wong
2025-02-20 14:58 ` Brian Foster
2025-02-19 17:50 ` [PATCH v2 05/12] dax: push advance down into dax_iomap_iter() for read and write Brian Foster
2025-02-19 22:34 ` Darrick J. Wong
2025-02-19 17:50 ` [PATCH v2 06/12] dax: advance the iomap_iter on zero range Brian Foster
2025-02-19 22:34 ` Darrick J. Wong
2025-02-19 17:50 ` [PATCH v2 07/12] dax: advance the iomap_iter on unshare range Brian Foster
2025-02-19 22:35 ` Darrick J. Wong
2025-02-19 17:50 ` [PATCH v2 08/12] dax: advance the iomap_iter on dedupe range Brian Foster
2025-02-19 22:35 ` Darrick J. Wong
2025-02-19 17:50 ` [PATCH v2 09/12] dax: advance the iomap_iter on pte and pmd faults Brian Foster
2025-02-19 22:36 ` Darrick J. Wong
2025-02-19 17:50 ` [PATCH v2 10/12] iomap: remove unnecessary advance from iomap_iter() Brian Foster
2025-02-19 22:30 ` Darrick J. Wong
2025-02-19 17:50 ` [PATCH v2 11/12] iomap: rename iomap_iter processed field to status Brian Foster
2025-02-19 22:30 ` Darrick J. Wong [this message]
2025-02-19 17:50 ` [PATCH v2 12/12] iomap: introduce a full map advance helper Brian Foster
2025-02-19 22:31 ` Darrick J. Wong
2025-02-20 9:10 ` [PATCH v2 00/12] iomap: incremental advance conversion -- phase 2 Christian Brauner
2025-02-20 14:59 ` Brian Foster
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=20250219223047.GF21808@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=bfoster@redhat.com \
--cc=hch@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox