]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: use the btrfs_extent_map_end() helper everywhere
authorFilipe Manana <fdmanana@suse.com>
Fri, 16 Jan 2026 10:57:00 +0000 (10:57 +0000)
committerDavid Sterba <dsterba@suse.com>
Tue, 3 Feb 2026 06:54:36 +0000 (07:54 +0100)
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>
fs/btrfs/compression.c
fs/btrfs/defrag.c
fs/btrfs/extent_io.c
fs/btrfs/file.c
fs/btrfs/inode.c
fs/btrfs/tests/inode-tests.c
fs/btrfs/tree-log.c

index 4323d4172c7b9c9951dee223b33e099dad57a9a2..4c6298cf01b256fa64d08c8665f61ae9e7a209ef 100644 (file)
@@ -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);
 
index bcc6656ad034399af12dbe1b5f94c2a421b84cf8..ecf05cd64696adc946e3eedac4cd2aeed652e86e 100644 (file)
@@ -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;
index f804131b1c78e1b4a743a878be8d488d19620489..dfc17c29221797b67cd3162533812687dcf33d18 100644 (file)
@@ -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)
index 5d47cff5af42e4c82536061d90f7f35bebb92b43..1759776d2d57a5f195ba84e83a13c7f9554c5c61 100644 (file)
@@ -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) {
                        /*
index 691aa5119c0bde3391ee549a184e7b4d383b98f0..fa110827aaabc0ec7be2e9afcf22f4b81163f803 100644 (file)
@@ -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);
index a4c2b7748b953155c8496f706cd6ab3b2f0b3811..6bd17d059ae64249773ecc5d541fd9ff26e81834 100644 (file)
@@ -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);
index 6cffcf0c3e7af970e29c50275c72a96a242e5894..e1bd03ebfd9816aa84a5ab2e3c8d809ba3f056b2 100644 (file)
@@ -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);