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

Damien Le Moal Damien.LeMoal at wdc.com
Thu Sep 17 20:29:47 EDT 2020


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 at lst.de>
> Cc: Damien Le Moal <Damien.LeMoal at wdc.com>
> Cc: Johannes Thumshirn <Johannes.Thumshirn at wdc.com>
> Signed-off-by: Keith Busch <kbusch at 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 at wdc.com>


-- 
Damien Le Moal
Western Digital Research



More information about the Linux-nvme mailing list