btrfs: drop gfp from parameter extent state helpers
authorDavid Sterba <dsterba@suse.com>
Wed, 24 May 2023 23:04:39 +0000 (01:04 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 19 Jun 2023 11:59:30 +0000 (13:59 +0200)
Now that all extent state bit helpers effectively take the GFP_NOFS mask
(and GFP_NOWAIT is encoded in the bits) we can remove the parameter.
This reduces stack consumption in many functions and simplifies a lot of
code.

Net effect on module on a release build:

   text    data     bss     dec     hex filename
1250432   20985   16088 1287505  13a551 pre/btrfs.ko
1247074   20985   16088 1284147  139833 post/btrfs.ko

DELTA: -3358

Signed-off-by: David Sterba <dsterba@suse.com>
13 files changed:
fs/btrfs/block-group.c
fs/btrfs/defrag.c
fs/btrfs/dev-replace.c
fs/btrfs/extent-io-tree.c
fs/btrfs/extent-io-tree.h
fs/btrfs/extent-tree.c
fs/btrfs/extent_io.c
fs/btrfs/extent_map.c
fs/btrfs/file-item.c
fs/btrfs/inode.c
fs/btrfs/relocation.c
fs/btrfs/tests/extent-io-tests.c
fs/btrfs/zoned.c

index 202e2aa..618ba76 100644 (file)
@@ -3523,7 +3523,7 @@ int btrfs_update_block_group(struct btrfs_trans_handle *trans,
 
                        set_extent_bit(&trans->transaction->pinned_extents,
                                       bytenr, bytenr + num_bytes - 1,
-                                      EXTENT_DIRTY, NULL, GFP_NOFS);
+                                      EXTENT_DIRTY, NULL);
                }
 
                spin_lock(&trans->transaction->dirty_bgs_lock);
index 4e7a1e0..f2ff4cb 100644 (file)
@@ -1041,8 +1041,7 @@ static int defrag_one_locked_target(struct btrfs_inode *inode,
                         EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING |
                         EXTENT_DEFRAG, cached_state);
        set_extent_bit(&inode->io_tree, start, start + len - 1,
-                      EXTENT_DELALLOC | EXTENT_DEFRAG,
-                      cached_state, GFP_NOFS);
+                      EXTENT_DELALLOC | EXTENT_DEFRAG, cached_state);
 
        /* Update the page status */
        for (i = start_index - first_index; i <= last_index - first_index; i++) {
index 3a0fc57..dc3f30c 100644 (file)
@@ -796,7 +796,7 @@ static int btrfs_set_target_alloc_state(struct btrfs_device *srcdev,
                                      &found_start, &found_end,
                                      CHUNK_ALLOCATED, &cached_state)) {
                ret = set_extent_bit(&tgtdev->alloc_state, found_start,
-                                    found_end, CHUNK_ALLOCATED, NULL, GFP_NOFS);
+                                    found_end, CHUNK_ALLOCATED, NULL);
                if (ret)
                        break;
                start = found_end + 1;
index 83e40c0..a2315a4 100644 (file)
@@ -556,7 +556,7 @@ static void set_gfp_mask_from_bits(u32 *bits, gfp_t *mask)
  */
 int __clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
                       u32 bits, struct extent_state **cached_state,
