* remove the legacy BLKPREP_* values
@ 2018-11-09 13:42 Christoph Hellwig
2018-11-09 13:42 ` [PATCH 1/7] ide: cleanup ->prep_rq calling convention Christoph Hellwig
` (8 more replies)
0 siblings, 9 replies; 23+ messages in thread
From: Christoph Hellwig @ 2018-11-09 13:42 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
Hi Jens,
this series gets rid of the old BLKPREP_* values from the legacy block
layer in favor of always using a blk_status_t (or a bool in one case).
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 1/7] ide: cleanup ->prep_rq calling convention
2018-11-09 13:42 remove the legacy BLKPREP_* values Christoph Hellwig
@ 2018-11-09 13:42 ` Christoph Hellwig
2018-11-10 0:46 ` Bart Van Assche
2018-11-09 13:42 ` [PATCH 2/7] scsi: simplify scsi_prep_state_check Christoph Hellwig
` (7 subsequent siblings)
8 siblings, 1 reply; 23+ messages in thread
From: Christoph Hellwig @ 2018-11-09 13:42 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
The return value is just used as a binary yes/no decicsion, so switch
it to a bool instead of the old BLKPREP_* values returned as an int.
Also clean up a few related comments.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/ide/ide-cd.c | 22 +++++++++++-----------
drivers/ide/ide-disk.c | 8 ++++----
drivers/ide/ide-io.c | 4 ++--
include/linux/ide.h | 2 +-
4 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 4ecaf2ace4cb..69c1aede5f93 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -527,8 +527,8 @@ static bool ide_cd_error_cmd(ide_drive_t *drive, struct ide_cmd *cmd)
return false;
}
-/* standard prep_rq_fn that builds 10 byte cmds */
-static int ide_cdrom_prep_fs(struct request_queue *q, struct request *rq)
+/* standard prep_rq that builds 10 byte cmds */
+static bool ide_cdrom_prep_fs(struct request_queue *q, struct request *rq)
{
int hard_sect = queue_logical_block_size(q);
long block = (long)blk_rq_pos(rq) / (hard_sect >> 9);
@@ -554,14 +554,14 @@ static int ide_cdrom_prep_fs(struct request_queue *q, struct request *rq)
req->cmd[7] = (blocks >> 8) & 0xff;
req->cmd[8] = blocks & 0xff;
req->cmd_len = 10;
- return BLKPREP_OK;
+ return true;
}
/*
* Most of the SCSI commands are supported directly by ATAPI devices.
* This transform handles the few exceptions.
*/
-static int ide_cdrom_prep_pc(struct request *rq)
+static bool ide_cdrom_prep_pc(struct request *rq)
{
u8 *c = scsi_req(rq)->cmd;
@@ -575,7 +575,7 @@ static int ide_cdrom_prep_pc(struct request *rq)
c[1] &= 0xe0;
c[0] += (READ_10 - READ_6);
scsi_req(rq)->cmd_len = 10;
- return BLKPREP_OK;
+ return true;
}
/*
@@ -585,13 +585,13 @@ static int ide_cdrom_prep_pc(struct request *rq)
*/
if (c[0] == MODE_SENSE || c[0] == MODE_SELECT) {
scsi_req(rq)->result = ILLEGAL_REQUEST;
- return BLKPREP_KILL;
+ return false;
}
- return BLKPREP_OK;
+ return true;
}
-static int ide_cdrom_prep_fn(ide_drive_t *drive, struct request *rq)
+static bool ide_cdrom_prep_rq(ide_drive_t *drive, struct request *rq)
{
if (!blk_rq_is_passthrough(rq)) {
scsi_req_init(scsi_req(rq));
@@ -600,7 +600,7 @@ static int ide_cdrom_prep_fn(ide_drive_t *drive, struct request *rq)
} else if (blk_rq_is_scsi(rq))
return ide_cdrom_prep_pc(rq);
- return 0;
+ return true;
}
static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
@@ -818,7 +818,7 @@ static ide_startstop_t cdrom_start_rw(ide_drive_t *drive, struct request *rq)
* We may be retrying this request after an error. Fix up any
* weirdness which might be present in the request packet.
*/
- ide_cdrom_prep_fn(drive, rq);
+ ide_cdrom_prep_rq(drive, rq);
}
/* fs requests *must* be hardware frame aligned */
@@ -1521,7 +1521,7 @@ static int ide_cdrom_setup(ide_drive_t *drive)
ide_debug_log(IDE_DBG_PROBE, "enter");
- drive->prep_rq = ide_cdrom_prep_fn;
+ drive->prep_rq = ide_cdrom_prep_rq;
blk_queue_dma_alignment(q, 31);
blk_queue_update_dma_pad(q, 15);
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
index f8567c8c9dd1..724db9af0d82 100644
--- a/drivers/ide/ide-disk.c
+++ b/drivers/ide/ide-disk.c
@@ -427,12 +427,12 @@ static void ide_disk_unlock_native_capacity(ide_drive_t *drive)
drive->dev_flags |= IDE_DFLAG_NOHPA; /* disable HPA on resume */
}
-static int idedisk_prep_fn(ide_drive_t *drive, struct request *rq)
+static bool idedisk_prep_rq(ide_drive_t *drive, struct request *rq)
{
struct ide_cmd *cmd;
if (req_op(rq) != REQ_OP_FLUSH)
- return BLKPREP_OK;
+ return true;
if (rq->special) {
cmd = rq->special;
@@ -458,7 +458,7 @@ static int idedisk_prep_fn(ide_drive_t *drive, struct request *rq)
rq->special = cmd;
cmd->rq = rq;
- return BLKPREP_OK;
+ return true;
}
ide_devset_get(multcount, mult_count);
@@ -547,7 +547,7 @@ static void update_flush(ide_drive_t *drive)
if (barrier) {
wc = true;
- drive->prep_rq = idedisk_prep_fn;
+ drive->prep_rq = idedisk_prep_rq;
}
}
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index 5093c605c91c..64e72640acf8 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -326,7 +326,7 @@ static ide_startstop_t start_request (ide_drive_t *drive, struct request *rq)
goto kill_rq;
}
- if (drive->prep_rq && drive->prep_rq(drive, rq))
+ if (drive->prep_rq && !drive->prep_rq(drive, rq))
return ide_stopped;
if (ata_pm_request(rq))
@@ -508,7 +508,7 @@ blk_status_t ide_queue_rq(struct blk_mq_hw_ctx *hctx,
/*
* we know that the queue isn't empty, but this can happen
- * if the q->prep_rq_fn() decides to kill a request
+ * if ->prep_rq() decides to kill a request
*/
if (!rq) {
rq = bd->rq;
diff --git a/include/linux/ide.h b/include/linux/ide.h
index 079f8bc0b0f4..272704ff21ee 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -529,7 +529,7 @@ struct ide_drive_s {
struct request_queue *queue; /* request queue */
- int (*prep_rq)(struct ide_drive_s *, struct request *);
+ bool (*prep_rq)(struct ide_drive_s *, struct request *);
struct blk_mq_tag_set tag_set;
--
2.19.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 2/7] scsi: simplify scsi_prep_state_check
2018-11-09 13:42 remove the legacy BLKPREP_* values Christoph Hellwig
2018-11-09 13:42 ` [PATCH 1/7] ide: cleanup ->prep_rq calling convention Christoph Hellwig
@ 2018-11-09 13:42 ` Christoph Hellwig
2018-11-10 0:47 ` Bart Van Assche
2018-11-09 13:42 ` [PATCH 3/7] scsi: push blk_status_t up into scsi_setup_{fs,scsi}_cmnd Christoph Hellwig
` (6 subsequent siblings)
8 siblings, 1 reply; 23+ messages in thread
From: Christoph Hellwig @ 2018-11-09 13:42 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
Return a blk_status_t directly, and make the code a little more compact
by handling the fast path in the caller.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/scsi/scsi_lib.c | 102 +++++++++++++++++++---------------------
1 file changed, 48 insertions(+), 54 deletions(-)
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index ed81b8e74cfe..5ecabb3e77b7 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1240,60 +1240,48 @@ static int scsi_setup_cmnd(struct scsi_device *sdev, struct request *req)
return scsi_setup_fs_cmnd(sdev, req);
}
-static int
+static blk_status_t
scsi_prep_state_check(struct scsi_device *sdev, struct request *req)
{
- int ret = BLKPREP_OK;
-
- /*
- * If the device is not in running state we will reject some
- * or all commands.
- */
- if (unlikely(sdev->sdev_state != SDEV_RUNNING)) {
- switch (sdev->sdev_state) {
- case SDEV_OFFLINE:
- case SDEV_TRANSPORT_OFFLINE:
- /*
- * If the device is offline we refuse to process any
- * commands. The device must be brought online
- * before trying any recovery commands.
- */
- sdev_printk(KERN_ERR, sdev,
- "rejecting I/O to offline device\n");
- ret = BLKPREP_KILL;
- break;
- case SDEV_DEL:
- /*
- * If the device is fully deleted, we refuse to
- * process any commands as well.
- */
- sdev_printk(KERN_ERR, sdev,
- "rejecting I/O to dead device\n");
- ret = BLKPREP_KILL;
- break;
- case SDEV_BLOCK:
- case SDEV_CREATED_BLOCK:
- ret = BLKPREP_DEFER;
- break;
- case SDEV_QUIESCE:
- /*
- * If the devices is blocked we defer normal commands.
- */
- if (req && !(req->rq_flags & RQF_PREEMPT))
- ret = BLKPREP_DEFER;
- break;
- default:
- /*
- * For any other not fully online state we only allow
- * special commands. In particular any user initiated
- * command is not allowed.
- */
- if (req && !(req->rq_flags & RQF_PREEMPT))
- ret = BLKPREP_KILL;
- break;
- }
+ switch (sdev->sdev_state) {
+ case SDEV_OFFLINE:
+ case SDEV_TRANSPORT_OFFLINE:
+ /*
+ * If the device is offline we refuse to process any
+ * commands. The device must be brought online
+ * before trying any recovery commands.
+ */
+ sdev_printk(KERN_ERR, sdev,
+ "rejecting I/O to offline device\n");
+ return BLK_STS_IOERR;
+ case SDEV_DEL:
+ /*
+ * If the device is fully deleted, we refuse to
+ * process any commands as well.
+ */
+ sdev_printk(KERN_ERR, sdev,
+ "rejecting I/O to dead device\n");
+ return BLK_STS_IOERR;
+ case SDEV_BLOCK:
+ case SDEV_CREATED_BLOCK:
+ return BLK_STS_RESOURCE;
+ case SDEV_QUIESCE:
+ /*
+ * If the devices is blocked we defer normal commands.
+ */
+ if (req && !(req->rq_flags & RQF_PREEMPT))
+ return BLK_STS_RESOURCE;
+ return BLK_STS_OK;
+ default:
+ /*
+ * For any other not fully online state we only allow
+ * special commands. In particular any user initiated
+ * command is not allowed.
+ */
+ if (req && !(req->rq_flags & RQF_PREEMPT))
+ return BLK_STS_IOERR;
+ return BLK_STS_OK;
}
- return ret;
}
/*
@@ -1700,9 +1688,15 @@ static blk_status_t scsi_queue_rq(struct blk_mq_hw_ctx *hctx,
blk_status_t ret;
int reason;
- ret = prep_to_mq(scsi_prep_state_check(sdev, req));
- if (ret != BLK_STS_OK)
- goto out_put_budget;
+ /*
+ * If the device is not in running state we will reject some or all
+ * commands.
+ */
+ if (unlikely(sdev->sdev_state != SDEV_RUNNING)) {
+ ret = scsi_prep_state_check(sdev, req);
+ if (ret != BLK_STS_OK)
+ goto out_put_budget;
+ }
ret = BLK_STS_RESOURCE;
if (!scsi_target_queue_ready(shost, sdev))
--
2.19.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 3/7] scsi: push blk_status_t up into scsi_setup_{fs,scsi}_cmnd
2018-11-09 13:42 remove the legacy BLKPREP_* values Christoph Hellwig
2018-11-09 13:42 ` [PATCH 1/7] ide: cleanup ->prep_rq calling convention Christoph Hellwig
2018-11-09 13:42 ` [PATCH 2/7] scsi: simplify scsi_prep_state_check Christoph Hellwig
@ 2018-11-09 13:42 ` Christoph Hellwig
2018-11-09 13:52 ` Johannes Thumshirn
2018-11-10 0:48 ` Bart Van Assche
2018-11-09 13:42 ` [PATCH 4/7] scsi: clean up error handling in scsi_init_io Christoph Hellwig
` (5 subsequent siblings)
8 siblings, 2 replies; 23+ messages in thread
From: Christoph Hellwig @ 2018-11-09 13:42 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
This just moves the prep_to_mq calls up in preparation of further removal
of BLKPREP_* usage.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/scsi/scsi_lib.c | 45 ++++++++++++++++++++++-------------------
1 file changed, 24 insertions(+), 21 deletions(-)
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 5ecabb3e77b7..e665c25da144 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1177,7 +1177,20 @@ void scsi_init_command(struct scsi_device *dev, struct scsi_cmnd *cmd)
scsi_add_cmd_to_list(cmd);
}
-static int scsi_setup_scsi_cmnd(struct scsi_device *sdev, struct request *req)
+static inline blk_status_t prep_to_mq(int ret)
+{
+ switch (ret) {
+ case BLKPREP_OK:
+ return BLK_STS_OK;
+ case BLKPREP_DEFER:
+ return BLK_STS_RESOURCE;
+ default:
+ return BLK_STS_IOERR;
+ }
+}
+
+static blk_status_t scsi_setup_scsi_cmnd(struct scsi_device *sdev,
+ struct request *req)
{
struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
@@ -1190,7 +1203,7 @@ static int scsi_setup_scsi_cmnd(struct scsi_device *sdev, struct request *req)
if (req->bio) {
int ret = scsi_init_io(cmd);
if (unlikely(ret))
- return ret;
+ return prep_to_mq(ret);
} else {
BUG_ON(blk_rq_bytes(req));
@@ -1201,29 +1214,31 @@ static int scsi_setup_scsi_cmnd(struct scsi_device *sdev, struct request *req)
cmd->cmnd = scsi_req(req)->cmd;
cmd->transfersize = blk_rq_bytes(req);
cmd->allowed = scsi_req(req)->retries;
- return BLKPREP_OK;
+ return BLK_STS_OK;
}
/*
* Setup a normal block command. These are simple request from filesystems
* that still need to be translated to SCSI CDBs from the ULD.
*/
-static int scsi_setup_fs_cmnd(struct scsi_device *sdev, struct request *req)
+static blk_status_t scsi_setup_fs_cmnd(struct scsi_device *sdev,
+ struct request *req)
{
struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
if (unlikely(sdev->handler && sdev->handler->prep_fn)) {
int ret = sdev->handler->prep_fn(sdev, req);
if (ret != BLKPREP_OK)
- return ret;
+ return prep_to_mq(ret);
}
cmd->cmnd = scsi_req(req)->cmd = scsi_req(req)->__cmd;
memset(cmd->cmnd, 0, BLK_MAX_CDB);
- return scsi_cmd_to_driver(cmd)->init_command(cmd);
+ return prep_to_mq(scsi_cmd_to_driver(cmd)->init_command(cmd));
}
-static int scsi_setup_cmnd(struct scsi_device *sdev, struct request *req)
+static blk_status_t scsi_setup_cmnd(struct scsi_device *sdev,
+ struct request *req)
{
struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
@@ -1581,18 +1596,6 @@ static int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
return 0;
}
-static inline blk_status_t prep_to_mq(int ret)
-{
- switch (ret) {
- case BLKPREP_OK:
- return BLK_STS_OK;
- case BLKPREP_DEFER:
- return BLK_STS_RESOURCE;
- default:
- return BLK_STS_IOERR;
- }
-}
-
/* Size in bytes of the sg-list stored in the scsi-mq command-private data. */
static unsigned int scsi_mq_sgl_size(struct Scsi_Host *shost)
{
@@ -1600,7 +1603,7 @@ static unsigned int scsi_mq_sgl_size(struct Scsi_Host *shost)
sizeof(struct scatterlist);
}
-static int scsi_mq_prep_fn(struct request *req)
+static blk_status_t scsi_mq_prep_fn(struct request *req)
{
struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
struct scsi_device *sdev = req->q->queuedata;
@@ -1705,7 +1708,7 @@ static blk_status_t scsi_queue_rq(struct blk_mq_hw_ctx *hctx,
goto out_dec_target_busy;
if (!(req->rq_flags & RQF_DONTPREP)) {
- ret = prep_to_mq(scsi_mq_prep_fn(req));
+ ret = scsi_mq_prep_fn(req);
if (ret != BLK_STS_OK)
goto out_dec_host_busy;
req->rq_flags |= RQF_DONTPREP;
--
2.19.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 4/7] scsi: clean up error handling in scsi_init_io
2018-11-09 13:42 remove the legacy BLKPREP_* values Christoph Hellwig
` (2 preceding siblings ...)
2018-11-09 13:42 ` [PATCH 3/7] scsi: push blk_status_t up into scsi_setup_{fs,scsi}_cmnd Christoph Hellwig
@ 2018-11-09 13:42 ` Christoph Hellwig
2018-11-09 13:53 ` Johannes Thumshirn
2018-11-10 0:52 ` Bart Van Assche
2018-11-09 13:42 ` [PATCH 5/7] scsi: return blk_status_t from scsi_init_io and ->init_command Christoph Hellwig
` (4 subsequent siblings)
8 siblings, 2 replies; 23+ messages in thread
From: Christoph Hellwig @ 2018-11-09 13:42 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
There is no need to call scsi_mq_free_sgtables until we have actually
allocated sgtables.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/scsi/scsi_lib.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index e665c25da144..1f84e2cec57b 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1044,31 +1044,30 @@ int scsi_init_io(struct scsi_cmnd *cmd)
int error = BLKPREP_KILL;
if (WARN_ON_ONCE(!blk_rq_nr_phys_segments(rq)))
- goto err_exit;
+ return BLKPREP_KILL;
error = scsi_init_sgtable(rq, &cmd->sdb);
if (error)
- goto err_exit;
+ return error;
if (blk_bidi_rq(rq)) {
error = scsi_init_sgtable(rq->next_rq, rq->next_rq->special);
if (error)
- goto err_exit;
+ goto out_free_sgtables;
}
if (blk_integrity_rq(rq)) {
struct scsi_data_buffer *prot_sdb = cmd->prot_sdb;
int ivecs, count;
- if (prot_sdb == NULL) {
+ if (WARN_ON_ONCE(!prot_sdb)) {
/*
* This can happen if someone (e.g. multipath)
* queues a command to a device on an adapter
* that does not support DIX.
*/
- WARN_ON_ONCE(1);
error = BLKPREP_KILL;
- goto err_exit;
+ goto out_free_sgtables;
}
ivecs = blk_rq_count_integrity_sg(rq->q, rq->bio);
@@ -1076,7 +1075,7 @@ int scsi_init_io(struct scsi_cmnd *cmd)
if (sg_alloc_table_chained(&prot_sdb->table, ivecs,
prot_sdb->table.sgl)) {
error = BLKPREP_DEFER;
- goto err_exit;
+ goto out_free_sgtables;
}
count = blk_rq_map_integrity_sg(rq->q, rq->bio,
@@ -1089,7 +1088,7 @@ int scsi_init_io(struct scsi_cmnd *cmd)
}
return BLKPREP_OK;
-err_exit:
+out_free_sgtables:
scsi_mq_free_sgtables(cmd);
return error;
}
--
2.19.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 5/7] scsi: return blk_status_t from scsi_init_io and ->init_command
2018-11-09 13:42 remove the legacy BLKPREP_* values Christoph Hellwig
` (3 preceding siblings ...)
2018-11-09 13:42 ` [PATCH 4/7] scsi: clean up error handling in scsi_init_io Christoph Hellwig
@ 2018-11-09 13:42 ` Christoph Hellwig
2018-11-09 13:58 ` Johannes Thumshirn
` (2 more replies)
2018-11-09 13:42 ` [PATCH 6/7] scsi: return blk_status_t from device handler ->prep_fn Christoph Hellwig
` (3 subsequent siblings)
8 siblings, 3 replies; 23+ messages in thread
From: Christoph Hellwig @ 2018-11-09 13:42 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
Replace the old BLKRREP_* values with the BLK_STS_ ones that they are
converted to later anyway.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/scsi/scsi_lib.c | 45 ++++++++++----------
drivers/scsi/sd.c | 85 +++++++++++++++++---------------------
drivers/scsi/sd.h | 6 +--
drivers/scsi/sd_zbc.c | 10 ++---
drivers/scsi/sr.c | 12 +++---
include/scsi/scsi_cmnd.h | 2 +-
include/scsi/scsi_driver.h | 3 +-
7 files changed, 78 insertions(+), 85 deletions(-)
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 1f84e2cec57b..3e3bdeee8f14 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1005,7 +1005,8 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
scsi_io_completion_action(cmd, result);
}
-static int scsi_init_sgtable(struct request *req, struct scsi_data_buffer *sdb)
+static blk_status_t scsi_init_sgtable(struct request *req,
+ struct scsi_data_buffer *sdb)
{
int count;
@@ -1014,7 +1015,7 @@ static int scsi_init_sgtable(struct request *req, struct scsi_data_buffer *sdb)
*/
if (unlikely(sg_alloc_table_chained(&sdb->table,
blk_rq_nr_phys_segments(req), sdb->table.sgl)))
- return BLKPREP_DEFER;
+ return BLK_STS_RESOURCE;
/*
* Next, walk the list, and fill in the addresses and sizes of
@@ -1024,7 +1025,7 @@ static int scsi_init_sgtable(struct request *req, struct scsi_data_buffer *sdb)
BUG_ON(count > sdb->table.nents);
sdb->table.nents = count;
sdb->length = blk_rq_payload_bytes(req);
- return BLKPREP_OK;
+ return BLK_STS_OK;
}
/*
@@ -1034,25 +1035,25 @@ static int scsi_init_sgtable(struct request *req, struct scsi_data_buffer *sdb)
*
* Arguments: cmd - Command descriptor we wish to initialize
*
- * Returns: 0 on success
- * BLKPREP_DEFER if the failure is retryable
- * BLKPREP_KILL if the failure is fatal
+ * Returns: BLK_STS_OK on success
+ * BLK_STS_RESOURCE if the failure is retryable
+ * BLK_STS_IOERR if the failure is fatal
*/
-int scsi_init_io(struct scsi_cmnd *cmd)
+blk_status_t scsi_init_io(struct scsi_cmnd *cmd)
{
struct request *rq = cmd->request;
- int error = BLKPREP_KILL;
+ blk_status_t ret;
if (WARN_ON_ONCE(!blk_rq_nr_phys_segments(rq)))
- return BLKPREP_KILL;
+ return BLK_STS_IOERR;
- error = scsi_init_sgtable(rq, &cmd->sdb);
- if (error)
- return error;
+ ret = scsi_init_sgtable(rq, &cmd->sdb);
+ if (ret)
+ return ret;
if (blk_bidi_rq(rq)) {
- error = scsi_init_sgtable(rq->next_rq, rq->next_rq->special);
- if (error)
+ ret = scsi_init_sgtable(rq->next_rq, rq->next_rq->special);
+ if (ret)
goto out_free_sgtables;
}
@@ -1066,7 +1067,7 @@ int scsi_init_io(struct scsi_cmnd *cmd)
* queues a command to a device on an adapter
* that does not support DIX.
*/
- error = BLKPREP_KILL;
+ ret = BLK_STS_IOERR;
goto out_free_sgtables;
}
@@ -1074,7 +1075,7 @@ int scsi_init_io(struct scsi_cmnd *cmd)
if (sg_alloc_table_chained(&prot_sdb->table, ivecs,
prot_sdb->table.sgl)) {
- error = BLKPREP_DEFER;
+ ret = BLK_STS_RESOURCE;
goto out_free_sgtables;
}
@@ -1087,10 +1088,10 @@ int scsi_init_io(struct scsi_cmnd *cmd)
cmd->prot_sdb->table.nents = count;
}
- return BLKPREP_OK;
+ return BLK_STS_OK;
out_free_sgtables:
scsi_mq_free_sgtables(cmd);
- return error;
+ return ret;
}
EXPORT_SYMBOL(scsi_init_io);
@@ -1200,9 +1201,9 @@ static blk_status_t scsi_setup_scsi_cmnd(struct scsi_device *sdev,
* submit a request without an attached bio.
*/
if (req->bio) {
- int ret = scsi_init_io(cmd);
- if (unlikely(ret))
- return prep_to_mq(ret);
+ blk_status_t ret = scsi_init_io(cmd);
+ if (unlikely(ret != BLK_STS_OK))
+ return ret;
} else {
BUG_ON(blk_rq_bytes(req));
@@ -1233,7 +1234,7 @@ static blk_status_t scsi_setup_fs_cmnd(struct scsi_device *sdev,
cmd->cmnd = scsi_req(req)->cmd = scsi_req(req)->__cmd;
memset(cmd->cmnd, 0, BLK_MAX_CDB);
- return prep_to_mq(scsi_cmd_to_driver(cmd)->init_command(cmd));
+ return scsi_cmd_to_driver(cmd)->init_command(cmd);
}
static blk_status_t scsi_setup_cmnd(struct scsi_device *sdev,
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 3bb2b3351e35..4a6ed2fc8c71 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -114,7 +114,7 @@ static int sd_suspend_system(struct device *);
static int sd_suspend_runtime(struct device *);
static int sd_resume(struct device *);
static void sd_rescan(struct device *);
-static int sd_init_command(struct scsi_cmnd *SCpnt);
+static blk_status_t sd_init_command(struct scsi_cmnd *SCpnt);
static void sd_uninit_command(struct scsi_cmnd *SCpnt);
static int sd_done(struct scsi_cmnd *);
static void sd_eh_reset(struct scsi_cmnd *);
@@ -750,7 +750,7 @@ static void sd_config_discard(struct scsi_disk *sdkp, unsigned int mode)
blk_queue_flag_set(QUEUE_FLAG_DISCARD, q);
}
-static int sd_setup_unmap_cmnd(struct scsi_cmnd *cmd)
+static blk_status_t sd_setup_unmap_cmnd(struct scsi_cmnd *cmd)
{
struct scsi_device *sdp = cmd->device;
struct request *rq = cmd->request;
@@ -761,7 +761,7 @@ static int sd_setup_unmap_cmnd(struct scsi_cmnd *cmd)
rq->special_vec.bv_page = alloc_page(GFP_ATOMIC | __GFP_ZERO);
if (!rq->special_vec.bv_page)
- return BLKPREP_DEFER;
+ return BLK_STS_RESOURCE;
rq->special_vec.bv_offset = 0;
rq->special_vec.bv_len = data_len;
rq->rq_flags |= RQF_SPECIAL_PAYLOAD;
@@ -784,7 +784,8 @@ static int sd_setup_unmap_cmnd(struct scsi_cmnd *cmd)
return scsi_init_io(cmd);
}
-static int sd_setup_write_same16_cmnd(struct scsi_cmnd *cmd, bool unmap)
+static blk_status_t sd_setup_write_same16_cmnd(struct scsi_cmnd *cmd,
+ bool unmap)
{
struct scsi_device *sdp = cmd->device;
struct request *rq = cmd->request;
@@ -794,7 +795,7 @@ static int sd_setup_write_same16_cmnd(struct scsi_cmnd *cmd, bool unmap)
rq->special_vec.bv_page = alloc_page(GFP_ATOMIC | __GFP_ZERO);
if (!rq->special_vec.bv_page)
- return BLKPREP_DEFER;
+ return BLK_STS_RESOURCE;
rq->special_vec.bv_offset = 0;
rq->special_vec.bv_len = data_len;
rq->rq_flags |= RQF_SPECIAL_PAYLOAD;
@@ -814,7 +815,8 @@ static int sd_setup_write_same16_cmnd(struct scsi_cmnd *cmd, bool unmap)
return scsi_init_io(cmd);
}
-static int sd_setup_write_same10_cmnd(struct scsi_cmnd *cmd, bool unmap)
+static blk_status_t sd_setup_write_same10_cmnd(struct scsi_cmnd *cmd,
+ bool unmap)
{
struct scsi_device *sdp = cmd->device;
struct request *rq = cmd->request;
@@ -824,7 +826,7 @@ static int sd_setup_write_same10_cmnd(struct scsi_cmnd *cmd, bool unmap)
rq->special_vec.bv_page = alloc_page(GFP_ATOMIC | __GFP_ZERO);
if (!rq->special_vec.bv_page)
- return BLKPREP_DEFER;
+ return BLK_STS_RESOURCE;
rq->special_vec.bv_offset = 0;
rq->special_vec.bv_len = data_len;
rq->rq_flags |= RQF_SPECIAL_PAYLOAD;
@@ -844,7 +846,7 @@ static int sd_setup_write_same10_cmnd(struct scsi_cmnd *cmd, bool unmap)
return scsi_init_io(cmd);
}
-static int sd_setup_write_zeroes_cmnd(struct scsi_cmnd *cmd)
+static blk_status_t sd_setup_write_zeroes_cmnd(struct scsi_cmnd *cmd)
{
struct request *rq = cmd->request;
struct scsi_device *sdp = cmd->device;
@@ -862,7 +864,7 @@ static int sd_setup_write_zeroes_cmnd(struct scsi_cmnd *cmd)
}
if (sdp->no_write_same)
- return BLKPREP_INVALID;
+ return BLK_STS_TARGET;
if (sdkp->ws16 || sector > 0xffffffff || nr_sectors > 0xffff)
return sd_setup_write_same16_cmnd(cmd, false);
@@ -939,7 +941,7 @@ static void sd_config_write_same(struct scsi_disk *sdkp)
* Will set up either WRITE SAME(10) or WRITE SAME(16) depending on
* the preference indicated by the target device.
**/
-static int sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)
+static blk_status_t sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)
{
struct request *rq = cmd->request;
struct scsi_device *sdp = cmd->device;
@@ -948,10 +950,10 @@ static int sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)
sector_t sector = blk_rq_pos(rq);
unsigned int nr_sectors = blk_rq_sectors(rq);
unsigned int nr_bytes = blk_rq_bytes(rq);
- int ret;
+ blk_status_t ret;
if (sdkp->device->no_write_same)
- return BLKPREP_INVALID;
+ return BLK_STS_TARGET;
BUG_ON(bio_offset(bio) || bio_iovec(bio).bv_len != sdp->sector_size);
@@ -992,7 +994,7 @@ static int sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)
return ret;
}
-static int sd_setup_flush_cmnd(struct scsi_cmnd *cmd)
+static blk_status_t sd_setup_flush_cmnd(struct scsi_cmnd *cmd)
{
struct request *rq = cmd->request;
@@ -1005,10 +1007,10 @@ static int sd_setup_flush_cmnd(struct scsi_cmnd *cmd)
cmd->allowed = SD_MAX_RETRIES;
rq->timeout = rq->q->rq_timeout * SD_FLUSH_TIMEOUT_MULTIPLIER;
- return BLKPREP_OK;
+ return BLK_STS_OK;
}
-static int sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
+static blk_status_t sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
{
struct request *rq = SCpnt->request;
struct scsi_device *sdp = SCpnt->device;
@@ -1018,18 +1020,14 @@ static int sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
sector_t threshold;
unsigned int this_count = blk_rq_sectors(rq);
unsigned int dif, dix;
- int ret;
unsigned char protect;
+ blk_status_t ret;
ret = scsi_init_io(SCpnt);
- if (ret != BLKPREP_OK)
+ if (ret != BLK_STS_OK)
return ret;
WARN_ON_ONCE(SCpnt != rq->special);
- /* from here on until we're complete, any goto out
- * is used for a killable error condition */
- ret = BLKPREP_KILL;
-
SCSI_LOG_HLQUEUE(1,
scmd_printk(KERN_INFO, SCpnt,
"%s: block=%llu, count=%d\n",
@@ -1042,7 +1040,7 @@ static int sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
blk_rq_sectors(rq)));
SCSI_LOG_HLQUEUE(2, scmd_printk(KERN_INFO, SCpnt,
"Retry with 0x%p\n", SCpnt));
- goto out;
+ return BLK_STS_IOERR;
}
if (sdp->changed) {
@@ -1051,7 +1049,7 @@ static int sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
* the changed bit has been reset
*/
/* printk("SCSI disk has been changed or is not present. Prohibiting further I/O.\n"); */
- goto out;
+ return BLK_STS_IOERR;
}
/*
@@ -1089,31 +1087,28 @@ static int sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
if ((block & 1) || (blk_rq_sectors(rq) & 1)) {
scmd_printk(KERN_ERR, SCpnt,
"Bad block number requested\n");
- goto out;
- } else {
- block = block >> 1;
- this_count = this_count >> 1;
+ return BLK_STS_IOERR;
}
+ block = block >> 1;
+ this_count = this_count >> 1;
}
if (sdp->sector_size == 2048) {
if ((block & 3) || (blk_rq_sectors(rq) & 3)) {
scmd_printk(KERN_ERR, SCpnt,
"Bad block number requested\n");
- goto out;
- } else {
- block = block >> 2;
- this_count = this_count >> 2;
+ return BLK_STS_IOERR;
}
+ block = block >> 2;
+ this_count = this_count >> 2;
}
if (sdp->sector_size == 4096) {
if ((block & 7) || (blk_rq_sectors(rq) & 7)) {
scmd_printk(KERN_ERR, SCpnt,
"Bad block number requested\n");
- goto out;
- } else {
- block = block >> 3;
- this_count = this_count >> 3;
+ return BLK_STS_IOERR;
}
+ block = block >> 3;
+ this_count = this_count >> 3;
}
if (rq_data_dir(rq) == WRITE) {
SCpnt->cmnd[0] = WRITE_6;
@@ -1125,7 +1120,7 @@ static int sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
SCpnt->cmnd[0] = READ_6;
} else {
scmd_printk(KERN_ERR, SCpnt, "Unknown command %d\n", req_op(rq));
- goto out;
+ return BLK_STS_IOERR;
}
SCSI_LOG_HLQUEUE(2, scmd_printk(KERN_INFO, SCpnt,
@@ -1145,10 +1140,8 @@ static int sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
if (protect && sdkp->protection_type == T10_PI_TYPE2_PROTECTION) {
SCpnt->cmnd = mempool_alloc(sd_cdb_pool, GFP_ATOMIC);
- if (unlikely(SCpnt->cmnd == NULL)) {
- ret = BLKPREP_DEFER;
- goto out;
- }
+ if (unlikely(!SCpnt->cmnd))
+ return BLK_STS_RESOURCE;
SCpnt->cmd_len = SD_EXT_CDB_SIZE;
memset(SCpnt->cmnd, 0, SCpnt->cmd_len);
@@ -1216,7 +1209,7 @@ static int sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
*/
scmd_printk(KERN_ERR, SCpnt,
"FUA write on READ/WRITE(6) drive\n");
- goto out;
+ return BLK_STS_IOERR;
}
SCpnt->cmnd[1] |= (unsigned char) ((block >> 16) & 0x1f);
@@ -1240,12 +1233,10 @@ static int sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
* This indicates that the command is ready from our end to be
* queued.
*/
- ret = BLKPREP_OK;
- out:
- return ret;
+ return BLK_STS_OK;
}
-static int sd_init_command(struct scsi_cmnd *cmd)
+static blk_status_t sd_init_command(struct scsi_cmnd *cmd)
{
struct request *rq = cmd->request;
@@ -1261,7 +1252,7 @@ static int sd_init_command(struct scsi_cmnd *cmd)
case SD_LBP_ZERO:
return sd_setup_write_same10_cmnd(cmd, false);
default:
- return BLKPREP_INVALID;
+ return BLK_STS_TARGET;
}
case REQ_OP_WRITE_ZEROES:
return sd_setup_write_zeroes_cmnd(cmd);
@@ -1276,7 +1267,7 @@ static int sd_init_command(struct scsi_cmnd *cmd)
return sd_zbc_setup_reset_cmnd(cmd);
default:
WARN_ON_ONCE(1);
- return BLKPREP_KILL;
+ return BLK_STS_NOTSUPP;
}
}
diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h
index 1d63f3a23ffb..7f43e6839bce 100644
--- a/drivers/scsi/sd.h
+++ b/drivers/scsi/sd.h
@@ -271,7 +271,7 @@ static inline int sd_is_zoned(struct scsi_disk *sdkp)
extern int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buffer);
extern void sd_zbc_print_zones(struct scsi_disk *sdkp);
-extern int sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd);
+extern blk_status_t sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd);
extern void sd_zbc_complete(struct scsi_cmnd *cmd, unsigned int good_bytes,
struct scsi_sense_hdr *sshdr);
extern int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
@@ -288,9 +288,9 @@ static inline int sd_zbc_read_zones(struct scsi_disk *sdkp,
static inline void sd_zbc_print_zones(struct scsi_disk *sdkp) {}
-static inline int sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd)
+static inline blk_status_t sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd)
{
- return BLKPREP_INVALID;
+ return BLK_STS_TARGET;
}
static inline void sd_zbc_complete(struct scsi_cmnd *cmd,
diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c
index e06c48c866e4..83365b29a4d8 100644
--- a/drivers/scsi/sd_zbc.c
+++ b/drivers/scsi/sd_zbc.c
@@ -185,7 +185,7 @@ static inline sector_t sd_zbc_zone_sectors(struct scsi_disk *sdkp)
*
* Called from sd_init_command() for a REQ_OP_ZONE_RESET request.
*/
-int sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd)
+blk_status_t sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd)
{
struct request *rq = cmd->request;
struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
@@ -194,14 +194,14 @@ int sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd)
if (!sd_is_zoned(sdkp))
/* Not a zoned device */
- return BLKPREP_KILL;
+ return BLK_STS_IOERR;
if (sdkp->device->changed)
- return BLKPREP_KILL;
+ return BLK_STS_IOERR;
if (sector & (sd_zbc_zone_sectors(sdkp) - 1))
/* Unaligned request */
- return BLKPREP_KILL;
+ return BLK_STS_IOERR;
cmd->cmd_len = 16;
memset(cmd->cmnd, 0, cmd->cmd_len);
@@ -214,7 +214,7 @@ int sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd)
cmd->transfersize = 0;
cmd->allowed = 0;
- return BLKPREP_OK;
+ return BLK_STS_OK;
}
/**
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index 54dd70ae9731..38ddbbfe5f3c 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -80,7 +80,7 @@ MODULE_ALIAS_SCSI_DEVICE(TYPE_WORM);
static DEFINE_MUTEX(sr_mutex);
static int sr_probe(struct device *);
static int sr_remove(struct device *);
-static int sr_init_command(struct scsi_cmnd *SCpnt);
+static blk_status_t sr_init_command(struct scsi_cmnd *SCpnt);
static int sr_done(struct scsi_cmnd *);
static int sr_runtime_suspend(struct device *dev);
@@ -384,22 +384,22 @@ static int sr_done(struct scsi_cmnd *SCpnt)
return good_bytes;
}
-static int sr_init_command(struct scsi_cmnd *SCpnt)
+static blk_status_t sr_init_command(struct scsi_cmnd *SCpnt)
{
int block = 0, this_count, s_size;
struct scsi_cd *cd;
struct request *rq = SCpnt->request;
- int ret;
+ blk_status_t ret;
ret = scsi_init_io(SCpnt);
- if (ret != BLKPREP_OK)
+ if (ret != BLK_STS_OK)
goto out;
WARN_ON_ONCE(SCpnt != rq->special);
cd = scsi_cd(rq->rq_disk);
/* from here on until we're complete, any goto out
* is used for a killable error condition */
- ret = BLKPREP_KILL;
+ ret = BLK_STS_IOERR;
SCSI_LOG_HLQUEUE(1, scmd_printk(KERN_INFO, SCpnt,
"Doing sr request, block = %d\n", block));
@@ -516,7 +516,7 @@ static int sr_init_command(struct scsi_cmnd *SCpnt)
* This indicates that the command is ready from our end to be
* queued.
*/
- ret = BLKPREP_OK;
+ ret = BLK_STS_OK;
out:
return ret;
}
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
index c891ada3c5c2..d6fd2aba0380 100644
--- a/include/scsi/scsi_cmnd.h
+++ b/include/scsi/scsi_cmnd.h
@@ -171,7 +171,7 @@ extern void *scsi_kmap_atomic_sg(struct scatterlist *sg, int sg_count,
size_t *offset, size_t *len);
extern void scsi_kunmap_atomic_sg(void *virt);
-extern int scsi_init_io(struct scsi_cmnd *cmd);
+extern blk_status_t scsi_init_io(struct scsi_cmnd *cmd);
#ifdef CONFIG_SCSI_DMA
extern int scsi_dma_map(struct scsi_cmnd *cmd);
diff --git a/include/scsi/scsi_driver.h b/include/scsi/scsi_driver.h
index fae8b465233e..6dffa8555a39 100644
--- a/include/scsi/scsi_driver.h
+++ b/include/scsi/scsi_driver.h
@@ -2,6 +2,7 @@
#ifndef _SCSI_SCSI_DRIVER_H
#define _SCSI_SCSI_DRIVER_H
+#include <linux/blk_types.h>
#include <linux/device.h>
struct module;
@@ -13,7 +14,7 @@ struct scsi_driver {
struct device_driver gendrv;
void (*rescan)(struct device *);
- int (*init_command)(struct scsi_cmnd *);
+ blk_status_t (*init_command)(struct scsi_cmnd *);
void (*uninit_command)(struct scsi_cmnd *);
int (*done)(struct scsi_cmnd *);
int (*eh_action)(struct scsi_cmnd *, int);
--
2.19.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 6/7] scsi: return blk_status_t from device handler ->prep_fn
2018-11-09 13:42 remove the legacy BLKPREP_* values Christoph Hellwig
` (4 preceding siblings ...)
2018-11-09 13:42 ` [PATCH 5/7] scsi: return blk_status_t from scsi_init_io and ->init_command Christoph Hellwig
@ 2018-11-09 13:42 ` Christoph Hellwig
2018-11-09 14:01 ` Johannes Thumshirn
2018-11-10 0:59 ` Bart Van Assche
2018-11-09 13:42 ` [PATCH 7/7] block: remove the BLKPREP_* values Christoph Hellwig
` (2 subsequent siblings)
8 siblings, 2 replies; 23+ messages in thread
From: Christoph Hellwig @ 2018-11-09 13:42 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
Remove the last use of the old BLKPREP_* values, which get converted
to BLK_STS_* later anyway.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/scsi/device_handler/scsi_dh_alua.c | 21 +++++++++++----------
drivers/scsi/device_handler/scsi_dh_emc.c | 8 ++++----
drivers/scsi/device_handler/scsi_dh_hp_sw.c | 7 +++----
drivers/scsi/device_handler/scsi_dh_rdac.c | 7 +++----
drivers/scsi/scsi_lib.c | 18 +++---------------
include/scsi/scsi_dh.h | 2 +-
6 files changed, 25 insertions(+), 38 deletions(-)
diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c
index 12dc7100bb4c..d7ac498ba35a 100644
--- a/drivers/scsi/device_handler/scsi_dh_alua.c
+++ b/drivers/scsi/device_handler/scsi_dh_alua.c
@@ -1071,28 +1071,29 @@ static void alua_check(struct scsi_device *sdev, bool force)
* Fail I/O to all paths not in state
* active/optimized or active/non-optimized.
*/
-static int alua_prep_fn(struct scsi_device *sdev, struct request *req)
+static blk_status_t alua_prep_fn(struct scsi_device *sdev, struct request *req)
{
struct alua_dh_data *h = sdev->handler_data;
struct alua_port_group *pg;
unsigned char state = SCSI_ACCESS_STATE_OPTIMAL;
- int ret = BLKPREP_OK;
rcu_read_lock();
pg = rcu_dereference(h->pg);
if (pg)
state = pg->state;
rcu_read_unlock();
- if (state == SCSI_ACCESS_STATE_TRANSITIONING)
- ret = BLKPREP_DEFER;
- else if (state != SCSI_ACCESS_STATE_OPTIMAL &&
- state != SCSI_ACCESS_STATE_ACTIVE &&
- state != SCSI_ACCESS_STATE_LBA) {
- ret = BLKPREP_KILL;
+
+ switch (state) {
+ case SCSI_ACCESS_STATE_OPTIMAL:
+ case SCSI_ACCESS_STATE_ACTIVE:
+ case SCSI_ACCESS_STATE_LBA:
+ return BLK_STS_OK;
+ case SCSI_ACCESS_STATE_TRANSITIONING:
+ return BLK_STS_RESOURCE;
+ default:
req->rq_flags |= RQF_QUIET;
+ return BLK_STS_IOERR;
}
- return ret;
-
}
static void alua_rescan(struct scsi_device *sdev)
diff --git a/drivers/scsi/device_handler/scsi_dh_emc.c b/drivers/scsi/device_handler/scsi_dh_emc.c
index 95c47909a58f..bea8e13febb6 100644
--- a/drivers/scsi/device_handler/scsi_dh_emc.c
+++ b/drivers/scsi/device_handler/scsi_dh_emc.c
@@ -341,17 +341,17 @@ static int clariion_check_sense(struct scsi_device *sdev,
return SCSI_RETURN_NOT_HANDLED;
}
-static int clariion_prep_fn(struct scsi_device *sdev, struct request *req)
+static blk_status_t clariion_prep_fn(struct scsi_device *sdev,
+ struct request *req)
{
struct clariion_dh_data *h = sdev->handler_data;
- int ret = BLKPREP_OK;
if (h->lun_state != CLARIION_LUN_OWNED) {
- ret = BLKPREP_KILL;
req->rq_flags |= RQF_QUIET;
+ return BLK_STS_IOERR;
}
- return ret;
+ return BLK_STS_OK;
}
static int clariion_std_inquiry(struct scsi_device *sdev,
diff --git a/drivers/scsi/device_handler/scsi_dh_hp_sw.c b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
index e65a0ebb4b54..80129b033855 100644
--- a/drivers/scsi/device_handler/scsi_dh_hp_sw.c
+++ b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
@@ -172,17 +172,16 @@ static int hp_sw_start_stop(struct hp_sw_dh_data *h)
return rc;
}
-static int hp_sw_prep_fn(struct scsi_device *sdev, struct request *req)
+static blk_status_t hp_sw_prep_fn(struct scsi_device *sdev, struct request *req)
{
struct hp_sw_dh_data *h = sdev->handler_data;
- int ret = BLKPREP_OK;
if (h->path_state != HP_SW_PATH_ACTIVE) {
- ret = BLKPREP_KILL;
req->rq_flags |= RQF_QUIET;
+ return BLK_STS_IOERR;
}
- return ret;
+ return BLK_STS_OK;
}
/*
diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c
index d27fabae8ddd..65f1fe343c64 100644
--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ b/drivers/scsi/device_handler/scsi_dh_rdac.c
@@ -642,17 +642,16 @@ static int rdac_activate(struct scsi_device *sdev,
return 0;
}
-static int rdac_prep_fn(struct scsi_device *sdev, struct request *req)
+static blk_status_t rdac_prep_fn(struct scsi_device *sdev, struct request *req)
{
struct rdac_dh_data *h = sdev->handler_data;
- int ret = BLKPREP_OK;
if (h->state != RDAC_STATE_ACTIVE) {
- ret = BLKPREP_KILL;
req->rq_flags |= RQF_QUIET;
+ return BLK_STS_IOERR;
}
- return ret;
+ return BLK_STS_OK;
}
static int rdac_check_sense(struct scsi_device *sdev,
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 3e3bdeee8f14..5d83a162d03b 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1177,18 +1177,6 @@ void scsi_init_command(struct scsi_device *dev, struct scsi_cmnd *cmd)
scsi_add_cmd_to_list(cmd);
}
-static inline blk_status_t prep_to_mq(int ret)
-{
- switch (ret) {
- case BLKPREP_OK:
- return BLK_STS_OK;
- case BLKPREP_DEFER:
- return BLK_STS_RESOURCE;
- default:
- return BLK_STS_IOERR;
- }
-}
-
static blk_status_t scsi_setup_scsi_cmnd(struct scsi_device *sdev,
struct request *req)
{
@@ -1227,9 +1215,9 @@ static blk_status_t scsi_setup_fs_cmnd(struct scsi_device *sdev,
struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
if (unlikely(sdev->handler && sdev->handler->prep_fn)) {
- int ret = sdev->handler->prep_fn(sdev, req);
- if (ret != BLKPREP_OK)
- return prep_to_mq(ret);
+ blk_status_t ret = sdev->handler->prep_fn(sdev, req);
+ if (ret != BLK_STS_OK)
+ return ret;
}
cmd->cmnd = scsi_req(req)->cmd = scsi_req(req)->__cmd;
diff --git a/include/scsi/scsi_dh.h b/include/scsi/scsi_dh.h
index c7bba2b24849..a862dc23c68d 100644
--- a/include/scsi/scsi_dh.h
+++ b/include/scsi/scsi_dh.h
@@ -69,7 +69,7 @@ struct scsi_device_handler {
int (*attach)(struct scsi_device *);
void (*detach)(struct scsi_device *);
int (*activate)(struct scsi_device *, activate_complete, void *);
- int (*prep_fn)(struct scsi_device *, struct request *);
+ blk_status_t (*prep_fn)(struct scsi_device *, struct request *);
int (*set_params)(struct scsi_device *, const char *);
void (*rescan)(struct scsi_device *);
};
--
2.19.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 7/7] block: remove the BLKPREP_* values.
2018-11-09 13:42 remove the legacy BLKPREP_* values Christoph Hellwig
` (5 preceding siblings ...)
2018-11-09 13:42 ` [PATCH 6/7] scsi: return blk_status_t from device handler ->prep_fn Christoph Hellwig
@ 2018-11-09 13:42 ` Christoph Hellwig
2018-11-09 14:01 ` Johannes Thumshirn
2018-11-10 0:59 ` Bart Van Assche
2018-11-09 15:51 ` remove the legacy " Jens Axboe
2018-11-10 15:17 ` Jens Axboe
8 siblings, 2 replies; 23+ messages in thread
From: Christoph Hellwig @ 2018-11-09 13:42 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
Unused now.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
include/linux/blkdev.h | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 9b1f470cc784..55597948868b 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -778,16 +778,6 @@ static inline unsigned int blk_queue_depth(struct request_queue *q)
return q->nr_requests;
}
-/*
- * q->prep_rq_fn return values
- */
-enum {
- BLKPREP_OK, /* serve it */
- BLKPREP_KILL, /* fatal error, kill, return -EIO */
- BLKPREP_DEFER, /* leave on queue */
- BLKPREP_INVALID, /* invalid command, kill, return -EREMOTEIO */
-};
-
extern unsigned long blk_max_low_pfn, blk_max_pfn;
/*
--
2.19.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH 3/7] scsi: push blk_status_t up into scsi_setup_{fs,scsi}_cmnd
2018-11-09 13:42 ` [PATCH 3/7] scsi: push blk_status_t up into scsi_setup_{fs,scsi}_cmnd Christoph Hellwig
@ 2018-11-09 13:52 ` Johannes Thumshirn
2018-11-10 0:48 ` Bart Van Assche
1 sibling, 0 replies; 23+ messages in thread
From: Johannes Thumshirn @ 2018-11-09 13:52 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
Look good,
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
--
Johannes Thumshirn SUSE Labs
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 4/7] scsi: clean up error handling in scsi_init_io
2018-11-09 13:42 ` [PATCH 4/7] scsi: clean up error handling in scsi_init_io Christoph Hellwig
@ 2018-11-09 13:53 ` Johannes Thumshirn
2018-11-10 0:52 ` Bart Van Assche
1 sibling, 0 replies; 23+ messages in thread
From: Johannes Thumshirn @ 2018-11-09 13:53 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
Looks good,
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
--
Johannes Thumshirn SUSE Labs
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 5/7] scsi: return blk_status_t from scsi_init_io and ->init_command
2018-11-09 13:42 ` [PATCH 5/7] scsi: return blk_status_t from scsi_init_io and ->init_command Christoph Hellwig
@ 2018-11-09 13:58 ` Johannes Thumshirn
2018-11-10 0:56 ` Bart Van Assche
2018-11-10 0:57 ` Bart Van Assche
2 siblings, 0 replies; 23+ messages in thread
From: Johannes Thumshirn @ 2018-11-09 13:58 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
Looks good,
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
--
Johannes Thumshirn SUSE Labs
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 6/7] scsi: return blk_status_t from device handler ->prep_fn
2018-11-09 13:42 ` [PATCH 6/7] scsi: return blk_status_t from device handler ->prep_fn Christoph Hellwig
@ 2018-11-09 14:01 ` Johannes Thumshirn
2018-11-10 0:59 ` Bart Van Assche
1 sibling, 0 replies; 23+ messages in thread
From: Johannes Thumshirn @ 2018-11-09 14:01 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
Looks good,
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
--
Johannes Thumshirn SUSE Labs
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 7/7] block: remove the BLKPREP_* values.
2018-11-09 13:42 ` [PATCH 7/7] block: remove the BLKPREP_* values Christoph Hellwig
@ 2018-11-09 14:01 ` Johannes Thumshirn
2018-11-10 0:59 ` Bart Van Assche
1 sibling, 0 replies; 23+ messages in thread
From: Johannes Thumshirn @ 2018-11-09 14:01 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
So long and thanks for all the fish,
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
--
Johannes Thumshirn SUSE Labs
jthumshirn@suse.de +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: remove the legacy BLKPREP_* values
2018-11-09 13:42 remove the legacy BLKPREP_* values Christoph Hellwig
` (6 preceding siblings ...)
2018-11-09 13:42 ` [PATCH 7/7] block: remove the BLKPREP_* values Christoph Hellwig
@ 2018-11-09 15:51 ` Jens Axboe
2018-11-10 15:17 ` Jens Axboe
8 siblings, 0 replies; 23+ messages in thread
From: Jens Axboe @ 2018-11-09 15:51 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: linux-block, linux-ide, linux-scsi
On 11/9/18 6:42 AM, Christoph Hellwig wrote:
> Hi Jens,
>
> this series gets rid of the old BLKPREP_* values from the legacy block
> layer in favor of always using a blk_status_t (or a bool in one case).
Series looks good to me, tested the IDE bits too. I'm assuming we'll
take this through the block tree with the dependencies, I'll wait
a bit to let folks take a closer look.
--
Jens Axboe
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 1/7] ide: cleanup ->prep_rq calling convention
2018-11-09 13:42 ` [PATCH 1/7] ide: cleanup ->prep_rq calling convention Christoph Hellwig
@ 2018-11-10 0:46 ` Bart Van Assche
0 siblings, 0 replies; 23+ messages in thread
From: Bart Van Assche @ 2018-11-10 0:46 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
On Fri, 2018-11-09 at 14:42 +0100, Christoph Hellwig wrote:
> The return value is just used as a binary yes/no decicsion, so switch
> it to a bool instead of the old BLKPREP_* values returned as an int.
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 2/7] scsi: simplify scsi_prep_state_check
2018-11-09 13:42 ` [PATCH 2/7] scsi: simplify scsi_prep_state_check Christoph Hellwig
@ 2018-11-10 0:47 ` Bart Van Assche
0 siblings, 0 replies; 23+ messages in thread
From: Bart Van Assche @ 2018-11-10 0:47 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
On Fri, 2018-11-09 at 14:42 +0100, Christoph Hellwig wrote:
> Return a blk_status_t directly, and make the code a little more compact
> by handling the fast path in the caller.
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 3/7] scsi: push blk_status_t up into scsi_setup_{fs,scsi}_cmnd
2018-11-09 13:42 ` [PATCH 3/7] scsi: push blk_status_t up into scsi_setup_{fs,scsi}_cmnd Christoph Hellwig
2018-11-09 13:52 ` Johannes Thumshirn
@ 2018-11-10 0:48 ` Bart Van Assche
1 sibling, 0 replies; 23+ messages in thread
From: Bart Van Assche @ 2018-11-10 0:48 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
On Fri, 2018-11-09 at 14:42 +0100, Christoph Hellwig wrote:
> This just moves the prep_to_mq calls up in preparation of further removal
> of BLKPREP_* usage.
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 4/7] scsi: clean up error handling in scsi_init_io
2018-11-09 13:42 ` [PATCH 4/7] scsi: clean up error handling in scsi_init_io Christoph Hellwig
2018-11-09 13:53 ` Johannes Thumshirn
@ 2018-11-10 0:52 ` Bart Van Assche
1 sibling, 0 replies; 23+ messages in thread
From: Bart Van Assche @ 2018-11-10 0:52 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
On Fri, 2018-11-09 at 14:42 +0100, Christoph Hellwig wrote:
> There is no need to call scsi_mq_free_sgtables until we have actually
> allocated sgtables.
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 5/7] scsi: return blk_status_t from scsi_init_io and ->init_command
2018-11-09 13:42 ` [PATCH 5/7] scsi: return blk_status_t from scsi_init_io and ->init_command Christoph Hellwig
2018-11-09 13:58 ` Johannes Thumshirn
@ 2018-11-10 0:56 ` Bart Van Assche
2018-11-10 0:57 ` Bart Van Assche
2 siblings, 0 replies; 23+ messages in thread
From: Bart Van Assche @ 2018-11-10 0:56 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
On Fri, 2018-11-09 at 14:42 +0100, Christoph Hellwig wrote:
> Replace the old BLKRREP_* values with the BLK_STS_ ones that they are
> converted to later anyway.
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 5/7] scsi: return blk_status_t from scsi_init_io and ->init_command
2018-11-09 13:42 ` [PATCH 5/7] scsi: return blk_status_t from scsi_init_io and ->init_command Christoph Hellwig
2018-11-09 13:58 ` Johannes Thumshirn
2018-11-10 0:56 ` Bart Van Assche
@ 2018-11-10 0:57 ` Bart Van Assche
2 siblings, 0 replies; 23+ messages in thread
From: Bart Van Assche @ 2018-11-10 0:57 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
On Fri, 2018-11-09 at 14:42 +0100, Christoph Hellwig wrote:
> Replace the old BLKRREP_* values with the BLK_STS_ ones that they are
> converted to later anyway.
Just noticed a typo: I think BLKRREP_ should be changed into BLKPREP_.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 6/7] scsi: return blk_status_t from device handler ->prep_fn
2018-11-09 13:42 ` [PATCH 6/7] scsi: return blk_status_t from device handler ->prep_fn Christoph Hellwig
2018-11-09 14:01 ` Johannes Thumshirn
@ 2018-11-10 0:59 ` Bart Van Assche
1 sibling, 0 replies; 23+ messages in thread
From: Bart Van Assche @ 2018-11-10 0:59 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
On Fri, 2018-11-09 at 14:42 +0100, Christoph Hellwig wrote:
> Remove the last use of the old BLKPREP_* values, which get converted
> to BLK_STS_* later anyway.
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 7/7] block: remove the BLKPREP_* values.
2018-11-09 13:42 ` [PATCH 7/7] block: remove the BLKPREP_* values Christoph Hellwig
2018-11-09 14:01 ` Johannes Thumshirn
@ 2018-11-10 0:59 ` Bart Van Assche
1 sibling, 0 replies; 23+ messages in thread
From: Bart Van Assche @ 2018-11-10 0:59 UTC (permalink / raw)
To: Christoph Hellwig, Jens Axboe; +Cc: linux-block, linux-ide, linux-scsi
On Fri, 2018-11-09 at 14:42 +0100, Christoph Hellwig wrote:
> Unused now.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> include/linux/blkdev.h | 10 ----------
> 1 file changed, 10 deletions(-)
>
> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> index 9b1f470cc784..55597948868b 100644
> --- a/include/linux/blkdev.h
> +++ b/include/linux/blkdev.h
> @@ -778,16 +778,6 @@ static inline unsigned int blk_queue_depth(struct request_queue *q)
> return q->nr_requests;
> }
>
> -/*
> - * q->prep_rq_fn return values
> - */
> -enum {
> - BLKPREP_OK, /* serve it */
> - BLKPREP_KILL, /* fatal error, kill, return -EIO */
> - BLKPREP_DEFER, /* leave on queue */
> - BLKPREP_INVALID, /* invalid command, kill, return -EREMOTEIO */
> -};
> -
> extern unsigned long blk_max_low_pfn, blk_max_pfn;
>
> /*
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: remove the legacy BLKPREP_* values
2018-11-09 13:42 remove the legacy BLKPREP_* values Christoph Hellwig
` (7 preceding siblings ...)
2018-11-09 15:51 ` remove the legacy " Jens Axboe
@ 2018-11-10 15:17 ` Jens Axboe
8 siblings, 0 replies; 23+ messages in thread
From: Jens Axboe @ 2018-11-10 15:17 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: linux-block, linux-ide, linux-scsi
On 11/9/18 6:42 AM, Christoph Hellwig wrote:
> Hi Jens,
>
> this series gets rid of the old BLKPREP_* values from the legacy block
> layer in favor of always using a blk_status_t (or a bool in one case).
Applied
--
Jens Axboe
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2018-11-10 15:17 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-09 13:42 remove the legacy BLKPREP_* values Christoph Hellwig
2018-11-09 13:42 ` [PATCH 1/7] ide: cleanup ->prep_rq calling convention Christoph Hellwig
2018-11-10 0:46 ` Bart Van Assche
2018-11-09 13:42 ` [PATCH 2/7] scsi: simplify scsi_prep_state_check Christoph Hellwig
2018-11-10 0:47 ` Bart Van Assche
2018-11-09 13:42 ` [PATCH 3/7] scsi: push blk_status_t up into scsi_setup_{fs,scsi}_cmnd Christoph Hellwig
2018-11-09 13:52 ` Johannes Thumshirn
2018-11-10 0:48 ` Bart Van Assche
2018-11-09 13:42 ` [PATCH 4/7] scsi: clean up error handling in scsi_init_io Christoph Hellwig
2018-11-09 13:53 ` Johannes Thumshirn
2018-11-10 0:52 ` Bart Van Assche
2018-11-09 13:42 ` [PATCH 5/7] scsi: return blk_status_t from scsi_init_io and ->init_command Christoph Hellwig
2018-11-09 13:58 ` Johannes Thumshirn
2018-11-10 0:56 ` Bart Van Assche
2018-11-10 0:57 ` Bart Van Assche
2018-11-09 13:42 ` [PATCH 6/7] scsi: return blk_status_t from device handler ->prep_fn Christoph Hellwig
2018-11-09 14:01 ` Johannes Thumshirn
2018-11-10 0:59 ` Bart Van Assche
2018-11-09 13:42 ` [PATCH 7/7] block: remove the BLKPREP_* values Christoph Hellwig
2018-11-09 14:01 ` Johannes Thumshirn
2018-11-10 0:59 ` Bart Van Assche
2018-11-09 15:51 ` remove the legacy " Jens Axboe
2018-11-10 15:17 ` Jens Axboe
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.