[SCSI] qla2xxx: Update FCP priority information to firmware before sending IOs
The FCP priority info was not being updated properly in certain situations. Here are the changes that needs to be done to take care of this issue: 1. No need to check fcport->state for FCS_UNCONFIGURED in qla24xx_update_fcport_fcp_prio(), since an invalid loop id check is already performed which is sufficient. 2. Add the missing qla24xx_update_fcport_fcp_prio() function call within qla2x00_update_fcport() function, so that the priority info is updated on every port addition or change. 3. Perform proper adapter types checking. 4. Other changes, associated with DEBUG/printk's and parameter passing. Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com> Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
4052bd5723
commit
21090cbe95
@ -103,7 +103,7 @@ qla24xx_proc_fcp_prio_cfg_cmd(struct fc_bsg_job *bsg_job)
|
||||
|
||||
bsg_job->reply->reply_payload_rcv_len = 0;
|
||||
|
||||
if (!IS_QLA24XX_TYPE(ha) || !IS_QLA25XX(ha)) {
|
||||
if (!(IS_QLA24XX_TYPE(ha) || IS_QLA25XX(ha))) {
|
||||
ret = -EINVAL;
|
||||
goto exit_fcp_prio_cfg;
|
||||
}
|
||||
|
@ -70,6 +70,7 @@ extern void qla2x00_async_adisc_done(struct scsi_qla_host *, fc_port_t *,
|
||||
extern void qla2x00_async_tm_cmd_done(struct scsi_qla_host *, fc_port_t *,
|
||||
struct srb_iocb *);
|
||||
extern void *qla2x00_alloc_iocbs(struct scsi_qla_host *, srb_t *);
|
||||
extern int qla24xx_update_fcport_fcp_prio(scsi_qla_host_t *, fc_port_t *);
|
||||
|
||||
extern fc_port_t *
|
||||
qla2x00_alloc_fcport(scsi_qla_host_t *, gfp_t );
|
||||
|
@ -2928,6 +2928,7 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
|
||||
fcport->flags &= ~(FCF_LOGIN_NEEDED | FCF_ASYNC_SENT);
|
||||
|
||||
qla2x00_iidma_fcport(vha, fcport);
|
||||
qla24xx_update_fcport_fcp_prio(vha, fcport);
|
||||
qla2x00_reg_remote_port(vha, fcport);
|
||||
atomic_set(&fcport->state, FCS_ONLINE);
|
||||
}
|
||||
@ -5473,7 +5474,7 @@ qla81xx_update_fw_options(scsi_qla_host_t *vha)
|
||||
* the tag (priority) value is returned.
|
||||
*
|
||||
* Input:
|
||||
* ha = adapter block po
|
||||
* vha = scsi host structure pointer.
|
||||
* fcport = port structure pointer.
|
||||
*
|
||||
* Return:
|
||||
@ -5567,7 +5568,7 @@ qla24xx_get_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport)
|
||||
* Activates fcp priority for the logged in fc port
|
||||
*
|
||||
* Input:
|
||||
* ha = adapter block pointer.
|
||||
* vha = scsi host structure pointer.
|
||||
* fcp = port structure pointer.
|
||||
*
|
||||
* Return:
|
||||
@ -5577,25 +5578,24 @@ qla24xx_get_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport)
|
||||
* Kernel context.
|
||||
*/
|
||||
int
|
||||
qla24xx_update_fcport_fcp_prio(scsi_qla_host_t *ha, fc_port_t *fcport)
|
||||
qla24xx_update_fcport_fcp_prio(scsi_qla_host_t *vha, fc_port_t *fcport)
|
||||
{
|
||||
int ret;
|
||||
uint8_t priority;
|
||||
uint16_t mb[5];
|
||||
|
||||
if (atomic_read(&fcport->state) == FCS_UNCONFIGURED ||
|
||||
fcport->port_type != FCT_TARGET ||
|
||||
fcport->loop_id == FC_NO_LOOP_ID)
|
||||
if (fcport->port_type != FCT_TARGET ||
|
||||
fcport->loop_id == FC_NO_LOOP_ID)
|
||||
return QLA_FUNCTION_FAILED;
|
||||
|
||||
priority = qla24xx_get_fcp_prio(ha, fcport);
|
||||
ret = qla24xx_set_fcp_prio(ha, fcport->loop_id, priority, mb);
|
||||
priority = qla24xx_get_fcp_prio(vha, fcport);
|
||||
ret = qla24xx_set_fcp_prio(vha, fcport->loop_id, priority, mb);
|
||||
if (ret == QLA_SUCCESS)
|
||||
fcport->fcp_prio = priority;
|
||||
else
|
||||
DEBUG2(printk(KERN_WARNING
|
||||
"scsi(%ld): Unable to activate fcp priority, "
|
||||
" ret=0x%x\n", ha->host_no, ret));
|
||||
" ret=0x%x\n", vha->host_no, ret));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -4125,7 +4125,7 @@ qla24xx_set_fcp_prio(scsi_qla_host_t *vha, uint16_t loop_id, uint16_t priority,
|
||||
return QLA_FUNCTION_FAILED;
|
||||
|
||||
DEBUG11(printk(KERN_INFO
|
||||
"%s(%ld): entered.\n", __func__, ha->host_no));
|
||||
"%s(%ld): entered.\n", __func__, vha->host_no));
|
||||
|
||||
mcp->mb[0] = MBC_PORT_PARAMS;
|
||||
mcp->mb[1] = loop_id;
|
||||
|
Loading…
Reference in New Issue
Block a user