-                      gfp_t mask, struct extent_changeset *changeset)
+                      struct extent_changeset *changeset)
 {
        struct extent_state *state;
        struct extent_state *cached;
@@ -566,6 +566,7 @@ int __clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
        int clear = 0;
        int wake;
        int delete = (bits & EXTENT_CLEAR_ALL_BITS);
+       gfp_t mask;
 
        set_gfp_mask_from_bits(&bits, &mask);
        btrfs_debug_check_extent_io_range(tree, start, end);
@@ -964,7 +965,8 @@ out:
 
 /*
  * Set some bits on a range in the tree.  This may require allocations or
- * sleeping, so the gfp mask is used to indicate what is allowed.
+ * sleeping. By default all allocations use GFP_NOFS, use EXTENT_NOWAIT for
+ * GFP_NOWAIT.
  *
  * If any of the exclusive bits are set, this will fail with -EEXIST if some
  * part of the range already has the desired bits set.  The extent_state of the
@@ -979,7 +981,7 @@ static int __set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
                            u32 bits, u64 *failed_start,
                            struct extent_state **failed_state,
                            struct extent_state **cached_state,
-                           struct extent_changeset *changeset, gfp_t mask)
+                           struct extent_changeset *changeset)
 {
        struct extent_state *state;
        struct extent_state *prealloc = NULL;
@@ -989,6 +991,7 @@ static int __set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
        u64 last_start;
        u64 last_end;
        u32 exclusive_bits = (bits & EXTENT_LOCKED);
+       gfp_t mask;
 
        set_gfp_mask_from_bits(&bits, &mask);
        btrfs_debug_check_extent_io_range(tree, start, end);
@@ -1200,10 +1203,10 @@ out:
 }
 
 int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
-                  u32 bits, struct extent_state **cached_state, gfp_t mask)
+                  u32 bits, struct extent_state **cached_state)
 {
        return __set_extent_bit(tree, start, end, bits, NULL, NULL,
-                               cached_state, NULL, mask);
+                               cached_state, NULL);
 }
 
 /*
@@ -1699,8 +1702,7 @@ int set_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
         */
        ASSERT(!(bits & EXTENT_LOCKED));
 
-       return __set_extent_bit(tree, start, end, bits, NULL, NULL, NULL,
-                               changeset, GFP_NOFS);
+       return __set_extent_bit(tree, start, end, bits, NULL, NULL, NULL, changeset);
 }
 
 int clear_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
@@ -1712,8 +1714,7 @@ int clear_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
         */
        ASSERT(!(bits & EXTENT_LOCKED));
 
-       return __clear_extent_bit(tree, start, end, bits, NULL, GFP_NOFS,
-                                 changeset);
+       return __clear_extent_bit(tree, start, end, bits, NULL, changeset);
 }
 
 int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end,
@@ -1723,7 +1724,7 @@ int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end,
        u64 failed_start;
 
        err = __set_extent_bit(tree, start, end, EXTENT_LOCKED, &failed_start,
-                              NULL, cached, NULL, GFP_NOFS);
+                              NULL, cached, NULL);
        if (err == -EEXIST) {
                if (failed_start > start)
                        clear_extent_bit(tree, start, failed_start - 1,
@@ -1745,7 +1746,7 @@ int lock_extent(struct extent_io_tree *tree, u64 start, u64 end,
        u64 failed_start;
 
        err = __set_extent_bit(tree, start, end, EXTENT_LOCKED, &failed_start,
-                              &failed_state, cached_state, NULL, GFP_NOFS);
+                              &failed_state, cached_state, NULL);
        while (err == -EEXIST) {
                if (failed_start != start)
                        clear_extent_bit(tree, start, failed_start - 1,
@@ -1755,7 +1756,7 @@ int lock_extent(struct extent_io_tree *tree, u64 start, u64 end,
                                &failed_state);
                err = __set_extent_bit(tree, start, end, EXTENT_LOCKED,
                                       &failed_start, &failed_state,
-                                      cached_state, NULL, GFP_NOFS);
+                                      cached_state, NULL);
        }
        return err;
 }
index d7f5afe..fbd3b27 100644 (file)
@@ -136,22 +136,20 @@ int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end,
 int clear_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
                             u32 bits, struct extent_changeset *changeset);
 int __clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
