Linux-BTRFS Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH 0/3] Misc btrfs-progs fixes 
@ 2019-10-30 12:22 Nikolay Borisov
  2019-10-30 12:22 ` [PATCH 1/3] btrfs-progs: Initialize sub_stripes to 1 in btrfs_alloc_data_chunk Nikolay Borisov
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Nikolay Borisov @ 2019-10-30 12:22 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Nikolay Borisov

Here are 2 cleanups and 1 minor fix for mkfs. The gist of the fix is to ensure 
sub_stripes is always set to 1 when mkfs creates blockgroups with alloc profile 
different than RAID10. This what kernels does. 

The other 2 patches are simple cleanups which reduce the number of arguments 
of btrfs_alloc_data_chunk. 

Nikolay Borisov (3):
  btrfs-progs: Initialize sub_stripes to 1 in btrfs_alloc_data_chunk
  btrfs-progs: Remove type argument from btrfs_alloc_data_chunk
  btrfs-progs: Remove convert param from btrfs_alloc_data_chunk

 convert/main.c |  4 +---
 volumes.c      | 52 ++++++++++++++++++----------------------------------
 volumes.h      |  3 +--
 3 files changed, 20 insertions(+), 39 deletions(-)

-- 
2.7.4


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/3] btrfs-progs: Initialize sub_stripes to 1 in btrfs_alloc_data_chunk
  2019-10-30 12:22 [PATCH 0/3] Misc btrfs-progs fixes Nikolay Borisov
@ 2019-10-30 12:22 ` Nikolay Borisov
  2019-10-30 12:42   ` Qu Wenruo
  2019-10-30 12:22 ` [PATCH 2/3] btrfs-progs: Remove type argument from btrfs_alloc_data_chunk Nikolay Borisov
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Nikolay Borisov @ 2019-10-30 12:22 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Nikolay Borisov

sub_stripe variables is by default initialized to 0 and it's overriden
only in case we have RAID10 mode. This leads to the following (minor)
artifacts on a freshly created filesystem:

item 3 key (FIRST_CHUNK_TREE CHUNK_ITEM 30408704) itemoff 15863 itemsize 112
		length 1073741824 owner 2 stripe_len 65536 type METADATA|RAID1
		io_align 65536 io_width 65536 sector_size 4096
		num_stripes 2 sub_stripes 0
			stripe 0 devid 2 offset 9437184
			dev_uuid a020fc2f-b526-4800-9278-156f2f431fe9
			stripe 1 devid 1 offset 30408704
			dev_uuid 0f78aa72-4626-4057-a8f2-285f46b2c664

After balance resulting chunk item is:

item 3 key (FIRST_CHUNK_TREE CHUNK_ITEM 3251634176) itemoff 15863 itemsize 112
		length 268435456 owner 2 stripe_len 65536 type METADATA|RAID1
		io_align 65536 io_width 65536 sector_size 4096
		num_stripes 2 sub_stripes 1
			stripe 0 devid 2 offset 3230662656
			dev_uuid a020fc2f-b526-4800-9278-156f2f431fe9
			stripe 1 devid 1 offset 3251634176
			dev_uuid 0f78aa72-4626-4057-a8f2-285f46b2c664

Kernel code usually initializes it to 1, since it takes the value from
the raid description table which has it set to 1 for all but RAID10 types.
In userspace it has be statically initialized by 1 since we don't have
btrfs_bg_flags_to_raid_index. Eventually the kernel/userspace needs
to be merged but for now it wouldn't bring much value if this function
is copied.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---
 volumes.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/volumes.c b/volumes.c
index fbbc22b5b1b3..1d088d93e788 100644
--- a/volumes.c
+++ b/volumes.c
@@ -993,7 +993,7 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
 	int num_stripes = 1;
 	int max_stripes = 0;
 	int min_stripes = 1;
-	int sub_stripes = 0;
+	int sub_stripes = 1;
 	int looped = 0;
 	int ret;
 	int index;
@@ -1258,7 +1258,7 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
 	struct map_lookup *map;
 	u64 calc_size = SZ_8M;
 	int num_stripes = 1;
-	int sub_stripes = 0;
+	int sub_stripes = 1;
 	int ret;
 	int index;
 	int stripe_len = BTRFS_STRIPE_LEN;
