]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: use shifts for sectorsize and nodesize
authorDavid Sterba <dsterba@suse.com>
Wed, 27 May 2026 11:16:52 +0000 (13:16 +0200)
committerJohannes Thumshirn <johannes.thumshirn@wdc.com>
Tue, 9 Jun 2026 16:22:45 +0000 (18:22 +0200)
Convert more multiplications of sectorsize or nodesize to use the
shifts. The remaining cases are multiplications by constants that
compiler can optimize by itself, and in tests.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Boris Burkov <boris@bur.io>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/delalloc-space.c
fs/btrfs/disk-io.c
fs/btrfs/file-item.c
fs/btrfs/relocation.c
fs/btrfs/transaction.c

index 4293a63834337f2d0ff30f96b90e5dc55202bf9a..d357ed7efd99bdb70502070ddb5b4361cca4a450 100644 (file)
@@ -281,7 +281,7 @@ static void btrfs_calculate_inode_block_rsv_size(struct btrfs_fs_info *fs_info,
         *
         * This is overestimating in most cases.
         */
-       qgroup_rsv_size = (u64)outstanding_extents * fs_info->nodesize;
+       qgroup_rsv_size = ((u64)outstanding_extents << fs_info->nodesize_bits);
 
        spin_lock(&block_rsv->lock);
        block_rsv->size = reserve_size;
@@ -311,7 +311,7 @@ static void calc_inode_reservations(struct btrfs_inode *inode,
         * for an inode update.
         */
        *meta_reserve += inode_update;
-       *qgroup_reserve = nr_extents * fs_info->nodesize;
+       *qgroup_reserve = (nr_extents << fs_info->nodesize_bits);
 }
 
 int btrfs_delalloc_reserve_metadata(struct btrfs_inode *inode, u64 num_bytes,
index ec13eac2b3d7b10edf28c2dfd6dadd31dfd14785..531e0a68f06b33e1809ae7918df2a5186748d3c1 100644 (file)
@@ -563,7 +563,7 @@ static bool btree_dirty_folio(struct address_space *mapping,
                        continue;
                }
                spin_unlock_irqrestore(&subpage->lock, flags);
-               cur = page_start + cur_bit * fs_info->sectorsize;
+               cur = page_start + (cur_bit << fs_info->sectorsize_bits);
 
                eb = find_extent_buffer(fs_info, cur);
                ASSERT(eb);
index 82ae4a2afd34717bb623833747f1d4ec1ceb8be5..9f6454e9db818635eb5a2cc97dcde6bcdc804d00 100644 (file)
@@ -1309,7 +1309,7 @@ found:
 
        index += ins_size;
        ins_size /= csum_size;
-       total_bytes += ins_size * fs_info->sectorsize;
+       total_bytes += (ins_size << fs_info->sectorsize_bits);
 
        if (total_bytes < sums->len) {
                btrfs_release_path(path);
index 2b11eda49c06ea9e01609e2d8c25a54ca3c41215..9469f89823550caaf1f381dc0bcce2c60ac73977 100644 (file)
@@ -1574,7 +1574,7 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc,
         * and * 2 since we have two trees to COW.
         */
        reserve_level = max_t(int, 1, btrfs_root_level(root_item));
-       min_reserved = fs_info->nodesize * reserve_level * 2;
+       min_reserved = (reserve_level << fs_info->nodesize_bits) * 2;
        memset(&next_key, 0, sizeof(next_key));
 
        while (1) {
@@ -2572,7 +2572,7 @@ static int relocate_cowonly_block(struct btrfs_trans_handle *trans,
 
        nr_levels = max(btrfs_header_level(root->node) - block->level, 0) + 1;
 
-       num_bytes = fs_info->nodesize * nr_levels;
+       num_bytes = (nr_levels << fs_info->nodesize_bits);
        ret = refill_metadata_space(trans, rc, num_bytes);
        if (ret) {
                btrfs_put_root(root);
index a289a8fa237c8ae8e5f440bd3fd3f49824054f4d..2263cb6bd8ca474409ea67a3d1058004f561560c 100644 (file)
@@ -631,7 +631,7 @@ start_transaction(struct btrfs_root *root, unsigned int num_items,
         * the appropriate flushing if need be.
         */
        if (num_items && root != fs_info->chunk_root) {
-               qgroup_reserved = num_items * fs_info->nodesize;
+               qgroup_reserved = (num_items << fs_info->nodesize_bits);
                /*
                 * Use prealloc for now, as there might be a currently running
                 * transaction that could free this reserved space prematurely