• Mike Snitzer's avatar
    dm: fix zoned locking imbalance due to needless check in clone_endio · dddf3056
    Mike Snitzer authored
    After the commit ca522482 ("dm: pass NULL bdev to bio_alloc_clone"),
    clone_endio() only calls dm_zone_endio() when DM targets remap the
    clone bio's bdev to something other than the md->disk->part0 default.
    
    However, if a DM target (e.g. dm-crypt) stacked ontop of a dm-zoned
    does not remap the clone bio using bio_set_dev() then dm_zone_endio()
    is not called at completion of the bios and zone locks are not
    properly unlocked. This triggers a hang, in dm_zone_map_bio(), when
    blktests block/004 is run for dm-crypt on zoned block devices. To
    avoid the hang, simply remove the clone_endio() check that verifies
    the target remapped the clone bio to a device other than the default.
    
    Fixes: ca522482 ("dm: pass NULL bdev to bio_alloc_clone")
    Reported-by: default avatarShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
    dddf3056
dm.c 75.2 KB