summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilipe Manana <fdmanana@suse.com>2026-01-16 10:57:00 +0000
committerDavid Sterba <dsterba@suse.com>2026-02-03 07:54:36 +0100
commitea7ab405c55b6ac4b5c3e61ef37cf697067e3c71 (patch)
tree3174c7ce53faec40f19f228a4943e702b90f5a45
parent4ac81c381102bebf09a47946b343d70ed455c646 (diff)
downloadlwn-ea7ab405c55b6ac4b5c3e61ef37cf697067e3c71.tar.gz
lwn-ea7ab405c55b6ac4b5c3e61ef37cf697067e3c71.zip
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: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--fs/btrfs/compression.c2
-rw-r--r--fs/btrfs/defrag.c5
-rw-r--r--fs/btrfs/extent_io.c2
-rw-r--r--fs/btrfs/file.c9
-rw-r--r--fs/btrfs/inode.c2
-rw-r--r--fs/btrfs/tests/inode-tests.c32
-rw-r--r--fs/btrfs/tree-log.c2
7 files changed, 28 insertions, 26 deletions
diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
index 4323d4172c7b..4c6298cf01b2 100644
--- a/fs/btrfs/compression.c
+++ b/fs/btrfs/compression.c
@@ -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);
diff --git a/fs/btrfs/defrag.c b/fs/btrfs/defrag.c
index bcc6656ad034..ecf05cd64696 100644
--- a/fs/btrfs/defrag.c
+++ b/fs/btrfs/defrag.c
@@ -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;
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index f804131b1c78..dfc17c292217 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -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)
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 5d47cff5af42..1759776d2d57 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -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) {
/*
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 691aa5119c0b..fa110827aaab 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -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);
diff --git a/fs/btrfs/tests/inode-tests.c b/fs/btrfs/tests/inode-tests.c
index a4c2b7748b95..6bd17d059ae6 100644
--- a/fs/btrfs/tests/inode-tests.c
+++ b/fs/btrfs/tests/inode-tests.c
@@ -313,7 +313,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
* unless we have a page for it to write into. Maybe we should change
* this?
*/
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
em = btrfs_get_extent(BTRFS_I(inode), NULL, offset, sectorsize);
@@ -335,7 +335,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
test_err("unexpected flags set, want 0 have %u", em->flags);
goto out;
}
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
/* Regular extent */
@@ -362,7 +362,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
test_err("wrong offset, want 0, have %llu", em->offset);
goto out;
}
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
/* The next 3 are split extents */
@@ -391,7 +391,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
}
disk_bytenr = btrfs_extent_map_block_start(em);
orig_start = em->start;
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
em = btrfs_get_extent(BTRFS_I(inode), NULL, offset, sectorsize);
@@ -413,7 +413,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
test_err("unexpected flags set, want 0 have %u", em->flags);
goto out;
}
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
em = btrfs_get_extent(BTRFS_I(inode), NULL, offset, sectorsize);
@@ -446,7 +446,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
disk_bytenr, btrfs_extent_map_block_start(em));
goto out;
}
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
/* Prealloc extent */
@@ -474,7 +474,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
test_err("wrong offset, want 0, have %llu", em->offset);
goto out;
}
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
/* The next 3 are a half written prealloc extent */
@@ -504,7 +504,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
}
disk_bytenr = btrfs_extent_map_block_start(em);
orig_start = em->start;
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
em = btrfs_get_extent(BTRFS_I(inode), NULL, offset, sectorsize);
@@ -536,7 +536,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
disk_bytenr + em->offset, btrfs_extent_map_block_start(em));
goto out;
}
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
em = btrfs_get_extent(BTRFS_I(inode), NULL, offset, sectorsize);
@@ -569,7 +569,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
disk_bytenr + em->offset, btrfs_extent_map_block_start(em));
goto out;
}
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
/* Now for the compressed extent */
@@ -602,7 +602,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
BTRFS_COMPRESS_ZLIB, btrfs_extent_map_compression(em));
goto out;
}
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
/* Split compressed extent */
@@ -637,7 +637,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
}
disk_bytenr = btrfs_extent_map_block_start(em);
orig_start = em->start;
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
em = btrfs_get_extent(BTRFS_I(inode), NULL, offset, sectorsize);
@@ -663,7 +663,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
test_err("wrong offset, want 0, have %llu", em->offset);
goto out;
}
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
em = btrfs_get_extent(BTRFS_I(inode), NULL, offset, sectorsize);
@@ -697,7 +697,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
BTRFS_COMPRESS_ZLIB, btrfs_extent_map_compression(em));
goto out;
}
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
/* A hole between regular extents but no hole extent */
@@ -724,7 +724,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
test_err("wrong offset, want 0, have %llu", em->offset);
goto out;
}
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
em = btrfs_get_extent(BTRFS_I(inode), NULL, offset, SZ_4M);
@@ -756,7 +756,7 @@ static noinline int test_btrfs_get_extent(u32 sectorsize, u32 nodesize)
test_err("wrong offset, want 0, have %llu", em->offset);
goto out;
}
- offset = em->start + em->len;
+ offset = btrfs_extent_map_end(em);
btrfs_free_extent_map(em);
em = btrfs_get_extent(BTRFS_I(inode), NULL, offset, sectorsize);
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 6cffcf0c3e7a..e1bd03ebfd98 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -5160,7 +5160,7 @@ static int log_one_extent(struct btrfs_trans_handle *trans,
if (ctx->logged_before) {
drop_args.path = path;
drop_args.start = em->start;
- drop_args.end = em->start + em->len;
+ drop_args.end = btrfs_extent_map_end(em);
drop_args.replace_extent = true;
drop_args.extent_item_size = sizeof(fi);
ret = btrfs_drop_extents(trans, log, inode, &drop_args);