The mpt3sas driver requires a reserved command space to handle
SCSI passthrough commands.

Signed-off-by: Hannes Reinecke <h...@suse.com>
---
 drivers/scsi/mpt3sas/mpt3sas_base.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c 
b/drivers/scsi/mpt3sas/mpt3sas_base.c
index e9470a3..97189ad 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -2360,6 +2360,8 @@ struct scsiio_tracker *
        } else {
                u32 unique_tag = blk_mq_unique_tag(scmd->request);
                u16 tag = blk_mq_unique_tag_to_tag(unique_tag);
+
+               WARN_ON(tag < ioc->shost->reserved_cmds);
                request = scsi_cmd_priv(scmd);
                smid = tag + 1;
        }
@@ -3521,7 +3523,8 @@ void mpt3sas_base_clear_st(struct MPT3SAS_ADAPTER *ioc,
        /* set the scsi host can_queue depth
         * with some internal commands that could be outstanding
         */
-       ioc->shost->can_queue = ioc->scsiio_depth - INTERNAL_SCSIIO_CMDS_COUNT;
+       ioc->shost->reserved_cmds = INTERNAL_SCSIIO_CMDS_COUNT;
+       ioc->shost->can_queue = ioc->scsiio_depth - ioc->shost->reserved_cmds;
        dinitprintk(ioc, pr_info(MPT3SAS_FMT
                "scsi host: can_queue depth (%d)\n",
                ioc->name, ioc->shost->can_queue));
-- 
1.8.5.6

Reply via email to