btrfs tests: replace whole ops structure for free space tests
authorDavid Sterba <dsterba@suse.com>
Thu, 19 Nov 2015 10:42:24 +0000 (11:42 +0100)
committerDavid Sterba <dsterba@suse.com>
Thu, 7 Jan 2016 14:01:14 +0000 (15:01 +0100)
Preparatory work for making btrfs_free_space_op constant. In
test_steal_space_from_bitmap_to_extent, we substitute use_bitmap with
own version thus preventing constification. We can rework it so we
replace the whole structure with the correct function pointers.

Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/tests/free-space-tests.c

index 8b72b00..46c2f29 100644 (file)
@@ -445,9 +445,11 @@ test_steal_space_from_bitmap_to_extent(struct btrfs_block_group_cache *cache)
        int ret;
        u64 offset;
        u64 max_extent_size;
-
-       bool (*use_bitmap_op)(struct btrfs_free_space_ctl *,
-                             struct btrfs_free_space *);
+       struct btrfs_free_space_op test_free_space_ops = {
+               .recalc_thresholds = cache->free_space_ctl->op->recalc_thresholds,
+               .use_bitmap = test_use_bitmap,
+       };
+       struct btrfs_free_space_op *orig_free_space_ops;
 
        test_msg("Running space stealing from bitmap to extent\n");
 
@@ -469,8 +471,8 @@ test_steal_space_from_bitmap_to_extent(struct btrfs_block_group_cache *cache)
         * that forces use of bitmaps as soon as we have at least 1
         * extent entry.
         */
-       use_bitmap_op = cache->free_space_ctl->op->use_bitmap;
-       cache->free_space_ctl->op->use_bitmap = test_use_bitmap;
+       orig_free_space_ops = cache->free_space_ctl->op;
+       cache->free_space_ctl->op = &test_free_space_ops;
 
        /*
         * Extent entry covering free space range [128Mb - 256Kb, 128Mb - 128Kb[
@@ -877,7 +879,7 @@ test_steal_space_from_bitmap_to_extent(struct btrfs_block_group_cache *cache)
        if (ret)
                return ret;
 
-       cache->free_space_ctl->op->use_bitmap = use_bitmap_op;
+       cache->free_space_ctl->op = orig_free_space_ops;
        __btrfs_remove_free_space_cache(cache->free_space_ctl);
 
        return 0;