mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
[SCSI] qla2xxx: Do not allow ELS Passthru commands for ISP23xx adapters
Signed-off-by: Harish Zunjarrao <harish.zunjarrao@qlogic.com> Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
9bc4f4fb44
commit
08f71e090d
1 changed files with 24 additions and 13 deletions
|
@ -229,7 +229,7 @@ static int
|
||||||
qla2x00_process_els(struct fc_bsg_job *bsg_job)
|
qla2x00_process_els(struct fc_bsg_job *bsg_job)
|
||||||
{
|
{
|
||||||
struct fc_rport *rport;
|
struct fc_rport *rport;
|
||||||
fc_port_t *fcport;
|
fc_port_t *fcport = NULL;
|
||||||
struct Scsi_Host *host;
|
struct Scsi_Host *host;
|
||||||
scsi_qla_host_t *vha;
|
scsi_qla_host_t *vha;
|
||||||
struct qla_hw_data *ha;
|
struct qla_hw_data *ha;
|
||||||
|
@ -240,6 +240,29 @@ qla2x00_process_els(struct fc_bsg_job *bsg_job)
|
||||||
uint16_t nextlid = 0;
|
uint16_t nextlid = 0;
|
||||||
struct srb_ctx *els;
|
struct srb_ctx *els;
|
||||||
|
|
||||||
|
if (bsg_job->request->msgcode == FC_BSG_RPT_ELS) {
|
||||||
|
rport = bsg_job->rport;
|
||||||
|
fcport = *(fc_port_t **) rport->dd_data;
|
||||||
|
host = rport_to_shost(rport);
|
||||||
|
vha = shost_priv(host);
|
||||||
|
ha = vha->hw;
|
||||||
|
type = "FC_BSG_RPT_ELS";
|
||||||
|
} else {
|
||||||
|
host = bsg_job->shost;
|
||||||
|
vha = shost_priv(host);
|
||||||
|
ha = vha->hw;
|
||||||
|
type = "FC_BSG_HST_ELS_NOLOGIN";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* pass through is supported only for ISP 4Gb or higher */
|
||||||
|
if (!IS_FWI2_CAPABLE(ha)) {
|
||||||
|
DEBUG2(qla_printk(KERN_INFO, ha,
|
||||||
|
"scsi(%ld):ELS passthru not supported for ISP23xx based "
|
||||||
|
"adapters\n", vha->host_no));
|
||||||
|
rval = -EPERM;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
/* Multiple SG's are not supported for ELS requests */
|
/* Multiple SG's are not supported for ELS requests */
|
||||||
if (bsg_job->request_payload.sg_cnt > 1 ||
|
if (bsg_job->request_payload.sg_cnt > 1 ||
|
||||||
bsg_job->reply_payload.sg_cnt > 1) {
|
bsg_job->reply_payload.sg_cnt > 1) {
|
||||||
|
@ -254,13 +277,6 @@ qla2x00_process_els(struct fc_bsg_job *bsg_job)
|
||||||
|
|
||||||
/* ELS request for rport */
|
/* ELS request for rport */
|
||||||
if (bsg_job->request->msgcode == FC_BSG_RPT_ELS) {
|
if (bsg_job->request->msgcode == FC_BSG_RPT_ELS) {
|
||||||
rport = bsg_job->rport;
|
|
||||||
fcport = *(fc_port_t **) rport->dd_data;
|
|
||||||
host = rport_to_shost(rport);
|
|
||||||
vha = shost_priv(host);
|
|
||||||
ha = vha->hw;
|
|
||||||
type = "FC_BSG_RPT_ELS";
|
|
||||||
|
|
||||||
/* make sure the rport is logged in,
|
/* make sure the rport is logged in,
|
||||||
* if not perform fabric login
|
* if not perform fabric login
|
||||||
*/
|
*/
|
||||||
|
@ -272,11 +288,6 @@ qla2x00_process_els(struct fc_bsg_job *bsg_job)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
host = bsg_job->shost;
|
|
||||||
vha = shost_priv(host);
|
|
||||||
ha = vha->hw;
|
|
||||||
type = "FC_BSG_HST_ELS_NOLOGIN";
|
|
||||||
|
|
||||||
/* Allocate a dummy fcport structure, since functions
|
/* Allocate a dummy fcport structure, since functions
|
||||||
* preparing the IOCB and mailbox command retrieves port
|
* preparing the IOCB and mailbox command retrieves port
|
||||||
* specific information from fcport structure. For Host based
|
* specific information from fcport structure. For Host based
|
||||||
|
|
Loading…
Reference in a new issue