Commit ea7ab405 authored by Filipe Manana's avatar Filipe Manana Committed by David Sterba
Browse files

btrfs: use the btrfs_extent_map_end() helper everywhere



We have a helper to calculate an extent map's exclusive end offset, but
we only use it in some places. Update every site that open codes the
calculation to use the helper.

Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 4ac81c38
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -519,7 +519,7 @@ static noinline int add_ra_bio_pages(struct inode *inode,
			folio_put(folio);
			break;
		}
		add_size = min(em->start + em->len, page_end + 1) - cur;
		add_size = min(btrfs_extent_map_end(em), page_end + 1) - cur;
		btrfs_free_extent_map(em);
		btrfs_unlock_extent(tree, cur, page_end, NULL);

+3 −2
Original line number Diff line number Diff line
@@ -792,10 +792,11 @@ static bool defrag_check_next_extent(struct inode *inode, struct extent_map *em,
{
	struct btrfs_fs_info *fs_info = inode_to_fs_info(inode);
	struct extent_map *next;
	const u64 em_end = btrfs_extent_map_end(em);
	bool ret = false;

	/* This is the last extent */
	if (em->start + em->len >= i_size_read(inode))
	if (em_end >= i_size_read(inode))
		return false;

	/*
@@ -804,7 +805,7 @@ static bool defrag_check_next_extent(struct inode *inode, struct extent_map *em,
	 * one will not be a target.
	 * This will just cause extra IO without really reducing the fragments.
	 */
	next = defrag_lookup_extent(inode, em->start + em->len, newer_than, locked);
	next = defrag_lookup_extent(inode, em_end, newer_than, locked);
	/* No more em or hole */
	if (!next || next->disk_bytenr >= EXTENT_MAP_LAST_BYTE)
		goto out;
+1 −1
Original line number Diff line number Diff line
@@ -970,7 +970,7 @@ static void btrfs_readahead_expand(struct readahead_control *ractl,
{
	const u64 ra_pos = readahead_pos(ractl);
	const u64 ra_end = ra_pos + readahead_length(ractl);
	const u64 em_end = em->start + em->len;
	const u64 em_end = btrfs_extent_map_end(em);

	/* No expansion for holes and inline extents. */
	if (em->disk_bytenr > EXTENT_MAP_LAST_BYTE)
+5 −4
Original line number Diff line number Diff line
@@ -2195,10 +2195,11 @@ static int find_first_non_hole(struct btrfs_inode *inode, u64 *start, u64 *len)

	/* Hole or vacuum extent(only exists in no-hole mode) */
	if (em->disk_bytenr == EXTENT_MAP_HOLE) {
		const u64 em_end = btrfs_extent_map_end(em);

		ret = 1;
		*len = em->start + em->len > *start + *len ?
		       0 : *start + *len - em->start - em->len;
		*start = em->start + em->len;
		*len = (em_end > *start + *len) ? 0 : (*start + *len - em_end);
		*start = em_end;
	}
	btrfs_free_extent_map(em);
	return ret;
@@ -2947,7 +2948,7 @@ static int btrfs_zero_range(struct inode *inode,
	 * new prealloc extent, so that we get a larger contiguous disk extent.
	 */
	if (em->start <= alloc_start && (em->flags & EXTENT_FLAG_PREALLOC)) {
		const u64 em_end = em->start + em->len;
		const u64 em_end = btrfs_extent_map_end(em);

		if (em_end >= offset + len) {
			/*
+1 −1
Original line number Diff line number Diff line
@@ -7161,7 +7161,7 @@ struct extent_map *btrfs_get_extent(struct btrfs_inode *inode,
	read_unlock(&em_tree->lock);

	if (em) {
		if (em->start > start || em->start + em->len <= start)
		if (em->start > start || btrfs_extent_map_end(em) <= start)
			btrfs_free_extent_map(em);
		else if (em->disk_bytenr == EXTENT_MAP_INLINE && folio)
			btrfs_free_extent_map(em);
Loading