-                      u32 bits, struct extent_state **cached, gfp_t mask,
+                      u32 bits, struct extent_state **cached,
                       struct extent_changeset *changeset);
 
 static inline int clear_extent_bit(struct extent_io_tree *tree, u64 start,
                                   u64 end, u32 bits,
                                   struct extent_state **cached)
 {
-       return __clear_extent_bit(tree, start, end, bits, cached,
-                                 GFP_NOFS, NULL);
+       return __clear_extent_bit(tree, start, end, bits, cached, NULL);
 }
 
 static inline int unlock_extent(struct extent_io_tree *tree, u64 start, u64 end,
                                struct extent_state **cached)
 {
-       return __clear_extent_bit(tree, start, end, EXTENT_LOCKED, cached,
-                                 GFP_NOFS, NULL);
+       return __clear_extent_bit(tree, start, end, EXTENT_LOCKED, cached, NULL);
 }
 
 static inline int clear_extent_bits(struct extent_io_tree *tree, u64 start,
@@ -163,13 +161,13 @@ static inline int clear_extent_bits(struct extent_io_tree *tree, u64 start,
 int set_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
                           u32 bits, struct extent_changeset *changeset);
 int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
-                  u32 bits, struct extent_state **cached_state, gfp_t mask);
+                  u32 bits, struct extent_state **cached_state);
 
 static inline int clear_extent_uptodate(struct extent_io_tree *tree, u64 start,
                u64 end, struct extent_state **cached_state)
 {
        return __clear_extent_bit(tree, start, end, EXTENT_UPTODATE,
-                                 cached_state, GFP_NOFS, NULL);
+                                 cached_state, NULL);
 }
 
 static inline int clear_extent_dirty(struct extent_io_tree *tree, u64 start,
index 6e31910..71aaf28 100644 (file)
@@ -74,7 +74,7 @@ int btrfs_add_excluded_extent(struct btrfs_fs_info *fs_info,
 {
        u64 end = start + num_bytes - 1;
        set_extent_bit(&fs_info->excluded_extents, start, end,
-                      EXTENT_UPTODATE, NULL, GFP_NOFS);
+                      EXTENT_UPTODATE, NULL);
        return 0;
 }
 
@@ -2508,7 +2508,7 @@ static int pin_down_extent(struct btrfs_trans_handle *trans,
        spin_unlock(&cache->space_info->lock);
 
        set_extent_bit(&trans->transaction->pinned_extents, bytenr,
-                      bytenr + num_bytes - 1, EXTENT_DIRTY, NULL, GFP_NOFS);
+                      bytenr + num_bytes - 1, EXTENT_DIRTY, NULL);
        return 0;
 }
 
@@ -4831,16 +4831,15 @@ btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root,
                if (buf->log_index == 0)
                        set_extent_bit(&root->dirty_log_pages, buf->start,
                                       buf->start + buf->len - 1,
-                                      EXTENT_DIRTY, NULL, GFP_NOFS);
+                                      EXTENT_DIRTY, NULL);
                else
                        set_extent_bit(&root->dirty_log_pages, buf->start,
                                       buf->start + buf->len - 1,
-                                      EXTENT_NEW, NULL, GFP_NOFS);
+                                      EXTENT_NEW, NULL);
        } else {
                buf->log_index = -1;
                set_extent_bit(&trans->transaction->dirty_pages, buf->start,
-                              buf->start + buf->len - 1, EXTENT_DIRTY, NULL,
-                              GFP_NOFS);
+                              buf->start + buf->len - 1, EXTENT_DIRTY, NULL);
        }
        /* this returns a buffer locked for blocking */
        return buf;
@@ -5981,8 +5980,7 @@ static int btrfs_trim_free_extents(struct btrfs_device *device, u64 *trimmed)
                                          &bytes);
                if (!ret)
                        set_extent_bit(&device->alloc_state, start,
-                                      start + bytes - 1,
-                                      CHUNK_TRIMMED, NULL, GFP_NOFS);
+                                      start + bytes - 1, CHUNK_TRIMMED, NULL);
                mutex_unlock(&fs_info->chunk_mutex);
 
                if (ret)
