• Qu Wenruo's avatar
    btrfs: Don't allow subvolid >= (1 << BTRFS_QGROUP_LEVEL_SHIFT) to be created · e09fe2d2
    Qu Wenruo authored
    Btrfs will create qgroup on subvolume creation if quota is enabled, but
    qgroup uses the high bits(currently 16 bits) as level, to build the
    inheritance.
    
    However it is fully possible a subvolume can be created with a
    subvolumeid larger than 1 << BTRFS_QGROUP_LEVEL_SHIFT, so it will be
    considered as level 1 and can't be assigned to other qgroup in level 1.
    
    This patch will prevent such things so qgroup inheritance will not be
    screwed up.
    The downside is very clear, btrfs subvolume number limit will decrease
    from (u64 max - 256(fisrt free objectid) - 256(last free objectid)) to
    (u48 max -256(first free objectid)).
    But we still have near u48(that's 15 digits in dec), so that should not
    be a huge problem.
    Signed-off-by: default avatarQu Wenruo <quwenruo@cn.fujitsu.com>
    Reviewed-by: default avatarJosef Bacik <jbacik@fb.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    e09fe2d2
ctree.h 136 KB