Skip to content

Commit 08f7843

Browse files
Bart Van Asschemartinkpetersen
authored andcommitted
scsi: Make scsi_mq_prep_fn() call scsi_init_command()
This patch reduces code duplication. There are two functional changes in this patch: - It causes scsi_mq_prep_fn() to clear driver-private command data, just like the already upstream commit 1bad6c4 ("scsi: zero per-cmd private driver data for each MQ I/O"). - The initialization of .prot_sdb is moved from scsi_mq_prep_fn() into scsi_init_request(). [mkp: applied by hand] Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Cc: Hannes Reinecke <hare@suse.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1 parent be4c186 commit 08f7843

File tree

1 file changed

+9
-16
lines changed

1 file changed

+9
-16
lines changed

drivers/scsi/scsi_lib.c

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1871,36 +1871,21 @@ static int scsi_mq_prep_fn(struct request *req)
18711871
struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
18721872
struct scsi_device *sdev = req->q->queuedata;
18731873
struct Scsi_Host *shost = sdev->host;
1874-
unsigned char *sense_buf = cmd->sense_buffer;
1875-
unsigned int unchecked_isa_dma = cmd->flags & SCMD_UNCHECKED_ISA_DMA;
18761874
struct scatterlist *sg;
18771875

1878-
/* zero out the cmd, except for the embedded scsi_request */
1879-
memset((char *)cmd + sizeof(cmd->req), 0,
1880-
sizeof(*cmd) - sizeof(cmd->req) + shost->hostt->cmd_size);
1876+
scsi_init_command(sdev, cmd);
18811877

18821878
req->special = cmd;
18831879

18841880
cmd->request = req;
1885-
cmd->device = sdev;
1886-
cmd->sense_buffer = sense_buf;
1887-
cmd->flags = unchecked_isa_dma;
18881881

18891882
cmd->tag = req->tag;
1890-
18911883
cmd->prot_op = SCSI_PROT_NORMAL;
18921884

1893-
INIT_LIST_HEAD(&cmd->list);
1894-
INIT_DELAYED_WORK(&cmd->abort_work, scmd_eh_abort_handler);
1895-
cmd->jiffies_at_alloc = jiffies;
1896-
1897-
scsi_add_cmd_to_list(cmd);
1898-
18991885
sg = (void *)cmd + sizeof(struct scsi_cmnd) + shost->hostt->cmd_size;
19001886
cmd->sdb.table.sgl = sg;
19011887

19021888
if (scsi_host_get_prot(shost)) {
1903-
cmd->prot_sdb = (void *)sg + scsi_mq_sgl_size(shost);
19041889
memset(cmd->prot_sdb, 0, sizeof(struct scsi_data_buffer));
19051890

19061891
cmd->prot_sdb->table.sgl =
@@ -2026,6 +2011,7 @@ static int scsi_init_request(struct blk_mq_tag_set *set, struct request *rq,
20262011
struct Scsi_Host *shost = set->driver_data;
20272012
const bool unchecked_isa_dma = shost->unchecked_isa_dma;
20282013
struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq);
2014+
struct scatterlist *sg;
20292015

20302016
if (unchecked_isa_dma)
20312017
cmd->flags |= SCMD_UNCHECKED_ISA_DMA;
@@ -2034,6 +2020,13 @@ static int scsi_init_request(struct blk_mq_tag_set *set, struct request *rq,
20342020
if (!cmd->sense_buffer)
20352021
return -ENOMEM;
20362022
cmd->req.sense = cmd->sense_buffer;
2023+
2024+
if (scsi_host_get_prot(shost)) {
2025+
sg = (void *)cmd + sizeof(struct scsi_cmnd) +
2026+
shost->hostt->cmd_size;
2027+
cmd->prot_sdb = (void *)sg + scsi_mq_sgl_size(shost);
2028+
}
2029+
20372030
return 0;
20382031
}
20392032

0 commit comments

Comments
 (0)