index b38fbdd..3c77739 100644 (file)
@@ -2456,8 +2456,7 @@ static int try_release_extent_state(struct extent_io_tree *tree,
                 * The delalloc new bit will be cleared by ordered extent
                 * completion.
                 */
-               ret = __clear_extent_bit(tree, start, end, clear_bits, NULL,
-                                        mask, NULL);
+               ret = __clear_extent_bit(tree, start, end, clear_bits, NULL, NULL);
 
                /* if clear_extent_bit failed for enomem reasons,
                 * we can't allow the release to continue.
index 4c8c875..4d86d47 100644 (file)
@@ -366,7 +366,7 @@ static void extent_map_device_set_bits(struct extent_map *em, unsigned bits)
 
                set_extent_bit(&device->alloc_state, stripe->physical,
                               stripe->physical + stripe_size - 1,
-                              bits | EXTENT_NOWAIT, NULL, GFP_NOWAIT);
+                              bits | EXTENT_NOWAIT, NULL);
        }
 }
 
@@ -383,7 +383,7 @@ static void extent_map_device_clear_bits(struct extent_map *em, unsigned bits)
                __clear_extent_bit(&device->alloc_state, stripe->physical,
                                   stripe->physical + stripe_size - 1,
                                   bits | EXTENT_NOWAIT,
-                                  NULL, GFP_NOWAIT, NULL);
+                                  NULL, NULL);
        }
 }
 
index 1e364a7..594b69d 100644 (file)
@@ -95,7 +95,7 @@ int btrfs_inode_set_file_extent_range(struct btrfs_inode *inode, u64 start,
        if (btrfs_fs_incompat(inode->root->fs_info, NO_HOLES))
                return 0;
        return set_extent_bit(&inode->file_extent_tree, start, start + len - 1,
-                             EXTENT_DIRTY, NULL, GFP_NOFS);
+                             EXTENT_DIRTY, NULL);
 }
 
 /*
@@ -440,7 +440,7 @@ blk_status_t btrfs_lookup_bio_sums(struct btrfs_bio *bbio)
 
                                set_extent_bit(&inode->io_tree, file_offset,
                                               file_offset + sectorsize - 1,
-                                              EXTENT_NODATASUM, NULL, GFP_NOFS);
+                                              EXTENT_NODATASUM, NULL);
                        } else {
                                btrfs_warn_rl(fs_info,
                        "csum hole found for disk bytenr range [%llu, %llu)",
index 8dd979b..40b5f2d 100644 (file)
@@ -2888,8 +2888,7 @@ static int btrfs_find_new_delalloc_bytes(struct btrfs_inode *inode,
 
                ret = set_extent_bit(&inode->io_tree, search_start,
                                     search_start + em_len - 1,
-                                    EXTENT_DELALLOC_NEW, cached_state,
-                                    GFP_NOFS);
+                                    EXTENT_DELALLOC_NEW, cached_state);
 next:
                search_start = extent_map_end(em);
                free_extent_map(em);
@@ -2923,7 +2922,7 @@ int btrfs_set_extent_delalloc(struct btrfs_inode *inode, u64 start, u64 end,
        }
 
        return set_extent_bit(&inode->io_tree, start, end,
-                             EXTENT_DELALLOC | extra_bits, cached_state, GFP_NOFS);
+                             EXTENT_DELALLOC | extra_bits, cached_state);
 }
 
 /* see btrfs_writepage_start_hook for details on why this is required */
@@ -5000,7 +4999,7 @@ again:
 
        if (only_release_metadata)
                set_extent_bit(&inode->io_tree, block_start, block_end,
-                              EXTENT_NORESERVE, NULL, GFP_NOFS);
+                              EXTENT_NORESERVE, NULL);
 
 out_unlock:
        if (ret) {
index 1ed8b13..0bda67a 100644 (file)
@@ -175,8 +175,7 @@ static void mark_block_processed(struct reloc_control *rc,
                     rc->block_group->length)) {
                blocksize = rc->extent_root->fs_info->nodesize;
                set_extent_bit(&rc->processed_blocks, node->bytenr,
-                              node->bytenr + blocksize - 1, EXTENT_DIRTY,
-                              NULL, GFP_NOFS);
+                              node->bytenr + blocksize - 1, EXTENT_DIRTY, NULL);
        }
        node->processed = 1;
 }
@@ -3054,7 +3053,7 @@ static int relocate_one_page(struct inode *inode, struct file_ra_state *ra,
 
                        set_extent_bit(&BTRFS_I(inode)->io_tree,
                                       boundary_start, boundary_end,
-                                      EXTENT_BOUNDARY, NULL, GFP_NOFS);
+                                      EXTENT_BOUNDARY, NULL);
                }
                unlock_extent(&BTRFS_I(inode)->io_tree, clamped_start, clamped_end,
                              &cached_state);
