Commit 63b5385e authored by Damien Le Moal's avatar Damien Le Moal Committed by Jens Axboe

block: Remove BLK_STS_ZONE_RESOURCE

The zone append emulation of the scsi disk driver was the only driver
using BLK_STS_ZONE_RESOURCE. With this code removed,
BLK_STS_ZONE_RESOURCE is now unused. Remove this macro definition and
simplify blk_mq_dispatch_rq_list() where this status code was handled.
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-20-dlemoal@kernel.orgSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent d2a9b5fd
...@@ -1921,19 +1921,6 @@ static void blk_mq_handle_dev_resource(struct request *rq, ...@@ -1921,19 +1921,6 @@ static void blk_mq_handle_dev_resource(struct request *rq,
__blk_mq_requeue_request(rq); __blk_mq_requeue_request(rq);
} }
static void blk_mq_handle_zone_resource(struct request *rq,
struct list_head *zone_list)
{
/*
* If we end up here it is because we cannot dispatch a request to a
* specific zone due to LLD level zone-write locking or other zone
* related resource not being available. In this case, set the request
* aside in zone_list for retrying it later.
*/
list_add(&rq->queuelist, zone_list);
__blk_mq_requeue_request(rq);
}
enum prep_dispatch { enum prep_dispatch {
PREP_DISPATCH_OK, PREP_DISPATCH_OK,
PREP_DISPATCH_NO_TAG, PREP_DISPATCH_NO_TAG,
...@@ -2019,7 +2006,6 @@ bool blk_mq_dispatch_rq_list(struct blk_mq_hw_ctx *hctx, struct list_head *list, ...@@ -2019,7 +2006,6 @@ bool blk_mq_dispatch_rq_list(struct blk_mq_hw_ctx *hctx, struct list_head *list,
struct request *rq; struct request *rq;
int queued; int queued;
blk_status_t ret = BLK_STS_OK; blk_status_t ret = BLK_STS_OK;
LIST_HEAD(zone_list);
bool needs_resource = false; bool needs_resource = false;
if (list_empty(list)) if (list_empty(list))
...@@ -2061,23 +2047,11 @@ bool blk_mq_dispatch_rq_list(struct blk_mq_hw_ctx *hctx, struct list_head *list, ...@@ -2061,23 +2047,11 @@ bool blk_mq_dispatch_rq_list(struct blk_mq_hw_ctx *hctx, struct list_head *list,
case BLK_STS_DEV_RESOURCE: case BLK_STS_DEV_RESOURCE:
blk_mq_handle_dev_resource(rq, list); blk_mq_handle_dev_resource(rq, list);
goto out; goto out;
case BLK_STS_ZONE_RESOURCE:
/*
* Move the request to zone_list and keep going through
* the dispatch list to find more requests the drive can
* accept.
*/
blk_mq_handle_zone_resource(rq, &zone_list);
needs_resource = true;
break;
default: default:
blk_mq_end_request(rq, ret); blk_mq_end_request(rq, ret);
} }
} while (!list_empty(list)); } while (!list_empty(list));
out: out:
if (!list_empty(&zone_list))
list_splice_tail_init(&zone_list, list);
/* If we didn't flush the entire list, we could have told the driver /* If we didn't flush the entire list, we could have told the driver
* there was more coming, but that turned out to be a lie. * there was more coming, but that turned out to be a lie.
*/ */
......
...@@ -1870,7 +1870,6 @@ static blk_status_t scsi_queue_rq(struct blk_mq_hw_ctx *hctx, ...@@ -1870,7 +1870,6 @@ static blk_status_t scsi_queue_rq(struct blk_mq_hw_ctx *hctx,
case BLK_STS_OK: case BLK_STS_OK:
break; break;
case BLK_STS_RESOURCE: case BLK_STS_RESOURCE:
case BLK_STS_ZONE_RESOURCE:
if (scsi_device_blocked(sdev)) if (scsi_device_blocked(sdev))
ret = BLK_STS_DEV_RESOURCE; ret = BLK_STS_DEV_RESOURCE;
break; break;
......
...@@ -136,18 +136,6 @@ typedef u16 blk_short_t; ...@@ -136,18 +136,6 @@ typedef u16 blk_short_t;
*/ */
#define BLK_STS_DEV_RESOURCE ((__force blk_status_t)13) #define BLK_STS_DEV_RESOURCE ((__force blk_status_t)13)
/*
* BLK_STS_ZONE_RESOURCE is returned from the driver to the block layer if zone
* related resources are unavailable, but the driver can guarantee the queue
* will be rerun in the future once the resources become available again.
*
* This is different from BLK_STS_DEV_RESOURCE in that it explicitly references
* a zone specific resource and IO to a different zone on the same device could
* still be served. Examples of that are zones that are write-locked, but a read
* to the same zone could be served.
*/
#define BLK_STS_ZONE_RESOURCE ((__force blk_status_t)14)
/* /*
* BLK_STS_ZONE_OPEN_RESOURCE is returned from the driver in the completion * 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 * path if the device returns a status indicating that too many zone resources
...@@ -155,7 +143,7 @@ typedef u16 blk_short_t; ...@@ -155,7 +143,7 @@ typedef u16 blk_short_t;
* after the number of open zones decreases below the device's limits, which is * after the number of open zones decreases below the device's limits, which is
* reported in the request_queue's max_open_zones. * reported in the request_queue's max_open_zones.
*/ */
#define BLK_STS_ZONE_OPEN_RESOURCE ((__force blk_status_t)15) #define BLK_STS_ZONE_OPEN_RESOURCE ((__force blk_status_t)14)
/* /*
* BLK_STS_ZONE_ACTIVE_RESOURCE is returned from the driver in the completion * BLK_STS_ZONE_ACTIVE_RESOURCE is returned from the driver in the completion
...@@ -164,20 +152,20 @@ typedef u16 blk_short_t; ...@@ -164,20 +152,20 @@ typedef u16 blk_short_t;
* after the number of active zones decreases below the device's limits, which * after the number of active zones decreases below the device's limits, which
* is reported in the request_queue's max_active_zones. * is reported in the request_queue's max_active_zones.
*/ */
#define BLK_STS_ZONE_ACTIVE_RESOURCE ((__force blk_status_t)16) #define BLK_STS_ZONE_ACTIVE_RESOURCE ((__force blk_status_t)15)
/* /*
* BLK_STS_OFFLINE is returned from the driver when the target device is offline * BLK_STS_OFFLINE is returned from the driver when the target device is offline
* or is being taken offline. This could help differentiate the case where a * or is being taken offline. This could help differentiate the case where a
* device is intentionally being shut down from a real I/O error. * device is intentionally being shut down from a real I/O error.
*/ */
#define BLK_STS_OFFLINE ((__force blk_status_t)17) #define BLK_STS_OFFLINE ((__force blk_status_t)16)
/* /*
* BLK_STS_DURATION_LIMIT is returned from the driver when the target device * BLK_STS_DURATION_LIMIT is returned from the driver when the target device
* aborted the command because it exceeded one of its Command Duration Limits. * aborted the command because it exceeded one of its Command Duration Limits.
*/ */
#define BLK_STS_DURATION_LIMIT ((__force blk_status_t)18) #define BLK_STS_DURATION_LIMIT ((__force blk_status_t)17)
/** /**
* blk_path_error - returns true if error may be path related * blk_path_error - returns true if error may be path related
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment