• Q
    btrfs: use ilog2() to replace if () branches for btrfs_bg_flags_to_raid_index() · 719fae89
    Qu Wenruo 提交于
    In function btrfs_bg_flags_to_raid_index(), we use quite some if () to
    convert the BTRFS_BLOCK_GROUP_* bits to a index number.
    
    But the truth is, there is really no such need for so many branches at
    all.
    Since all BTRFS_BLOCK_GROUP_* flags are just one single bit set inside
    BTRFS_BLOCK_GROUP_PROFILES_MASK, we can easily use ilog2() to calculate
    their values.
    
    This calculation has an anchor point, the lowest PROFILE bit, which is
    RAID0.
    
    Even it's fixed on-disk format and should never change, here I added
    extra compile time checks to make it super safe:
    
    1. Make sure RAID0 is always the lowest bit in PROFILE_MASK
       This is done by finding the first (least significant) bit set of
       RAID0 and PROFILE_MASK & ~RAID0.
    
    2. Make sure RAID0 bit set beyond the highest bit of TYPE_MASK
    Signed-off-by: NQu Wenruo <wqu@suse.com>
    Reviewed-by: NDavid Sterba <dsterba@suse.com>
    Signed-off-by: NDavid Sterba <dsterba@suse.com>
    719fae89
volumes.h 19.5 KB