index acaaddf..f6bc6d7 100644 (file)
@@ -159,7 +159,7 @@ static int test_find_delalloc(u32 sectorsize)
         * |--- delalloc ---|
         * |---  search  ---|
         */
-       set_extent_bit(tmp, 0, sectorsize - 1, EXTENT_DELALLOC, NULL, GFP_NOFS);
+       set_extent_bit(tmp, 0, sectorsize - 1, EXTENT_DELALLOC, NULL);
        start = 0;
        end = start + PAGE_SIZE - 1;
        found = find_lock_delalloc_range(inode, locked_page, &start,
@@ -190,7 +190,7 @@ static int test_find_delalloc(u32 sectorsize)
                test_err("couldn't find the locked page");
                goto out_bits;
        }
-       set_extent_bit(tmp, sectorsize, max_bytes - 1, EXTENT_DELALLOC, NULL, GFP_NOFS);
+       set_extent_bit(tmp, sectorsize, max_bytes - 1, EXTENT_DELALLOC, NULL);
        start = test_start;
        end = start + PAGE_SIZE - 1;
        found = find_lock_delalloc_range(inode, locked_page, &start,
@@ -245,7 +245,7 @@ static int test_find_delalloc(u32 sectorsize)
         *
         * We are re-using our test_start from above since it works out well.
         */
-       set_extent_bit(tmp, max_bytes, total_dirty - 1, EXTENT_DELALLOC, NULL, GFP_NOFS);
+       set_extent_bit(tmp, max_bytes, total_dirty - 1, EXTENT_DELALLOC, NULL);
        start = test_start;
        end = start + PAGE_SIZE - 1;
        found = find_lock_delalloc_range(inode, locked_page, &start,
@@ -504,7 +504,7 @@ static int test_find_first_clear_extent_bit(void)
         * 4M-32M
         */
        set_extent_bit(&tree, SZ_1M, SZ_4M - 1,
-                      CHUNK_TRIMMED | CHUNK_ALLOCATED, NULL, GFP_NOFS);
+                      CHUNK_TRIMMED | CHUNK_ALLOCATED, NULL);
 
        find_first_clear_extent_bit(&tree, SZ_512K, &start, &end,
                                    CHUNK_TRIMMED | CHUNK_ALLOCATED);
@@ -517,7 +517,7 @@ static int test_find_first_clear_extent_bit(void)
 
        /* Now add 32M-64M so that we have a hole between 4M-32M */
        set_extent_bit(&tree, SZ_32M, SZ_64M - 1,
-                      CHUNK_TRIMMED | CHUNK_ALLOCATED, NULL, GFP_NOFS);
+                      CHUNK_TRIMMED | CHUNK_ALLOCATED, NULL);
 
        /*
         * Request first hole starting at 12M, we should get 4M-32M
@@ -548,8 +548,7 @@ static int test_find_first_clear_extent_bit(void)
         * Set 64M-72M with CHUNK_ALLOC flag, then search for CHUNK_TRIMMED flag
         * being unset in this range, we should get the entry in range 64M-72M
         */
-       set_extent_bit(&tree, SZ_64M, SZ_64M + SZ_8M - 1, CHUNK_ALLOCATED, NULL,
-                      GFP_NOFS);
+       set_extent_bit(&tree, SZ_64M, SZ_64M + SZ_8M - 1, CHUNK_ALLOCATED, NULL);
        find_first_clear_extent_bit(&tree, SZ_64M + SZ_1M, &start, &end,
                                    CHUNK_TRIMMED);
 
index fb90e2b..98d6b8c 100644 (file)
@@ -1612,7 +1612,7 @@ void btrfs_redirty_list_add(struct btrfs_transaction *trans,
        set_bit(EXTENT_BUFFER_NO_CHECK, &eb->bflags);
        set_extent_buffer_dirty(eb);
        set_extent_bit(&trans->dirty_pages, eb->start, eb->start + eb->len - 1,
-                       EXTENT_DIRTY | EXTENT_NOWAIT, NULL, GFP_NOWAIT);
+                       EXTENT_DIRTY | EXTENT_NOWAIT, NULL);
 }
 
 bool btrfs_use_zone_append(struct btrfs_bio *bbio)