On 10/20/23 12:06, Karan Tilak Kumar wrote:
@@ -405,22 +388,20 @@ static inline int fnic_queue_wq_copy_desc(struct fnic *fnic, * Routine to send a scsi cdb * Called with host_lock held and interrupts disabled. */
This patch removes the DEF_SCSI_QCMD() invocation so the above comment is now wrong. Please fix it.
-static int fnic_queuecommand_lck(struct scsi_cmnd *sc) +static int fnic_queuecommand_lck(struct scsi_cmnd *sc, uint32_t mqtag, uint16_t hwq)
Because this patch removes the DEF_SCSI_QCMD() invocation, the name of the fnic_queuecommand_lck() function is now incorrect. Please remove the _lck() suffix.
-DEF_SCSI_QCMD(fnic_queuecommand) +int fnic_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *sc) +{ + struct request *const rq = scsi_cmd_to_rq(sc); + int rc; + struct fc_lport *lp = shost_priv(sc->device->host); + struct fnic *fnic = lport_priv(lp); + uint32_t mqtag = 0; + int tag = 0; + uint16_t hwq = 0; + + mqtag = blk_mq_unique_tag(rq); + hwq = blk_mq_unique_tag_to_hwq(mqtag); + tag = blk_mq_unique_tag_to_tag(mqtag); + + if (tag >= fnic->fnic_max_tag_id) { + FNIC_SCSI_DBG(KERN_ERR, fnic->lport->host, + "fnic<%d>: %s: Out of range tag: 0x%x\n", + fnic->fnic_num, __func__, tag); + sc->result = DID_ERROR << 16; + scsi_done(sc); + return 0; + } + + rc = fnic_queuecommand_lck(sc, mqtag, hwq); + return rc; +}
The code guarded by "if (tag >= fnic->fnic_max_tag_id)" should be removed and instead the driver should ensure that tags never exceed the fnic->fnic_max_tag_id limit.
Please also remove the local variable 'rc'. Thanks, Bart.