In btrfs_check_chunk_valid() we calculates chunk item using open code.

use btrfs_chunk_item_size() to replace them.

Signed-off-by: Qu Wenruo <quwen...@cn.fujitsu.com>
---
 volumes.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/volumes.c b/volumes.c
index b350e259..62e23aee 100644
--- a/volumes.c
+++ b/volumes.c
@@ -1685,6 +1685,7 @@ int btrfs_check_chunk_valid(struct btrfs_root *root,
        u16 num_stripes;
        u16 sub_stripes;
        u64 type;
+       u32 chunk_ondisk_size;
 
        length = btrfs_chunk_length(leaf, chunk);
        stripe_len = btrfs_chunk_stripe_len(leaf, chunk);
@@ -1724,16 +1725,16 @@ int btrfs_check_chunk_valid(struct btrfs_root *root,
                        BTRFS_BLOCK_GROUP_PROFILE_MASK) & type);
                return -EIO;
        }
+
+       chunk_ondisk_size = btrfs_chunk_item_size(num_stripes);
        /*
         * Btrfs_chunk contains at least one stripe, and for sys_chunk
         * it can't exceed the system chunk array size
         * For normal chunk, it should match its chunk item size.
         */
        if (num_stripes < 1 ||
-           (slot == -1 && sizeof(struct btrfs_stripe) * num_stripes >
-            BTRFS_SYSTEM_CHUNK_ARRAY_SIZE) ||
-           (slot >= 0 && sizeof(struct btrfs_stripe) * (num_stripes - 1) >
-            btrfs_item_size_nr(leaf, slot))) {
+           (slot == -1 && chunk_ondisk_size > BTRFS_SYSTEM_CHUNK_ARRAY_SIZE) ||
+           (slot >= 0 && chunk_ondisk_size > btrfs_item_size_nr(leaf, slot))) {
                error("invalid num_stripes: %u", num_stripes);
                return -EIO;
        }
-- 
2.12.2



--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to