• Christoph Hellwig's avatar
    md: fix a lock order reversal in md_alloc · 7df835a3
    Christoph Hellwig authored
    Commit b0140891 ("md: Fix race when creating a new md device.")
    not only moved assigning mddev->gendisk before calling add_disk, which
    fixes the races described in the commit log, but also added a
    mddev->open_mutex critical section over add_disk and creation of the
    md kobj.  Adding a kobject after add_disk is racy vs deleting the gendisk
    right after adding it, but md already prevents against that by holding
    a mddev->active reference.
    
    On the other hand taking this lock added a lock order reversal with what
    is not disk->open_mutex (used to be bdev->bd_mutex when the commit was
    added) for partition devices, which need that lock for the internal open
    for the partition scan, and a recent commit also takes it for
    non-partitioned devices, leading to further lockdep splatter.
    
    Fixes: b0140891 ("md: Fix race when creating a new md device.")
    Fixes: d6263387 ("block: support delayed holder registration")
    Reported-by: syzbot+fadc0aaf497e6a493b9f@syzkaller.appspotmail.com
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Tested-by: syzbot+fadc0aaf497e6a493b9f@syzkaller.appspotmail.com
    Reviewed-by: default avatarNeilBrown <neilb@suse.de>
    Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
    7df835a3
md.c 259 KB