• J
    btrfs: allocate raid type kobjects dynamically · c1895442
    Jeff Mahoney 提交于
    We are currently allocating space_info objects in an array when we
    allocate space_info. When a user does something like:
    
    # btrfs balance start -mconvert=raid1 -dconvert=raid1 /mnt
    # btrfs balance start -mconvert=single -dconvert=single /mnt -f
    # btrfs balance start -mconvert=raid1 -dconvert=raid1 /
    
    We can end up with memory corruption since the kobject hasn't
    been reinitialized properly and the name pointer was left set.
    
    The rationale behind allocating them statically was to avoid
    creating a separate kobject container that just contained the
    raid type. It used the index in the array to determine the index.
    
    Ultimately, though, this wastes more memory than it saves in all
    but the most complex scenarios and introduces kobject lifetime
    questions.
    
    This patch allocates the kobjects dynamically instead. Note that
    we also remove the kobject_get/put of the parent kobject since
    kobject_add and kobject_del do that internally.
    Signed-off-by: NJeff Mahoney <jeffm@suse.com>
    Reported-by: NDavid Sterba <dsterba@suse.cz>
    Signed-off-by: NChris Mason <clm@fb.com>
    c1895442
ctree.h 131.9 KB