scsi-mq: init sg in scsi_init_io.
PATCH 4/6 scsi-mq: init sg in scsi_init_io.
Make scsi-mq support blk-pc-command.
Signed-off-by Jianpeng Ma <[email protected]>
--- drivers/scsi/scsi_lib.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/scsi/scsi_lib.c +3 -1
@@ -1059,9 +1059,11 @@ int scsi_init_io(struct scsi_cmnd *cmd, gfp_t gfp_mask)/* * Use pre-allocation of cmd->sdb scatterlists with scsi-mq.. */ -//FIXME: scsi-mq dif descriptor init within scsi_init_io if (rq->mq_ctx) {BUG_ON (rq->nr_phys_segments >SCSI_MAX_SG_SEGMENTS ); + cmd->sdb.table.sgl = cmd->mq_sgl; + cmd->sdb.table.nents = rq->nr_phys_segments; +sg_init_table (cmd->sdb.table.sgl, rq->nr_phys_segments);scsi_init_sgtable (rq, &cmd->sdb);return BLKPREP_OK ; }
Signature · 1 line
1.7.10.4
Quoted 14 lines · majianpeng
Make scsi-mq support blk-pc-command.
Signed-off-by Jianpeng Ma <[email protected]>--- drivers/scsi/scsi_lib.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)drivers/scsi/scsi_lib.c +0
-0@@ -1059,9 +1059,11 @@ int scsi_init_io(struct scsi_cmnd *cmd, gfp_t gfp_mask)/* * Use pre-allocation of cmd->sdb scatterlists with scsi-mq..
drivers/scsi/scsi_lib.c int scsi_init_io(struct scsi_cmnd *cmd, gfp_t gfp_mask) · line 1069
Quoted 10 lines
drivers/scsi/scsi_lib.c +3
-1*/ -//FIXME: scsi-mq dif descriptor init within scsi_init_io if (rq->mq_ctx) {BUG_ON (rq->nr_phys_segments >SCSI_MAX_SG_SEGMENTS ); + cmd->sdb.table.sgl = cmd->mq_sgl; + cmd->sdb.table.nents = rq->nr_phys_segments; +sg_init_table (cmd->sdb.table.sgl, rq->nr_phys_segments);scsi_init_sgtable (rq, &cmd->sdb);return BLKPREP_OK ; }
Doesn't seem to be necessary for TYPE_ROM either..?
So requests of REQ_TYPE_BLOCK_PC for TYPE_ROM with scsi-mq are having their sc->sdb.table setup from pre-allocated SGLs at the start of scsi_mq_queue_rq(), before q->prep_rq_fn() -> sr_prep_fn() -> scsi_setup_blk_pc_cmnd() is called.
--nab