-- 
2.7.4


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 2/3] btrfs-progs: Remove type argument from btrfs_alloc_data_chunk
  2019-10-30 12:22 [PATCH 0/3] Misc btrfs-progs fixes Nikolay Borisov
  2019-10-30 12:22 ` [PATCH 1/3] btrfs-progs: Initialize sub_stripes to 1 in btrfs_alloc_data_chunk Nikolay Borisov
@ 2019-10-30 12:22 ` Nikolay Borisov
  2019-10-30 12:42   ` Qu Wenruo
  2019-10-30 12:22 ` [PATCH 3/3] btrfs-progs: Remove convert param " Nikolay Borisov
  2019-11-15 12:22 ` [PATCH 0/3] Misc btrfs-progs fixes David Sterba
  3 siblings, 1 reply; 8+ messages in thread
From: Nikolay Borisov @ 2019-10-30 12:22 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Nikolay Borisov

It's always set to BTRFS_BLOCK_GROUP_DATA so sink it into the function.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---
 convert/main.c | 3 +--
 volumes.c      | 6 +++---
 volumes.h      | 2 +-
 3 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/convert/main.c b/convert/main.c
index bb689be9f3e4..9904deafba45 100644
--- a/convert/main.c
+++ b/convert/main.c
@@ -943,8 +943,7 @@ static int make_convert_data_block_groups(struct btrfs_trans_handle *trans,
 			len = min(max_chunk_size,
 				  cache->start + cache->size - cur);
 			ret = btrfs_alloc_data_chunk(trans, fs_info,
-					&cur_backup, len,
-					BTRFS_BLOCK_GROUP_DATA, 1);
+					&cur_backup, len, 1);
 			if (ret < 0)
 				break;
 			ret = btrfs_make_block_group(trans, fs_info, 0,
diff --git a/volumes.c b/volumes.c
index 1d088d93e788..87315a884b49 100644
--- a/volumes.c
+++ b/volumes.c
@@ -1245,7 +1245,7 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
  */
 int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
 			   struct btrfs_fs_info *info, u64 *start,
-			   u64 num_bytes, u64 type, int convert)
+			   u64 num_bytes, int convert)
 {
 	u64 dev_offset;
 	struct btrfs_root *extent_root = info->extent_root;
@@ -1328,7 +1328,7 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
 	btrfs_set_stack_chunk_length(chunk, num_bytes);
 	btrfs_set_stack_chunk_owner(chunk, extent_root->root_key.objectid);
 	btrfs_set_stack_chunk_stripe_len(chunk, stripe_len);
-	btrfs_set_stack_chunk_type(chunk, type);
+	btrfs_set_stack_chunk_type(chunk, BTRFS_BLOCK_GROUP_DATA);
 	btrfs_set_stack_chunk_num_stripes(chunk, num_stripes);
 	btrfs_set_stack_chunk_io_align(chunk, stripe_len);
 	btrfs_set_stack_chunk_io_width(chunk, stripe_len);
@@ -1338,7 +1338,7 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
 	map->stripe_len = stripe_len;
 	map->io_align = stripe_len;
 	map->io_width = stripe_len;
-	map->type = type;
+	map->type = BTRFS_BLOCK_GROUP_DATA;
 	map->num_stripes = num_stripes;
 	map->sub_stripes = sub_stripes;
 
diff --git a/volumes.h b/volumes.h
index 586588c871ab..83ba827e422b 100644
--- a/volumes.h
+++ b/volumes.h
@@ -272,7 +272,7 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
 		      u64 *num_bytes, u64 type);
 int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
 			   struct btrfs_fs_info *fs_info, u64 *start,
-			   u64 num_bytes, u64 type, int convert);
+			   u64 num_bytes, int convert);
 int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
 		       int flags);
 int btrfs_close_devices(struct btrfs_fs_devices *fs_devices);
-- 
2.7.4


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 3/3] btrfs-progs: Remove convert param from btrfs_alloc_data_chunk
  2019-10-30 12:22 [PATCH 0/3] Misc btrfs-progs fixes Nikolay Borisov
  2019-10-30 12:22 ` [PATCH 1/3] btrfs-progs: Initialize sub_stripes to 1 in btrfs_alloc_data_chunk Nikolay Borisov
  2019-10-30 12:22 ` [PATCH 2/3] btrfs-progs: Remove type argument from btrfs_alloc_data_chunk Nikolay Borisov
@ 2019-10-30 12:22 ` " Nikolay Borisov
  2019-10-30 12:45   ` Qu Wenruo
  2019-11-15 12:22 ` [PATCH 0/3] Misc btrfs-progs fixes David Sterba
  3 siblings, 1 reply; 8+ messages in thread
