All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] Minor cleanups
@ 2022-10-31 19:33 David Sterba
  2022-10-31 19:33 ` [PATCH 1/4] btrfs: zlib: use copy_page for full page copy David Sterba
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: David Sterba @ 2022-10-31 19:33 UTC (permalink / raw)
  To: linux-btrfs; +Cc: David Sterba

A few random cleanups or fixups.

David Sterba (4):
  btrfs: zlib: use copy_page for full page copy
  btrfs: zoned: use helper to check a power of two zone size
  btrfs: convert btrfs_block_group::needs_free_space to runtime flag
  btrfs: convert btrfs_block_group::seq_zone to runtime flag

 fs/btrfs/block-group.c                 |  2 +-
 fs/btrfs/block-group.h                 | 13 ++++---------
 fs/btrfs/free-space-tree.c             | 10 +++++-----
 fs/btrfs/tests/free-space-tree-tests.c |  2 +-
 fs/btrfs/zlib.c                        |  4 ++--
 fs/btrfs/zoned.c                       | 10 +++++-----
 6 files changed, 18 insertions(+), 23 deletions(-)

-- 
2.37.3


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

* [PATCH 1/4] btrfs: zlib: use copy_page for full page copy
  2022-10-31 19:33 [PATCH 0/4] Minor cleanups David Sterba
@ 2022-10-31 19:33 ` David Sterba
  2022-10-31 23:49   ` Anand Jain
  2022-10-31 19:33 ` [PATCH 2/4] btrfs: zoned: use helper to check a power of two zone size David Sterba
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: David Sterba @ 2022-10-31 19:33 UTC (permalink / raw)
  To: linux-btrfs; +Cc: David Sterba

The copy_page helper may use an optimized version for full page copy
(eg. on s390 there's a special instruction for that), there's one more
left to convert.

Signed-off-by: David Sterba <dsterba@suse.com>
---
 fs/btrfs/zlib.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/btrfs/zlib.c b/fs/btrfs/zlib.c
index b4f44662cda7..c5275cb23837 100644
--- a/fs/btrfs/zlib.c
+++ b/fs/btrfs/zlib.c
@@ -155,8 +155,8 @@ int zlib_compress_pages(struct list_head *ws, struct address_space *mapping,
 					in_page = find_get_page(mapping,
 								start >> PAGE_SHIFT);
 					data_in = kmap_local_page(in_page);
-					memcpy(workspace->buf + i * PAGE_SIZE,
-					       data_in, PAGE_SIZE);
+					copy_page(workspace->buf + i * PAGE_SIZE,
+						  data_in);
 					start += PAGE_SIZE;
 				}
 				workspace->strm.next_in = workspace->buf;
-- 
2.37.3


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

* [PATCH 2/4] btrfs: zoned: use helper to check a power of two zone size
  2022-10-31 19:33 [PATCH 0/4] Minor cleanups David Sterba
  2022-10-31 19:33 ` [PATCH 1/4] btrfs: zlib: use copy_page for full page copy David Sterba
@ 2022-10-31 19:33 ` David Sterba
  2022-10-31 23:49   ` Anand Jain
  2022-10-31 19:33 ` [PATCH 3/4] btrfs: convert btrfs_block_group::needs_free_space to runtime flag David Sterba
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: David Sterba @ 2022-10-31 19:33 UTC (permalink / raw)
  To: linux-btrfs; +Cc: David Sterba

We have a 64bit compatible helper to check if a value is a power of two,
use it instead of open coding it.

Signed-off-by: David Sterba <dsterba@suse.com>
---
 fs/btrfs/zoned.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c
index 9d12a23e1a59..32a5aac1cccb 100644
--- a/fs/btrfs/zoned.c
+++ b/fs/btrfs/zoned.c
@@ -393,8 +393,7 @@ int btrfs_get_dev_zone_info(struct btrfs_device *device, bool populate_cache)
 		zone_sectors = bdev_zone_sectors(bdev);
 	}
 
-	/* Check if it's power of 2 (see is_power_of_2) */
-	ASSERT(zone_sectors != 0 && (zone_sectors & (zone_sectors - 1)) == 0);
+	ASSERT(is_power_of_two_u64(zone_sectors));
 	zone_info->zone_size = zone_sectors << SECTOR_SHIFT;
 
 	/* We reject devices with a zone size larger than 8GB */
-- 
2.37.3


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

* [PATCH 3/4] btrfs: convert btrfs_block_group::needs_free_space to runtime flag
  2022-10-31 19:33 [PATCH 0/4] Minor cleanups David Sterba
  2022-10-31 19:33 ` [PATCH 1/4] btrfs: zlib: use copy_page for full page copy David Sterba
  2022-10-31 19:33 ` [PATCH 2/4] btrfs: zoned: use helper to check a power of two zone size David Sterba
