• Damien Le Moal's avatar
    block: improve handling of all zones reset operation · 1ee533ec
    Damien Le Moal authored
    SCSI, ZNS and null_blk zoned devices support resetting all zones using
    a single command (REQ_OP_ZONE_RESET_ALL), as indicated using the device
    request queue flag QUEUE_FLAG_ZONE_RESETALL. This flag is not set for
    device mapper targets creating zoned devices. In this case, a user
    request for resetting all zones of a device is processed in
    blkdev_zone_mgmt() by issuing a REQ_OP_ZONE_RESET operation for each
    zone of the device. This leads to different behaviors of the
    BLKRESETZONE ioctl() depending on the target device support for the
    reset all operation. E.g.
    
    blkzone reset /dev/sdX
    
    will reset all zones of a SCSI device using a single command that will
    ignore conventional, read-only or offline zones.
    
    But a dm-linear device including conventional, read-only or offline
    zones cannot be reset in the same manner as some of the single zone
    reset operations issued by blkdev_zone_mgmt() will fail. E.g.:
    
    blkzone reset /dev/dm-Y
    blkzone: /dev/dm-0: BLKRESETZONE ioctl failed: Remote I/O error
    
    To simplify applications and tools development, unify the behavior of
    the all-zone reset operation by modifying blkdev_zone_mgmt() to not
    issue a zone reset operation for conventional, read-only and offline
    zones, thus mimicking what an actual reset-all device command does on a
    device supporting REQ_OP_ZONE_RESET_ALL. This emulation is done using
    the new function blkdev_zone_reset_all_emulated(). The zones needing a
    reset are identified using a bitmap that is initialized using a zone
    report. Since empty zones do not need a reset, also ignore these zones.
    The function blkdev_zone_reset_all() is introduced for block devices
    natively supporting reset all operations. blkdev_zone_mgmt() is modified
    to call either function to execute an all zone reset request.
    Signed-off-by: default avatarDamien Le Moal <damien.lemoal@wdc.com>
    [hch: split into multiple functions]
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
    Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
    Acked-by: default avatarJens Axboe <axboe@kernel.dk>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    1ee533ec
blk-zoned.c 17.1 KB