From: Nikolay Borisov @ 2019-10-30 12:22 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Nikolay Borisov

convert is always set to true so there's no point in having it as a
function parameter or using it as a predicate inside btrfs_alloc_data_chunk.
Remove it and all relevant code which would have never been executed.
No semantics changes.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---
 convert/main.c |  3 +--
 volumes.c      | 44 ++++++++++++++------------------------------
 volumes.h      |  3 +--
 3 files changed, 16 insertions(+), 34 deletions(-)

diff --git a/convert/main.c b/convert/main.c
index 9904deafba45..416ab5d264a3 100644
--- a/convert/main.c
+++ b/convert/main.c
@@ -942,8 +942,7 @@ static int make_convert_data_block_groups(struct btrfs_trans_handle *trans,
 
 			len = min(max_chunk_size,
 				  cache->start + cache->size - cur);
-			ret = btrfs_alloc_data_chunk(trans, fs_info,
-					&cur_backup, len, 1);
+			ret = btrfs_alloc_data_chunk(trans, fs_info, &cur_backup, len);
 			if (ret < 0)
 				break;
 			ret = btrfs_make_block_group(trans, fs_info, 0,
diff --git a/volumes.c b/volumes.c
index 87315a884b49..39e824a43736 100644
--- a/volumes.c
+++ b/volumes.c
@@ -1238,14 +1238,11 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
 /*
  * Alloc a DATA chunk with SINGLE profile.
  *
- * If 'convert' is set, it will alloc a chunk with 1:1 mapping
- * (btrfs logical bytenr == on-disk bytenr)
- * For that case, caller must make sure the chunk and dev_extent are not
- * occupied.
+ * It allocates a chunk with 1:1 mapping (btrfs logical bytenr == on-disk bytenr)
+ * Caller must make sure the chunk and dev_extent are not occupied.
  */
 int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
-			   struct btrfs_fs_info *info, u64 *start,
-			   u64 num_bytes, int convert)
+			   struct btrfs_fs_info *info, u64 *start, u64 num_bytes)
 {
 	u64 dev_offset;
 	struct btrfs_root *extent_root = info->extent_root;
@@ -1264,25 +1261,18 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
 	int stripe_len = BTRFS_STRIPE_LEN;
 	struct btrfs_key key;
 
-	key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
-	key.type = BTRFS_CHUNK_ITEM_KEY;
-	if (convert) {
-		if (*start != round_down(*start, info->sectorsize)) {
-			error("DATA chunk start not sectorsize aligned: %llu",
-					(unsigned long long)*start);
-			return -EINVAL;
-		}
-		key.offset = *start;
-		dev_offset = *start;
-	} else {
-		u64 tmp;
 
-		ret = find_next_chunk(info, &tmp);
-		key.offset = tmp;
-		if (ret)
-			return ret;
+	if (*start != round_down(*start, info->sectorsize)) {
+		error("DATA chunk start not sectorsize aligned: %llu",
+				(unsigned long long)*start);
+		return -EINVAL;
 	}
 
+	key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
+	key.type = BTRFS_CHUNK_ITEM_KEY;
+	key.offset = *start;
+	dev_offset = *start;
+
 	chunk = kmalloc(btrfs_chunk_item_size(num_stripes), GFP_NOFS);
 	if (!chunk)
 		return -ENOMEM;
@@ -1303,12 +1293,8 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
 	while (index < num_stripes) {
 		struct btrfs_stripe *stripe;
 
-		if (convert)
-			ret = btrfs_insert_dev_extent(trans, device, key.offset,
-					calc_size, dev_offset);
-		else
-			ret = btrfs_alloc_dev_extent(trans, device, key.offset,
-					calc_size, &dev_offset);
+		ret = btrfs_insert_dev_extent(trans, device, key.offset, calc_size,
+				dev_offset);
 		BUG_ON(ret);
 
 		device->bytes_used += calc_size;
@@ -1345,8 +1331,6 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
 	ret = btrfs_insert_item(trans, chunk_root, &key, chunk,
 				btrfs_chunk_item_size(num_stripes));
 	BUG_ON(ret);
-	if (!convert)
-		*start = key.offset;
 
 	map->ce.start = key.offset;
 	map->ce.size = num_bytes;
diff --git a/volumes.h b/volumes.h
index 83ba827e422b..f6f05054b5c4 100644
--- a/volumes.h
+++ b/volumes.h
@@ -271,8 +271,7 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
 		      struct btrfs_fs_info *fs_info, u64 *start,
 		      u64 *num_bytes, u64 type);
 int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
-			   struct btrfs_fs_info *fs_info, u64 *start,
-			   u64 num_bytes, int convert);
+			   struct btrfs_fs_info *fs_info, u64 *start, u64 num_bytes);
 int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
 		       int flags);
 int btrfs_close_devices(struct btrfs_fs_devices *fs_devices);
