Unverified Commit 6db38858 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Christian Brauner
Browse files

iomap: turn iomap_want_unshare_iter into an inline function



iomap_want_unshare_iter currently sits in fs/iomap/buffered-io.c, which
depends on CONFIG_BLOCK.  It is also in used in fs/dax.c whіch has no
such dependency.  Given that it is a trivial check turn it into an inline
in include/linux/iomap.h to fix the DAX && !BLOCK build.

Fixes: 6ef6a0e8 ("iomap: share iomap_unshare_iter predicate code with fsdax")
Reported-by: default avatarkernel test robot <lkp@intel.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20241015041350.118403-1-hch@lst.de


Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent dad1b6c8
Loading
Loading
Loading
Loading
+0 −17
Original line number Diff line number Diff line
@@ -1309,23 +1309,6 @@ void iomap_file_buffered_write_punch_delalloc(struct inode *inode,
}
EXPORT_SYMBOL_GPL(iomap_file_buffered_write_punch_delalloc);

bool iomap_want_unshare_iter(const struct iomap_iter *iter)
{
	/*
	 * Don't bother with blocks that are not shared to start with; or
	 * mappings that cannot be shared, such as inline data, delalloc
	 * reservations, holes or unwritten extents.
	 *
	 * Note that we use srcmap directly instead of iomap_iter_srcmap as
	 * unsharing requires providing a separate source map, and the presence
	 * of one is a good indicator that unsharing is needed, unlike
	 * IOMAP_F_SHARED which can be set for any data that goes into the COW
	 * fork for XFS.
	 */
	return (iter->iomap.flags & IOMAP_F_SHARED) &&
		iter->srcmap.type == IOMAP_MAPPED;
}

static loff_t iomap_unshare_iter(struct iomap_iter *iter)
{
	struct iomap *iomap = &iter->iomap;
+19 −1
Original line number Diff line number Diff line
@@ -256,6 +256,25 @@ static inline const struct iomap *iomap_iter_srcmap(const struct iomap_iter *i)
	return &i->iomap;
}

/*
 * Check if the range needs to be unshared for a FALLOC_FL_UNSHARE_RANGE
 * operation.
 *
 * Don't bother with blocks that are not shared to start with; or mappings that
 * cannot be shared, such as inline data, delalloc reservations, holes or
 * unwritten extents.
 *
 * Note that we use srcmap directly instead of iomap_iter_srcmap as unsharing
 * requires providing a separate source map, and the presence of one is a good
 * indicator that unsharing is needed, unlike IOMAP_F_SHARED which can be set
 * for any data that goes into the COW fork for XFS.
 */
static inline bool iomap_want_unshare_iter(const struct iomap_iter *iter)
{
	return (iter->iomap.flags & IOMAP_F_SHARED) &&
		iter->srcmap.type == IOMAP_MAPPED;
}

ssize_t iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *from,
		const struct iomap_ops *ops, void *private);
int iomap_read_folio(struct folio *folio, const struct iomap_ops *ops);
@@ -267,7 +286,6 @@ void iomap_invalidate_folio(struct folio *folio, size_t offset, size_t len);
bool iomap_dirty_folio(struct address_space *mapping, struct folio *folio);
int iomap_file_unshare(struct inode *inode, loff_t pos, loff_t len,
		const struct iomap_ops *ops);
bool iomap_want_unshare_iter(const struct iomap_iter *iter);
int iomap_zero_range(struct inode *inode, loff_t pos, loff_t len,
		bool *did_zero, const struct iomap_ops *ops);
int iomap_truncate_page(struct inode *inode, loff_t pos, bool *did_zero,