On Sat, Jun 05, 2021 at 05:09:50PM +0300, Christoph Hellwig wrote: > Commit c76f48eb5c08 ("block: take bd_mutex around delete_partitions in > del_gendisk") adds disk->part0->bd_mutex in del_gendisk(), this way > causes the following AB/BA deadlock between removing loop and opening > loop: > > 1) loop_control_ioctl(LOOP_CTL_REMOVE) > -> mutex_lock(&loop_ctl_mutex) > -> del_gendisk > -> mutex_lock(&disk->part0->bd_mutex) > > 2) blkdev_get_by_dev > -> mutex_lock(&disk->part0->bd_mutex) > -> lo_open > -> mutex_lock(&loop_ctl_mutex) > > Add a new Lo_deleting state to remove the need for clearing > ->private_data and thus holding loop_ctl_mutex in the ioctl > LOOP_CTL_REMOVE path. > > Based on an analysis and earlier patch from > Ming Lei <ming.lei@xxxxxxxxxx>. > > Reported-by: Colin Ian King <colin.king@xxxxxxxxxxxxx> > Fixes: c76f48eb5c08 ("block: take bd_mutex around delete_partitions in del_gendisk") > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Reviewed-by: Ming Lei <ming.lei@xxxxxxxxxx> -- Ming