-- 
2.7.4


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] btrfs-progs: Initialize sub_stripes to 1 in btrfs_alloc_data_chunk
  2019-10-30 12:22 ` [PATCH 1/3] btrfs-progs: Initialize sub_stripes to 1 in btrfs_alloc_data_chunk Nikolay Borisov
@ 2019-10-30 12:42   ` Qu Wenruo
  0 siblings, 0 replies; 8+ messages in thread
From: Qu Wenruo @ 2019-10-30 12:42 UTC (permalink / raw)
  To: Nikolay Borisov, linux-btrfs



On 2019/10/30 下午8:22, Nikolay Borisov wrote:
> sub_stripe variables is by default initialized to 0 and it's overriden
> only in case we have RAID10 mode. This leads to the following (minor)
> artifacts on a freshly created filesystem:
>
> item 3 key (FIRST_CHUNK_TREE CHUNK_ITEM 30408704) itemoff 15863 itemsize 112
> 		length 1073741824 owner 2 stripe_len 65536 type METADATA|RAID1
> 		io_align 65536 io_width 65536 sector_size 4096
> 		num_stripes 2 sub_stripes 0
> 			stripe 0 devid 2 offset 9437184
> 			dev_uuid a020fc2f-b526-4800-9278-156f2f431fe9
> 			stripe 1 devid 1 offset 30408704
> 			dev_uuid 0f78aa72-4626-4057-a8f2-285f46b2c664
>
> After balance resulting chunk item is:
>
> item 3 key (FIRST_CHUNK_TREE CHUNK_ITEM 3251634176) itemoff 15863 itemsize 112
> 		length 268435456 owner 2 stripe_len 65536 type METADATA|RAID1
> 		io_align 65536 io_width 65536 sector_size 4096
> 		num_stripes 2 sub_stripes 1
> 			stripe 0 devid 2 offset 3230662656
> 			dev_uuid a020fc2f-b526-4800-9278-156f2f431fe9
> 			stripe 1 devid 1 offset 3251634176
> 			dev_uuid 0f78aa72-4626-4057-a8f2-285f46b2c664
>
> Kernel code usually initializes it to 1, since it takes the value from
> the raid description table which has it set to 1 for all but RAID10 types.
> In userspace it has be statically initialized by 1 since we don't have
> btrfs_bg_flags_to_raid_index. Eventually the kernel/userspace needs
> to be merged but for now it wouldn't bring much value if this function
> is copied.
>
> Signed-off-by: Nikolay Borisov <nborisov@suse.com>

Reviewed-by: Qu Wenruo <wqu@suse.com>

I guess the tree-checker skips this check except for RAID10 just to work
around this problem.

