• Niklas Cassel's avatar
    nvme: report write pointer for a full zone as zone start + zone len · 793fcab8
    Niklas Cassel authored
    The write pointer in NVMe ZNS is invalid for a zone in zone state full.
    The same also holds true for ZAC/ZBC.
    
    The current behavior for NVMe is to simply propagate the wp reported by
    the drive, even for full zones. Since the wp is invalid for a full zone,
    the wp reported by the drive may be any value.
    
    The way that the sd_zbc driver handles a full zone is to always report
    the wp as zone start + zone len, regardless of what the drive reported.
    null_blk also follows this convention.
    
    Do the same for NVMe, so that a BLKREPORTZONE ioctl reports the write
    pointer for a full zone in a consistent way, regardless of the interface
    of the underlying zoned block device.
    
    blkzone report before patch:
    start: 0x000040000, len 0x040000, cap 0x03e000, wptr 0xfffffffffffbfff8
    reset:0 non-seq:0, zcond:14(fu) [type: 2(SEQ_WRITE_REQUIRED)]
    
    blkzone report after patch:
    start: 0x000040000, len 0x040000, cap 0x03e000, wptr 0x040000 reset:0
    non-seq:0, zcond:14(fu) [type: 2(SEQ_WRITE_REQUIRED)]
    Signed-off-by: default avatarNiklas Cassel <niklas.cassel@wdc.com>
    Reviewed-by: default avatarKeith Busch <kbusch@kernel.org>
    Reviewed-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
    Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    793fcab8
zns.c 6.25 KB