]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
btrfs: use has_single_bit_set for clarity
authorDavid Sterba <dsterba@suse.com>
Tue, 1 Oct 2019 17:44:42 +0000 (19:44 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 18 Nov 2019 11:46:50 +0000 (12:46 +0100)
Replace is_power_of_2 with the helper that is self-documenting and
remove the open coded call in alloc_profile_is_valid.

Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/tree-checker.c
fs/btrfs/volumes.c

index f041ec5f415c41de51c126aa6466f4f86d8ce016..fa4848a87430a3695e289757dbbc9892f88220fd 100644 (file)
@@ -23,6 +23,7 @@
 #include "disk-io.h"
 #include "compression.h"
 #include "volumes.h"
+#include "misc.h"
 
 /*
  * Error message should follow the following format:
@@ -632,7 +633,7 @@ int btrfs_check_chunk_valid(struct extent_buffer *leaf,
                return -EUCLEAN;
        }
 
-       if (!is_power_of_2(type & BTRFS_BLOCK_GROUP_PROFILE_MASK) &&
+       if (!has_single_bit_set(type & BTRFS_BLOCK_GROUP_PROFILE_MASK) &&
            (type & BTRFS_BLOCK_GROUP_PROFILE_MASK) != 0) {
                chunk_err(leaf, chunk, logical,
                "invalid chunk profile flag: 0x%llx, expect 0 or 1 bit set",
@@ -808,11 +809,11 @@ static int check_inode_item(struct extent_buffer *leaf,
        }
 
        /*
-        * S_IFMT is not bit mapped so we can't completely rely on is_power_of_2,
-        * but is_power_of_2() can save us from checking FIFO/CHR/DIR/REG.
-        * Only needs to check BLK, LNK and SOCKS
+        * S_IFMT is not bit mapped so we can't completely rely on
+        * is_power_of_2/has_single_bit_set, but it can save us from checking
+        * FIFO/CHR/DIR/REG.  Only needs to check BLK, LNK and SOCKS
         */
-       if (!is_power_of_2(mode & S_IFMT)) {
+       if (!has_single_bit_set(mode & S_IFMT)) {
                if (!S_ISLNK(mode) && !S_ISBLK(mode) && !S_ISSOCK(mode)) {
                        inode_item_err(fs_info, leaf, slot,
                        "invalid mode: has 0%o expect valid S_IF* bit(s)",
@@ -1033,8 +1034,8 @@ static int check_extent_item(struct extent_buffer *leaf,
                           btrfs_super_generation(fs_info->super_copy) + 1);
                return -EUCLEAN;
        }
-       if (!is_power_of_2(flags & (BTRFS_EXTENT_FLAG_DATA |
-                                   BTRFS_EXTENT_FLAG_TREE_BLOCK))) {
+       if (!has_single_bit_set(flags & (BTRFS_EXTENT_FLAG_DATA |
+                                        BTRFS_EXTENT_FLAG_TREE_BLOCK))) {
                extent_err(leaf, slot,
                "invalid extent flag, have 0x%llx expect 1 bit set in 0x%llx",
                        flags, BTRFS_EXTENT_FLAG_DATA |
index 8d1555be03ad36051fb15b39553de1bf99146f66..f7b45e4b7de459be8c9e4ee981da0b5721063074 100644 (file)
@@ -3844,12 +3844,7 @@ static int alloc_profile_is_valid(u64 flags, int extended)
        if (flags == 0)
                return !extended; /* "0" is valid for usual profiles */
 
-       /* true if exactly one bit set */
-       /*
-        * Don't use is_power_of_2(unsigned long) because it won't work
-        * for the single profile (1ULL << 48) on 32-bit CPUs.
-        */
-       return flags != 0 && (flags & (flags - 1)) == 0;
+       return has_single_bit_set(flags);
 }
 
 static inline int balance_need_close(struct btrfs_fs_info *fs_info)