Thanks,
Qu
> ---
>  volumes.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/volumes.c b/volumes.c
> index fbbc22b5b1b3..1d088d93e788 100644
> --- a/volumes.c
> +++ b/volumes.c
> @@ -993,7 +993,7 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
>  	int num_stripes = 1;
>  	int max_stripes = 0;
>  	int min_stripes = 1;
> -	int sub_stripes = 0;
> +	int sub_stripes = 1;
>  	int looped = 0;
>  	int ret;
>  	int index;
> @@ -1258,7 +1258,7 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
>  	struct map_lookup *map;
>  	u64 calc_size = SZ_8M;
>  	int num_stripes = 1;
> -	int sub_stripes = 0;
> +	int sub_stripes = 1;
>  	int ret;
>  	int index;
>  	int stripe_len = BTRFS_STRIPE_LEN;
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/3] btrfs-progs: Remove type argument from btrfs_alloc_data_chunk
  2019-10-30 12:22 ` [PATCH 2/3] btrfs-progs: Remove type argument from btrfs_alloc_data_chunk Nikolay Borisov
@ 2019-10-30 12:42   ` Qu Wenruo
  0 siblings, 0 replies; 8+ messages in thread
From: Qu Wenruo @ 2019-10-30 12:42 UTC (permalink / raw)
  To: Nikolay Borisov, linux-btrfs



On 2019/10/30 下午8:22, Nikolay Borisov wrote:
> It's always set to BTRFS_BLOCK_GROUP_DATA so sink it into the function.
>
> Signed-off-by: Nikolay Borisov <nborisov@suse.com>

Reviewed-by: Qu Wenruo <wqu@suse.com>

Thanks,
Qu

> ---
>  convert/main.c | 3 +--
>  volumes.c      | 6 +++---
>  volumes.h      | 2 +-
>  3 files changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/convert/main.c b/convert/main.c
> index bb689be9f3e4..9904deafba45 100644
> --- a/convert/main.c
> +++ b/convert/main.c
> @@ -943,8 +943,7 @@ static int make_convert_data_block_groups(struct btrfs_trans_handle *trans,
>  			len = min(max_chunk_size,
>  				  cache->start + cache->size - cur);
>  			ret = btrfs_alloc_data_chunk(trans, fs_info,
> -					&cur_backup, len,
> -					BTRFS_BLOCK_GROUP_DATA, 1);
> +					&cur_backup, len, 1);
>  			if (ret < 0)
>  				break;
>  			ret = btrfs_make_block_group(trans, fs_info, 0,
> diff --git a/volumes.c b/volumes.c
> index 1d088d93e788..87315a884b49 100644
> --- a/volumes.c
> +++ b/volumes.c
> @@ -1245,7 +1245,7 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
>   */
>  int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
>  			   struct btrfs_fs_info *info, u64 *start,
> -			   u64 num_bytes, u64 type, int convert)
> +			   u64 num_bytes, int convert)
>  {
>  	u64 dev_offset;
>  	struct btrfs_root *extent_root = info->extent_root;
> @@ -1328,7 +1328,7 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
>  	btrfs_set_stack_chunk_length(chunk, num_bytes);
>  	btrfs_set_stack_chunk_owner(chunk, extent_root->root_key.objectid);
>  	btrfs_set_stack_chunk_stripe_len(chunk, stripe_len);
> -	btrfs_set_stack_chunk_type(chunk, type);
> +	btrfs_set_stack_chunk_type(chunk, BTRFS_BLOCK_GROUP_DATA);
>  	btrfs_set_stack_chunk_num_stripes(chunk, num_stripes);
>  	btrfs_set_stack_chunk_io_align(chunk, stripe_len);
>  	btrfs_set_stack_chunk_io_width(chunk, stripe_len);
> @@ -1338,7 +1338,7 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
>  	map->stripe_len = stripe_len;
>  	map->io_align = stripe_len;
>  	map->io_width = stripe_len;
> -	map->type = type;
> +	map->type = BTRFS_BLOCK_GROUP_DATA;
>  	map->num_stripes = num_stripes;
>  	map->sub_stripes = sub_stripes;
>
> diff --git a/volumes.h b/volumes.h
> index 586588c871ab..83ba827e422b 100644
> --- a/volumes.h
> +++ b/volumes.h
> @@ -272,7 +272,7 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
>  		      u64 *num_bytes, u64 type);
>  int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
>  			   struct btrfs_fs_info *fs_info, u64 *start,
> -			   u64 num_bytes, u64 type, int convert);
> +			   u64 num_bytes, int convert);
>  int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
>  		       int flags);
>  int btrfs_close_devices(struct btrfs_fs_devices *fs_devices);
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 3/3] btrfs-progs: Remove convert param from btrfs_alloc_data_chunk
  2019-10-30 12:22 ` [PATCH 3/3] btrfs-progs: Remove convert param " Nikolay Borisov
@ 2019-10-30 12:45   ` Qu Wenruo
  0 siblings, 0 replies; 8+ messages in thread
