• S
    dm table: Fix zoned model check and zone sectors check · 2d669ceb
    Shin'ichiro Kawasaki 提交于
    Commit 24f6b603 ("dm table: fix zoned iterate_devices based device
    capability checks") triggered dm table load failure when dm-zoned device
    is set up for zoned block devices and a regular device for cache.
    
    The commit inverted logic of two callback functions for iterate_devices:
    device_is_zoned_model() and device_matches_zone_sectors(). The logic of
    device_is_zoned_model() was inverted then all destination devices of all
    targets in dm table are required to have the expected zoned model. This
    is fine for dm-linear, dm-flakey and dm-crypt on zoned block devices
    since each target has only one destination device. However, this results
    in failure for dm-zoned with regular cache device since that target has
    both regular block device and zoned block devices.
    
    As for device_matches_zone_sectors(), the commit inverted the logic to
    require all zoned block devices in each target have the specified
    zone_sectors. This check also fails for regular block device which does
    not have zones.
    
    To avoid the check failures, fix the zone model check and the zone
    sectors check. For zone model check, introduce the new feature flag
    DM_TARGET_MIXED_ZONED_MODEL, and set it to dm-zoned target. When the
    target has this flag, allow it to have destination devices with any
    zoned model. For zone sectors check, skip the check if the destination
    device is not a zoned block device. Also add comments and improve an
    error message to clarify expectations to the two checks.
    
    Fixes: 24f6b603 ("dm table: fix zoned iterate_devices based device capability checks")
    Signed-off-by: NShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Signed-off-by: NDamien Le Moal <damien.lemoal@wdc.com>
    Signed-off-by: NMike Snitzer <snitzer@redhat.com>
    2d669ceb
dm-zoned-target.c 28.2 KB