From a0edc6859e6284a5711651e483c338829cd8b81b Mon Sep 17 00:00:00 2001 From: Su Yue Date: Wed, 18 Dec 2019 13:18:46 +0800 Subject: [PATCH] btrfs-progs: block-group: add dirty_bgs list related memebers The old style uses extent bit BLOCK_GROUP_DIRTY to mark dirty block groups in extent cache. To replace it, add btrfs_trans_handle::dirty_bgs and btrfs_block_group_cache::dirty_list. Reviewed-by: Qu Wenruo Signed-off-by: Su Yue Signed-off-by: David Sterba --- ctree.h | 3 +++ extent-tree.c | 4 ++++ transaction.c | 1 + transaction.h | 3 ++- 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ctree.h b/ctree.h index b6420d1a..105d8cb3 100644 --- a/ctree.h +++ b/ctree.h @@ -1123,6 +1123,9 @@ struct btrfs_block_group_cache { /* Block group cache stuff */ struct rb_node cache_node; + + /* For dirty block groups */ + struct list_head dirty_list; }; struct btrfs_device; diff --git a/extent-tree.c b/extent-tree.c index d2539d8f..a3994626 100644 --- a/extent-tree.c +++ b/extent-tree.c @@ -2814,6 +2814,8 @@ static int read_one_block_group(struct btrfs_fs_info *fs_info, cache->pinned = 0; cache->flags = btrfs_block_group_flags(&bgi); cache->used = btrfs_block_group_used(&bgi); + INIT_LIST_HEAD(&cache->dirty_list); + if (cache->flags & BTRFS_BLOCK_GROUP_DATA) { bit = BLOCK_GROUP_DATA; } else if (cache->flags & BTRFS_BLOCK_GROUP_SYSTEM) { @@ -2900,6 +2902,7 @@ btrfs_add_block_group(struct btrfs_fs_info *fs_info, u64 bytes_used, u64 type, cache->key.type = BTRFS_BLOCK_GROUP_ITEM_KEY; cache->used = bytes_used; cache->flags = type; + INIT_LIST_HEAD(&cache->dirty_list); exclude_super_stripes(fs_info, cache); ret = update_space_info(fs_info, cache->flags, size, bytes_used, @@ -2997,6 +3000,7 @@ int btrfs_make_block_groups(struct btrfs_trans_handle *trans, cache->key.type = BTRFS_BLOCK_GROUP_ITEM_KEY; cache->used = 0; cache->flags = group_type; + INIT_LIST_HEAD(&cache->dirty_list); ret = update_space_info(fs_info, group_type, group_size, 0, &cache->space_info); diff --git a/transaction.c b/transaction.c index c9035c76..269e52c0 100644 --- a/transaction.c +++ b/transaction.c @@ -52,6 +52,7 @@ struct btrfs_trans_handle* btrfs_start_transaction(struct btrfs_root *root, root->last_trans = h->transid; root->commit_root = root->node; extent_buffer_get(root->node); + INIT_LIST_HEAD(&h->dirty_bgs); return h; } diff --git a/transaction.h b/transaction.h index 750f456b..8fa65508 100644 --- a/transaction.h +++ b/transaction.h @@ -22,6 +22,7 @@ #include "kerncompat.h" #include "ctree.h" #include "delayed-ref.h" +#include "kernel-lib/list.h" struct btrfs_trans_handle { struct btrfs_fs_info *fs_info; @@ -35,7 +36,7 @@ struct btrfs_trans_handle { unsigned long blocks_used; struct btrfs_block_group_cache *block_group; struct btrfs_delayed_ref_root delayed_refs; - + struct list_head dirty_bgs; }; struct btrfs_trans_handle* btrfs_start_transaction(struct btrfs_root *root,