Re: [PATCHv3 1/4] block: add zone specific block statuses

Damien Le Moal
2020-09-18T00:36:56Z

On 2020/09/18 8:18, Keith Busch wrote:
> A zoned device with limited resources to open or activate zones may
> return an error when the host exceeds those limits. The same command may
> be successful if retried later, but the host needs to wait for specific
> zone states before it should retry. Have the block layer provide an
> appropriate status for these conditions so applications can distinuguish
> this error for special handling.
>
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: Damien Le Moal <Damien.LeMoal@wdc.com>
> Cc: Johannes Thumshirn <Johannes.Thumshirn@wdc.com>
> Signed-off-by: Keith Busch <kbusch@kernel.org>
> ---
> Documentation/block/queue-sysfs.rst | 8 ++++++++
> block/blk-core.c | 4 ++++
> include/linux/blk_types.h | 18 ++++++++++++++++++
> 3 files changed, 30 insertions(+)
>
> diff --git a/Documentation/block/queue-sysfs.rst b/Documentation/block/queue-sysfs.rst
> index f261a5c84170..2638d3446b79 100644
> --- a/Documentation/block/queue-sysfs.rst
> +++ b/Documentation/block/queue-sysfs.rst
> @@ -124,6 +124,10 @@ For zoned block devices (zoned attribute indicating "host-managed" or
> EXPLICIT OPEN, IMPLICIT OPEN or CLOSED, is limited by this value.
> If this value is 0, there is no limit.
>
> +If the host attempts to exceed this limit, the driver should report this error
> +with BLK_STS_ZONE_ACTIVE_RESOURCE, which user space may see as the EOVERFLOW
> +errno.
> +
> max_open_zones (RO)
> -------------------
> For zoned block devices (zoned attribute indicating "host-managed" or
> @@ -131,6 +135,10 @@ For zoned block devices (zoned attribute indicating "host-managed" or
> EXPLICIT OPEN or IMPLICIT OPEN, is limited by this value.
> If this value is 0, there is no limit.
>
> +If the host attempts to exceed this limit, the driver should report this error
> +with BLK_STS_ZONE_OPEN_RESOURCE, which user space may see as the ETOOMANYREFS
> +errno.
> +
> max_sectors_kb (RW)
> -------------------
> This is the maximum number of kilobytes that the block layer will allow
> diff --git a/block/blk-core.c b/block/blk-core.c
> index 10c08ac50697..8bffc7732e37 100644
> --- a/block/blk-core.c
> +++ b/block/blk-core.c
> @@ -186,6 +186,10 @@ static const struct {
> /* device mapper special case, should not leak out: */
> [BLK_STS_DM_REQUEUE] = { -EREMCHG, "dm internal retry" },
>
> + /* zone device specific errors */
> + [BLK_STS_ZONE_OPEN_RESOURCE] = { -ETOOMANYREFS, "open zones exceeded" },
> + [BLK_STS_ZONE_ACTIVE_RESOURCE] = { -EOVERFLOW, "active zones exceeded" },
> +
> /* everything else not covered above: */
> [BLK_STS_IOERR] = { -EIO, "I/O" },
> };
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index 4ecf4fed171f..8603fc5f86a3 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -103,6 +103,24 @@ typedef u8 __bitwise blk_status_t;
> */
> #define BLK_STS_ZONE_RESOURCE ((__force blk_status_t)14)
>
> +/*
> + * BLK_STS_ZONE_OPEN_RESOURCE is returned from the driver in the completion
> + * path if the device returns a status indicating that too many zone resources
> + * are currently open. The same command should be successful if resubmitted
> + * after the number of open zones decreases below the device's limits, which is
> + * reported in the request_queue's max_open_zones.
> + */
> +#define BLK_STS_ZONE_OPEN_RESOURCE ((__force blk_status_t)15)
> +
> +/*
> + * BLK_STS_ZONE_ACTIVE_RESOURCE is returned from the driver in the completion
> + * path if the device returns a status indicating that too many zone resources
> + * are currently active. The same command should be successful if resubmitted
> + * after the number of active zones decreases below the device's limits, which
> + * is reported in the request_queue's max_active_zones.
> + */
> +#define BLK_STS_ZONE_ACTIVE_RESOURCE ((__force blk_status_t)16)
> +
> /**
> * blk_path_error - returns true if error may be path related
> * @error: status the request was completed with
>

Looks good.
Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>

--
Damien Le Moal
Western Digital Research