diff mbox series

[v2] btrfs: export bitmap_test_range_all_{set,zero}

Message ID 327d53937163049c1b80a34bda2edb570b42aa78.1682435691.git.naohiro.aota@wdc.com (mailing list archive)
State New, archived
Headers show
Series [v2] btrfs: export bitmap_test_range_all_{set,zero} | expand

Commit Message

Naohiro Aota April 25, 2023, 3:19 p.m. UTC
bitmap_test_range_all_{set,zero} defined in subpage.c are useful for other
components. Move them to misc.h and use them in zoned.c. Also, as
find_next{,_zero}_bit take/return "unsigned long" instead of "unsigned
int", convert the type to "unsigned long".

While at it, also rewrite the "if (...) return true; else return false;"
pattern.

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 fs/btrfs/misc.h    | 20 ++++++++++++++++++++
 fs/btrfs/subpage.c | 22 ----------------------
 fs/btrfs/zoned.c   | 12 ++++++------
 3 files changed, 26 insertions(+), 28 deletions(-)

- v2
  - Reformat the code
  - Rewrite the return condition
  - Fix conversion in btrfs_find_allocatable_zones()

Comments

David Sterba April 28, 2023, 3:18 p.m. UTC | #1
On Wed, Apr 26, 2023 at 12:19:40AM +0900, Naohiro Aota wrote:
> bitmap_test_range_all_{set,zero} defined in subpage.c are useful for other
> components. Move them to misc.h and use them in zoned.c. Also, as
> find_next{,_zero}_bit take/return "unsigned long" instead of "unsigned
> int", convert the type to "unsigned long".
> 
> While at it, also rewrite the "if (...) return true; else return false;"
> pattern.
> 
> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>

Added to misc-next, thanks.

> ---
>  fs/btrfs/misc.h    | 20 ++++++++++++++++++++
>  fs/btrfs/subpage.c | 22 ----------------------
>  fs/btrfs/zoned.c   | 12 ++++++------
>  3 files changed, 26 insertions(+), 28 deletions(-)
> 
> - v2
>   - Reformat the code
>   - Rewrite the return condition
>   - Fix conversion in btrfs_find_allocatable_zones()
> 
> diff --git a/fs/btrfs/misc.h b/fs/btrfs/misc.h
> index 768583a440e1..c83366638fbd 100644
> --- a/fs/btrfs/misc.h
> +++ b/fs/btrfs/misc.h
> @@ -143,4 +143,24 @@ static inline struct rb_node *rb_simple_insert(struct rb_root *root, u64 bytenr,
>  	return NULL;
>  }
>  
> +static inline bool bitmap_test_range_all_set(unsigned long *addr,
> +					     unsigned long start,
> +					     unsigned long nbits)
> +{
> +	unsigned long found_zero;
> +
> +	found_zero = find_next_zero_bit(addr, start + nbits, start);
> +	return (found_zero == start + nbits);

Simplifying the condition like that is OK.
diff mbox series

Patch

diff --git a/fs/btrfs/misc.h b/fs/btrfs/misc.h
index 768583a440e1..c83366638fbd 100644
--- a/fs/btrfs/misc.h
+++ b/fs/btrfs/misc.h
@@ -143,4 +143,24 @@  static inline struct rb_node *rb_simple_insert(struct rb_root *root, u64 bytenr,
 	return NULL;
 }
 
+static inline bool bitmap_test_range_all_set(unsigned long *addr,
+					     unsigned long start,
+					     unsigned long nbits)
+{
+	unsigned long found_zero;
+
+	found_zero = find_next_zero_bit(addr, start + nbits, start);
+	return (found_zero == start + nbits);
+}
+
+static inline bool bitmap_test_range_all_zero(unsigned long *addr,
+					      unsigned long start,
+					      unsigned long nbits)
+{
+	unsigned long found_set;
+
+	found_set = find_next_bit(addr, start + nbits, start);
+	return (found_set == start + nbits);
+}
+
 #endif
diff --git a/fs/btrfs/subpage.c b/fs/btrfs/subpage.c
index dd46b978ac2c..045117ca0ddc 100644
--- a/fs/btrfs/subpage.c
+++ b/fs/btrfs/subpage.c
@@ -367,28 +367,6 @@  void btrfs_page_end_writer_lock(const struct btrfs_fs_info *fs_info,
 		unlock_page(page);
 }
 
-static bool bitmap_test_range_all_set(unsigned long *addr, unsigned int start,
-				      unsigned int nbits)
-{
-	unsigned int found_zero;
-
-	found_zero = find_next_zero_bit(addr, start + nbits, start);
-	if (found_zero == start + nbits)
-		return true;
-	return false;
-}
-
-static bool bitmap_test_range_all_zero(unsigned long *addr, unsigned int start,
-				       unsigned int nbits)
-{
-	unsigned int found_set;
-
-	found_set = find_next_bit(addr, start + nbits, start);
-	if (found_set == start + nbits)
-		return true;
-	return false;
-}
-
 #define subpage_calc_start_bit(fs_info, page, name, start, len)		\
 ({									\
 	unsigned int start_bit;						\
diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c
index 55bde1336d81..b7050a9cd882 100644
--- a/fs/btrfs/zoned.c
+++ b/fs/btrfs/zoned.c
@@ -1061,7 +1061,7 @@  u64 btrfs_find_allocatable_zones(struct btrfs_device *device, u64 hole_start,
 
 		/* Check if zones in the region are all empty */
 		if (btrfs_dev_is_sequential(device, pos) &&
-		    find_next_zero_bit(zinfo->empty_zones, end, begin) != end) {
+		    !bitmap_test_range_all_set(zinfo->empty_zones, begin, nzones)) {
 			pos += zinfo->zone_size;
 			continue;
 		}
@@ -1160,23 +1160,23 @@  int btrfs_ensure_empty_zones(struct btrfs_device *device, u64 start, u64 size)
 	struct btrfs_zoned_device_info *zinfo = device->zone_info;
 	const u8 shift = zinfo->zone_size_shift;
 	unsigned long begin = start >> shift;
-	unsigned long end = (start + size) >> shift;
+	unsigned long nbits = size >> shift;
 	u64 pos;
 	int ret;
 
 	ASSERT(IS_ALIGNED(start, zinfo->zone_size));
 	ASSERT(IS_ALIGNED(size, zinfo->zone_size));
 
-	if (end > zinfo->nr_zones)
+	if (begin + nbits > zinfo->nr_zones)
 		return -ERANGE;
 
 	/* All the zones are conventional */
-	if (find_next_bit(zinfo->seq_zones, end, begin) == end)
+	if (bitmap_test_range_all_zero(zinfo->seq_zones, begin, nbits))
 		return 0;
 
 	/* All the zones are sequential and empty */
-	if (find_next_zero_bit(zinfo->seq_zones, end, begin) == end &&
-	    find_next_zero_bit(zinfo->empty_zones, end, begin) == end)
+	if (bitmap_test_range_all_set(zinfo->seq_zones, begin, nbits) &&
+	    bitmap_test_range_all_set(zinfo->empty_zones, begin, nbits))
 		return 0;
 
 	for (pos = start; pos < start + size; pos += zinfo->zone_size) {