• Damien Le Moal's avatar
    block: Implement zone append emulation · 9b1ce7f0
    Damien Le Moal authored
    Given that zone write plugging manages all writes to zones of a zoned
    block device and tracks the write pointer position of all zones that are
    not full nor empty, emulating zone append operations using regular
    writes can be implemented generically, without relying on the underlying
    device driver to implement such emulation. This is needed for devices
    that do not natively support the zone append command (e.g. SMR
    hard-disks).
    
    A device may request zone append emulation by setting its
    max_zone_append_sectors queue limit to 0. For such device, the function
    blk_zone_wplug_prepare_bio() changes zone append BIOs into
    non-mergeable regular write BIOs. Modified zone append BIOs are flagged
    with the new BIO flag BIO_EMULATES_ZONE_APPEND. This flag is checked
    on completion of the BIO in blk_zone_write_plug_bio_endio() to restore
    the original REQ_OP_ZONE_APPEND operation code of the BIO.
    
    The block layer internal inline helper function bio_is_zone_append() is
    added to test if a BIO is either a native zone append operation
    (REQ_OP_ZONE_APPEND operation code) or if it is flagged with
    BIO_EMULATES_ZONE_APPEND. Given that both native and emulated zone
    append BIO completion handling should be similar, The functions
    blk_update_request() and blk_zone_complete_request_bio() are modified to
    use bio_is_zone_append() to execute blk_zone_update_request_bio() for
    both native and emulated zone append operations.
    
    This commit contains contributions from Christoph Hellwig <hch@lst.de>.
    Signed-off-by: default avatarDamien Le Moal <dlemoal@kernel.org>
    Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
    Tested-by: default avatarHans Holmberg <hans.holmberg@wdc.com>
    Tested-by: default avatarDennis Maisenbacher <dennis.maisenbacher@wdc.com>
    Reviewed-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Link: https://lore.kernel.org/r/20240408014128.205141-11-dlemoal@kernel.orgSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    9b1ce7f0
blk-mq.c 124 KB