From: Qu Wenruo @ 2019-10-30 12:45 UTC (permalink / raw)
  To: Nikolay Borisov, linux-btrfs



On 2019/10/30 下午8:22, Nikolay Borisov wrote:
> convert is always set to true so there's no point in having it as a
> function parameter or using it as a predicate inside btrfs_alloc_data_chunk.
> Remove it and all relevant code which would have never been executed.
> No semantics changes.
>
> Signed-off-by: Nikolay Borisov <nborisov@suse.com>

Reviewed-by: Qu Wenruo <wqu@suse.com>

Just one tip for further patches.

The function btrfs_alloc_data_chunk() is purely used for convert to
create a 1:1 mapped data chunk.

It would be be even better to rename the function to indicate it better.

Thanks,
Qu

> ---
>  convert/main.c |  3 +--
>  volumes.c      | 44 ++++++++++++++------------------------------
>  volumes.h      |  3 +--
>  3 files changed, 16 insertions(+), 34 deletions(-)
>
> diff --git a/convert/main.c b/convert/main.c
> index 9904deafba45..416ab5d264a3 100644
> --- a/convert/main.c
> +++ b/convert/main.c
> @@ -942,8 +942,7 @@ static int make_convert_data_block_groups(struct btrfs_trans_handle *trans,
>
>  			len = min(max_chunk_size,
>  				  cache->start + cache->size - cur);
> -			ret = btrfs_alloc_data_chunk(trans, fs_info,
> -					&cur_backup, len, 1);
> +			ret = btrfs_alloc_data_chunk(trans, fs_info, &cur_backup, len);
>  			if (ret < 0)
>  				break;
>  			ret = btrfs_make_block_group(trans, fs_info, 0,
> diff --git a/volumes.c b/volumes.c
> index 87315a884b49..39e824a43736 100644
> --- a/volumes.c
> +++ b/volumes.c
> @@ -1238,14 +1238,11 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
>  /*
>   * Alloc a DATA chunk with SINGLE profile.
>   *
> - * If 'convert' is set, it will alloc a chunk with 1:1 mapping
> - * (btrfs logical bytenr == on-disk bytenr)
> - * For that case, caller must make sure the chunk and dev_extent are not
> - * occupied.
> + * It allocates a chunk with 1:1 mapping (btrfs logical bytenr == on-disk bytenr)
> + * Caller must make sure the chunk and dev_extent are not occupied.
>   */
>  int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
> -			   struct btrfs_fs_info *info, u64 *start,
> -			   u64 num_bytes, int convert)
> +			   struct btrfs_fs_info *info, u64 *start, u64 num_bytes)
>  {
>  	u64 dev_offset;
>  	struct btrfs_root *extent_root = info->extent_root;
> @@ -1264,25 +1261,18 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
>  	int stripe_len = BTRFS_STRIPE_LEN;
>  	struct btrfs_key key;
>
> -	key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
> -	key.type = BTRFS_CHUNK_ITEM_KEY;
> -	if (convert) {
> -		if (*start != round_down(*start, info->sectorsize)) {
> -			error("DATA chunk start not sectorsize aligned: %llu",
> -					(unsigned long long)*start);
> -			return -EINVAL;
> -		}
> -		key.offset = *start;
> -		dev_offset = *start;
> -	} else {
> -		u64 tmp;
>
> -		ret = find_next_chunk(info, &tmp);
> -		key.offset = tmp;
> -		if (ret)
> -			return ret;
> +	if (*start != round_down(*start, info->sectorsize)) {
> +		error("DATA chunk start not sectorsize aligned: %llu",
> +				(unsigned long long)*start);
> +		return -EINVAL;
>  	}
>
> +	key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
> +	key.type = BTRFS_CHUNK_ITEM_KEY;
> +	key.offset = *start;
> +	dev_offset = *start;
> +
>  	chunk = kmalloc(btrfs_chunk_item_size(num_stripes), GFP_NOFS);
>  	if (!chunk)
>  		return -ENOMEM;
> @@ -1303,12 +1293,8 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
>  	while (index < num_stripes) {
>  		struct btrfs_stripe *stripe;
>
> -		if (convert)
> -			ret = btrfs_insert_dev_extent(trans, device, key.offset,
> -					calc_size, dev_offset);
> -		else
> -			ret = btrfs_alloc_dev_extent(trans, device, key.offset,
> -					calc_size, &dev_offset);
> +		ret = btrfs_insert_dev_extent(trans, device, key.offset, calc_size,
> +				dev_offset);
>  		BUG_ON(ret);
>
>  		device->bytes_used += calc_size;
> @@ -1345,8 +1331,6 @@ int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
>  	ret = btrfs_insert_item(trans, chunk_root, &key, chunk,
>  				btrfs_chunk_item_size(num_stripes));
>  	BUG_ON(ret);
> -	if (!convert)
> -		*start = key.offset;
>
>  	map->ce.start = key.offset;
>  	map->ce.size = num_bytes;
> diff --git a/volumes.h b/volumes.h
> index 83ba827e422b..f6f05054b5c4 100644
> --- a/volumes.h
> +++ b/volumes.h
> @@ -271,8 +271,7 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
>  		      struct btrfs_fs_info *fs_info, u64 *start,
>  		      u64 *num_bytes, u64 type);
>  int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
> -			   struct btrfs_fs_info *fs_info, u64 *start,
> -			   u64 num_bytes, int convert);
> +			   struct btrfs_fs_info *fs_info, u64 *start, u64 num_bytes);
>  int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
>  		       int flags);
>  int btrfs_close_devices(struct btrfs_fs_devices *fs_devices);
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/3] Misc btrfs-progs fixes
  2019-10-30 12:22 [PATCH 0/3] Misc btrfs-progs fixes Nikolay Borisov
                   ` (2 preceding siblings ...)
  2019-10-30 12:22 ` [PATCH 3/3] btrfs-progs: Remove convert param " Nikolay Borisov
