Skip to contentSkip to conversation

btrfs: Refactor __get_raid_index() to btrfs_bg_flags_to_raid_index()

PATCH In review Qu Wenruo 2 participants 3 messages Jan 30, 2018 – Jan 31, 2018 Btrfs file system

lore
Share & tools
lore

Qu Wenruo

author
#0 lore raw

PATCH v2 1/2 btrfs: Refactor __get_raid_index() to btrfs_bg_flags_to_raid_index()

Function __get_raid_index() is used to convert block group flags into raid index, which can be used to get various info directly from btrfs_raid_array[].

Refactor this function a little:

1) Rename to btrfs_bg_flags_to_raid_index()
Double underline prefix is normally for internal functions, while the function is used by both extent-tree and volumes.

Although the name is a little longer, but it should explain its usage quite well.

2) Move it to volumes.h and make it static inline
Just several if-else branches, really no need to define it as a normal function.

This also makes later code re-use between kernel and btrfs-progs easier.

3) Remove function get_block_group_index()
Really no need to do such a simple thing as an exported function.

---
v2:
Remove get_block_group_index() in this patch.
Add extra comment for the usage of btrfs_bg_flags_to_raid_index()

---
 fs/btrfs/ctree.h       |  1 -
 fs/btrfs/extent-tree.c | 41 ++++++++++-------------------------------
 fs/btrfs/volumes.c     |  2 +-
 fs/btrfs/volumes.h     | 22 ++++++++++++++++++++++
 4 files changed, 33 insertions(+), 33 deletions(-)
fs/btrfs/ctree.h +0 -1
index 13c260b525a1..27249240fa3e 100644
@@ -2629,7 +2629,6 @@ struct btrfs_block_group_cache *btrfs_lookup_block_group(
 						 u64 bytenr);
 void btrfs_get_block_group(struct btrfs_block_group_cache *cache);
 void btrfs_put_block_group(struct btrfs_block_group_cache *cache);
-int get_block_group_index(struct btrfs_block_group_cache *cache);
 struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans,
 					     struct btrfs_root *root,
 					     u64 parent, u64 root_objectid,
fs/btrfs/extent-tree.c +10 -31

95 lines not on this page · raw message

fs/btrfs/volumes.c +1 -1
index a25684287501..d818b1f9c625 100644
@@ -4625,7 +4625,7 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
 	if (list_empty(&fs_devices->alloc_list))
 		return -ENOSPC;
 
-	index = __get_raid_index(type);
+	index = btrfs_bg_flags_to_raid_index(type);
 
 	sub_stripes = btrfs_raid_array[index].sub_stripes;
 	dev_stripes = btrfs_raid_array[index].dev_stripes;
fs/btrfs/volumes.h +22 -0
index ff15208344a7..4758fd95f73d 100644
@@ -533,6 +533,28 @@ static inline void btrfs_dev_stat_reset(struct btrfs_device *dev,
 	btrfs_dev_stat_set(dev, index, 0);
 }
 
+/*
+ * Convert block group flags (BTRFS_BLOCK_GROUP_*) to btrfs_raid_types, which
+ * can be used as index to access btrfs_raid_array[].
+ */
+static inline enum btrfs_raid_types btrfs_bg_flags_to_raid_index(u64 flags)
+{
+	if (flags & BTRFS_BLOCK_GROUP_RAID10)
+		return BTRFS_RAID_RAID10;
+	else if (flags & BTRFS_BLOCK_GROUP_RAID1)
+		return BTRFS_RAID_RAID1;
+	else if (flags & BTRFS_BLOCK_GROUP_DUP)
+		return BTRFS_RAID_DUP;
+	else if (flags & BTRFS_BLOCK_GROUP_RAID0)
+		return BTRFS_RAID_RAID0;
+	else if (flags & BTRFS_BLOCK_GROUP_RAID5)
+		return BTRFS_RAID_RAID5;
+	else if (flags & BTRFS_BLOCK_GROUP_RAID6)
+		return BTRFS_RAID_RAID6;
+
+	return BTRFS_RAID_SINGLE; /* BTRFS_BLOCK_GROUP_SINGLE */
+}
+
 void btrfs_update_commit_device_size(struct btrfs_fs_info *fs_info);
 void btrfs_update_commit_device_bytes_used(struct btrfs_fs_info *fs_info,
 					struct btrfs_transaction *transaction);
Signature · 1 line
2.16.1
author
#1 lore raw

PATCH v2 2/2 btrfs: Refactor parameter of BTRFS_MAX_DEVS() from root to fs_info

---
v2:
Added tags.

---
 fs/btrfs/volumes.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
fs/btrfs/volumes.c +3 -3
index d818b1f9c625..215e85e22c8e 100644
@@ -4581,7 +4581,7 @@ static void check_raid56_incompat_flag(struct btrfs_fs_info *info, u64 type)
 	btrfs_set_fs_incompat(info, RAID56);
 }
 
-#define BTRFS_MAX_DEVS(r) ((BTRFS_MAX_ITEM_SIZE(r->fs_info)		\
+#define BTRFS_MAX_DEVS(info) ((BTRFS_MAX_ITEM_SIZE(info)	\
 			- sizeof(struct btrfs_chunk))		\
 			/ sizeof(struct btrfs_stripe) + 1)
 
@@ -4638,7 +4638,7 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
 		max_stripe_size = SZ_1G;
 		max_chunk_size = 10 * max_stripe_size;
 		if (!devs_max)
-			devs_max = BTRFS_MAX_DEVS(info->chunk_root);
+			devs_max = BTRFS_MAX_DEVS(info);
 	} else if (type & BTRFS_BLOCK_GROUP_METADATA) {
 		/* for larger filesystems, use larger metadata chunks */
 		if (fs_devices->total_rw_bytes > 50ULL * SZ_1G)
@@ -4647,7 +4647,7 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
 			max_stripe_size = SZ_256M;
 		max_chunk_size = max_stripe_size;
 		if (!devs_max)
-			devs_max = BTRFS_MAX_DEVS(info->chunk_root);
+			devs_max = BTRFS_MAX_DEVS(info);
 	} else if (type & BTRFS_BLOCK_GROUP_SYSTEM) {
 		max_stripe_size = SZ_32M;
 		max_chunk_size = 2 * max_stripe_size;
Signature · 1 line
2.16.1
#2 lore raw
In reply to Qu Wenruo
Quoted 17 lines · Qu Wenruo

Function __get_raid_index() is used to convert block group flags into raid index, which can be used to get various info directly from btrfs_raid_array[].

Refactor this function a little:

1) Rename to btrfs_bg_flags_to_raid_index()
Double underline prefix is normally for internal functions, while the function is used by both extent-tree and volumes.

Although the name is a little longer, but it should explain its usage quite well.

2) Move it to volumes.h and make it static inline
Just several if-else branches, really no need to define it as a normal function.

Quoted 5 lines

This also makes later code re-use between kernel and btrfs-progs easier.

3) Remove function get_block_group_index()
Really no need to do such a simple thing as an exported function.

Agreed on this kind of cleanups. Patches added to next, thanks.