@ 2022-10-31 19:33 ` David Sterba
  2022-10-31 23:50   ` Anand Jain
  2022-10-31 19:33 ` [PATCH 4/4] btrfs: convert btrfs_block_group::seq_zone " David Sterba
  2022-11-03 13:16 ` [PATCH 0/4] Minor cleanups David Sterba
  4 siblings, 1 reply; 10+ messages in thread
From: David Sterba @ 2022-10-31 19:33 UTC (permalink / raw)
  To: linux-btrfs; +Cc: David Sterba

We already have flags in block group to track various status bits,
convert needs_free_space as well and reduce size of btrfs_block_group.

Signed-off-by: David Sterba <dsterba@suse.com>
---
 fs/btrfs/block-group.c                 |  2 +-
 fs/btrfs/block-group.h                 |  8 ++------
 fs/btrfs/free-space-tree.c             | 10 +++++-----
 fs/btrfs/tests/free-space-tree-tests.c |  2 +-
 4 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c
index ea5fcb665daa..708d843daa72 100644
--- a/fs/btrfs/block-group.c
+++ b/fs/btrfs/block-group.c
@@ -2553,7 +2553,7 @@ struct btrfs_block_group *btrfs_make_block_group(struct btrfs_trans_handle *tran
 	cache->global_root_id = calculate_global_root_id(fs_info, cache->start);
 
 	if (btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE))