@ 2019-11-15 12:22 ` David Sterba
  3 siblings, 0 replies; 8+ messages in thread
From: David Sterba @ 2019-11-15 12:22 UTC (permalink / raw)
  To: Nikolay Borisov; +Cc: linux-btrfs

On Wed, Oct 30, 2019 at 02:22:24PM +0200, Nikolay Borisov wrote:
> Here are 2 cleanups and 1 minor fix for mkfs. The gist of the fix is to ensure 
> sub_stripes is always set to 1 when mkfs creates blockgroups with alloc profile 
> different than RAID10. This what kernels does. 
> 
> The other 2 patches are simple cleanups which reduce the number of arguments 
> of btrfs_alloc_data_chunk. 
> 
> Nikolay Borisov (3):
>   btrfs-progs: Initialize sub_stripes to 1 in btrfs_alloc_data_chunk
>   btrfs-progs: Remove type argument from btrfs_alloc_data_chunk
>   btrfs-progs: Remove convert param from btrfs_alloc_data_chunk

Added to devel, thanks.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, back to index

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-30 12:22 [PATCH 0/3] Misc btrfs-progs fixes Nikolay Borisov
2019-10-30 12:22 ` [PATCH 1/3] btrfs-progs: Initialize sub_stripes to 1 in btrfs_alloc_data_chunk Nikolay Borisov
2019-10-30 12:42   ` Qu Wenruo
2019-10-30 12:22 ` [PATCH 2/3] btrfs-progs: Remove type argument from btrfs_alloc_data_chunk Nikolay Borisov
2019-10-30 12:42   ` Qu Wenruo
2019-10-30 12:22 ` [PATCH 3/3] btrfs-progs: Remove convert param " Nikolay Borisov
2019-10-30 12:45   ` Qu Wenruo
2019-11-15 12:22 ` [PATCH 0/3] Misc btrfs-progs fixes David Sterba

Linux-BTRFS Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-btrfs/0 linux-btrfs/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-btrfs linux-btrfs/ https://lore.kernel.org/linux-btrfs \
		linux-btrfs@vger.kernel.org
	public-inbox-index linux-btrfs

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-btrfs


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git