-		cache->needs_free_space = 1;
+		set_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &cache->runtime_flags);
 
 	ret = btrfs_load_block_group_zone_info(cache, true);
 	if (ret) {
diff --git a/fs/btrfs/block-group.h b/fs/btrfs/block-group.h
index 6c970a486b68..4cee23c11938 100644
--- a/fs/btrfs/block-group.h
+++ b/fs/btrfs/block-group.h
@@ -55,6 +55,8 @@ enum btrfs_block_group_flags {
 	BLOCK_GROUP_FLAG_CHUNK_ITEM_INSERTED,
 	BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE,
 	BLOCK_GROUP_FLAG_ZONED_DATA_RELOC,
+	/* Does the block group need to be added to the free space tree? */
+	BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE,
 };
 
 enum btrfs_caching_type {
@@ -208,12 +210,6 @@ struct btrfs_block_group {
 	/* Lock for free space tree operations. */
 	struct mutex free_space_lock;
 
-	/*
-	 * Does the block group need to be added to the free space tree?
-	 * Protected by free_space_lock.
-	 */
-	int needs_free_space;
-
 	/* Flag indicating this block group is placed on a sequential zone */
 	bool seq_zone;
 
diff --git a/fs/btrfs/free-space-tree.c b/fs/btrfs/free-space-tree.c
index 869d062d6765..c667e878ef1a 100644
--- a/fs/btrfs/free-space-tree.c
+++ b/fs/btrfs/free-space-tree.c
@@ -808,7 +808,7 @@ int __remove_from_free_space_tree(struct btrfs_trans_handle *trans,
 	u32 flags;
 	int ret;
 
-	if (block_group->needs_free_space) {
+	if (test_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &block_group->runtime_flags)) {
 		ret = __add_block_group_free_space(trans, block_group, path);
 		if (ret)
 			return ret;
@@ -1001,7 +1001,7 @@ int __add_to_free_space_tree(struct btrfs_trans_handle *trans,
 	u32 flags;
 	int ret;
 
-	if (block_group->needs_free_space) {
+	if (test_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &block_group->runtime_flags)) {
 		ret = __add_block_group_free_space(trans, block_group, path);
 		if (ret)
 			return ret;
@@ -1304,7 +1304,7 @@ static int __add_block_group_free_space(struct btrfs_trans_handle *trans,
 {
 	int ret;
 
-	block_group->needs_free_space = 0;
+	clear_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &block_group->runtime_flags);
 
 	ret = add_new_free_space_info(trans, block_group, path);
 	if (ret)
@@ -1326,7 +1326,7 @@ int add_block_group_free_space(struct btrfs_trans_handle *trans,
 		return 0;
 
 	mutex_lock(&block_group->free_space_lock);
-	if (!block_group->needs_free_space)
+	if (!test_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &block_group->runtime_flags))
 		goto out;
 
 	path = btrfs_alloc_path();
@@ -1359,7 +1359,7 @@ int remove_block_group_free_space(struct btrfs_trans_handle *trans,
 	if (!btrfs_fs_compat_ro(trans->fs_info, FREE_SPACE_TREE))
 		return 0;
 
-	if (block_group->needs_free_space) {
+	if (test_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &block_group->runtime_flags)) {
 		/* We never added this block group to the free space tree. */
 		return 0;
 	}
diff --git a/fs/btrfs/tests/free-space-tree-tests.c b/fs/btrfs/tests/free-space-tree-tests.c
index 53a17b1d1744..b61972046feb 100644
--- a/fs/btrfs/tests/free-space-tree-tests.c
+++ b/fs/btrfs/tests/free-space-tree-tests.c
@@ -471,7 +471,7 @@ static int run_test(test_func_t test_func, int bitmaps, u32 sectorsize,
 	}
 	cache->bitmap_low_thresh = 0;
 	cache->bitmap_high_thresh = (u32)-1;
-	cache->needs_free_space = 1;
+	set_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &cache->runtime_flags);
 	cache->fs_info = root->fs_info;
 
 	btrfs_init_dummy_trans(&trans, root->fs_info);
-- 
2.37.3


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

* [PATCH 4/4] btrfs: convert btrfs_block_group::seq_zone to runtime flag
  2022-10-31 19:33 [PATCH 0/4] Minor cleanups David Sterba
                   ` (2 preceding siblings ...)
  2022-10-31 19:33 ` [PATCH 3/4] btrfs: convert btrfs_block_group::needs_free_space to runtime flag David Sterba
@ 2022-10-31 19:33 ` David Sterba
  2022-10-31 23:50   ` Anand Jain
  2022-11-03 13:16 ` [PATCH 0/4] Minor cleanups David Sterba
  4 siblings, 1 reply; 10+ messages in thread
From: David Sterba @ 2022-10-31 19:33 UTC (permalink / raw)
  To: linux-btrfs; +Cc: David Sterba

In zoned mode the sequential status of zone can be also tracked in the
runtime flags of block group.

Signed-off-by: David Sterba <dsterba@suse.com>
---
 fs/btrfs/block-group.h | 5 ++---
 fs/btrfs/zoned.c       | 7 ++++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/btrfs/block-group.h b/fs/btrfs/block-group.h
index 4cee23c11938..a02ea76fd6cf 100644
--- a/fs/btrfs/block-group.h
+++ b/fs/btrfs/block-group.h
@@ -57,6 +57,8 @@ enum btrfs_block_group_flags {
 	BLOCK_GROUP_FLAG_ZONED_DATA_RELOC,
 	/* Does the block group need to be added to the free space tree? */
 	BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE,
+	/* Indicate that the block group is placed on a sequential zone */
+	BLOCK_GROUP_FLAG_SEQUENTIAL_ZONE,
 };
 
 enum btrfs_caching_type {
@@ -210,9 +212,6 @@ struct btrfs_block_group {
 	/* Lock for free space tree operations. */
 	struct mutex free_space_lock;
 
-	/* Flag indicating this block group is placed on a sequential zone */
-	bool seq_zone;
-
 	/*
 	 * Number of extents in this block group used for swap files.
 	 * All accesses protected by the spinlock 'lock'.
diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c
index 32a5aac1cccb..f805e44b11f8 100644
--- a/fs/btrfs/zoned.c
+++ b/fs/btrfs/zoned.c
@@ -1396,7 +1396,7 @@ int btrfs_load_block_group_zone_info(struct btrfs_block_group *cache, bool new)
 	}
 
 	if (num_sequential > 0)
-		cache->seq_zone = true;
+		set_bit(BLOCK_GROUP_FLAG_SEQUENTIAL_ZONE, &cache->runtime_flags);
 
 	if (num_conventional > 0) {
 		/* Zone capacity is always zone size in emulation */
@@ -1608,7 +1608,7 @@ bool btrfs_use_zone_append(struct btrfs_inode *inode, u64 start)
 	if (!cache)
 		return false;
 
-	ret = cache->seq_zone;
+	ret = !!test_bit(BLOCK_GROUP_FLAG_SEQUENTIAL_ZONE, &cache->runtime_flags);
 	btrfs_put_block_group(cache);
 
 	return ret;
@@ -2113,7 +2113,8 @@ static void btrfs_zone_finish_endio_workfn(struct work_struct *work)
 void btrfs_schedule_zone_finish_bg(struct btrfs_block_group *bg,
 				   struct extent_buffer *eb)
 {
-	if (!bg->seq_zone || eb->start + eb->len * 2 <= bg->start + bg->zone_capacity)
+	if (!test_bit(BLOCK_GROUP_FLAG_SEQUENTIAL_ZONE, &bg->runtime_flags) ||
+	    eb->start + eb->len * 2 <= bg->start + bg->zone_capacity)
 		return;
 
 	if (WARN_ON(bg->zone_finish_work.func == btrfs_zone_finish_endio_workfn)) {
-- 
2.37.3


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

* Re: [PATCH 1/4] btrfs: zlib: use copy_page for full page copy
  2022-10-31 19:33 ` [PATCH 1/4] btrfs: zlib: use copy_page for full page copy David Sterba
@ 2022-10-31 23:49   ` Anand Jain
  0 siblings, 0 replies; 10+ messages in thread
From: Anand Jain @ 2022-10-31 23:49 UTC (permalink / raw)
  To: David Sterba, linux-btrfs

On 01/11/2022 03:33, David Sterba wrote:
> The copy_page helper may use an optimized version for full page copy
> (eg. on s390 there's a special instruction for that), there's one more
> left to convert.
> 
> Signed-off-by: David Sterba <dsterba@suse.com>

Reviewed-by: Anand Jain <anand.jain@oracle.com>


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

* Re: [PATCH 2/4] btrfs: zoned: use helper to check a power of two zone size
  2022-10-31 19:33 ` [PATCH 2/4] btrfs: zoned: use helper to check a power of two zone size David Sterba
@ 2022-10-31 23:49   ` Anand Jain
  0 siblings, 0 replies; 10+ messages in thread
From: Anand Jain @ 2022-10-31 23:49 UTC (permalink / raw)
  To: David Sterba, linux-btrfs

On 01/11/2022 03:33, David Sterba wrote:
> We have a 64bit compatible helper to check if a value is a power of two,
> use it instead of open coding it.
> 
> Signed-off-by: David Sterba <dsterba@suse.com>

Reviewed-by: Anand Jain <anand.jain@oracle.com>


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

* Re: [PATCH 3/4] btrfs: convert btrfs_block_group::needs_free_space to runtime flag
  2022-10-31 19:33 ` [PATCH 3/4] btrfs: convert btrfs_block_group::needs_free_space to runtime flag David Sterba
@ 2022-10-31 23:50   ` Anand Jain
  0 siblings, 0 replies; 10+ messages in thread
From: Anand Jain @ 2022-10-31 23:50 UTC (permalink / raw)
  To: David Sterba, linux-btrfs

On 01/11/2022 03:33, David Sterba wrote:
> We already have flags in block group to track various status bits,
> convert needs_free_space as well and reduce size of btrfs_block_group.
> 
> Signed-off-by: David Sterba <dsterba@suse.com>

Reviewed-by: Anand Jain <anand.jain@oracle.com>




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

* Re: [PATCH 4/4] btrfs: convert btrfs_block_group::seq_zone to runtime flag
  2022-10-31 19:33 ` [PATCH 4/4] btrfs: convert btrfs_block_group::seq_zone " David Sterba
@ 2022-10-31 23:50   ` Anand Jain
  0 siblings, 0 replies; 10+ messages in thread
From: Anand Jain @ 2022-10-31 23:50 UTC (permalink / raw)
  To: David Sterba, linux-btrfs

On 01/11/2022 03:33, David Sterba wrote:
> In zoned mode the sequential status of zone can be also tracked in the
> runtime flags of block group.
> 
> Signed-off-by: David Sterba <dsterba@suse.com>

Reviewed-by: Anand Jain <anand.jain@oracle.com>




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

* Re: [PATCH 0/4] Minor cleanups
  2022-10-31 19:33 [PATCH 0/4] Minor cleanups David Sterba
                   ` (3 preceding siblings ...)
  2022-10-31 19:33 ` [PATCH 4/4] btrfs: convert btrfs_block_group::seq_zone " David Sterba
@ 2022-11-03 13:16 ` David Sterba
  4 siblings, 0 replies; 10+ messages in thread
From: David Sterba @ 2022-11-03 13:16 UTC (permalink / raw)
  To: David Sterba; +Cc: linux-btrfs

On Mon, Oct 31, 2022 at 08:33:37PM +0100, David Sterba wrote:
> A few random cleanups or fixups.
> 
> David Sterba (4):
>   btrfs: zlib: use copy_page for full page copy
>   btrfs: zoned: use helper to check a power of two zone size
>   btrfs: convert btrfs_block_group::needs_free_space to runtime flag
>   btrfs: convert btrfs_block_group::seq_zone to runtime flag

Added to msic-next.

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

end of thread, other threads:[~2022-11-03 13:16 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-10-31 19:33 [PATCH 0/4] Minor cleanups David Sterba
2022-10-31 19:33 ` [PATCH 1/4] btrfs: zlib: use copy_page for full page copy David Sterba
2022-10-31 23:49   ` Anand Jain
2022-10-31 19:33 ` [PATCH 2/4] btrfs: zoned: use helper to check a power of two zone size David Sterba
2022-10-31 23:49   ` Anand Jain
2022-10-31 19:33 ` [PATCH 3/4] btrfs: convert btrfs_block_group::needs_free_space to runtime flag David Sterba
2022-10-31 23:50   ` Anand Jain
2022-10-31 19:33 ` [PATCH 4/4] btrfs: convert btrfs_block_group::seq_zone " David Sterba
2022-10-31 23:50   ` Anand Jain
2022-11-03 13:16 ` [PATCH 0/4] Minor cleanups David Sterba

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.