diff options
Diffstat (limited to 'drivers/scsi/ibmvscsi/ibmvfc.c')
| -rw-r--r-- | drivers/scsi/ibmvscsi/ibmvfc.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c index a1a511bdec8c..ed1e728763a2 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.c +++ b/drivers/scsi/ibmvscsi/ibmvfc.c | |||
| @@ -1573,9 +1573,6 @@ static int ibmvfc_queuecommand(struct scsi_cmnd *cmnd, | |||
| 1573 | vfc_cmd->resp_len = sizeof(vfc_cmd->rsp); | 1573 | vfc_cmd->resp_len = sizeof(vfc_cmd->rsp); |
| 1574 | vfc_cmd->cancel_key = (unsigned long)cmnd->device->hostdata; | 1574 | vfc_cmd->cancel_key = (unsigned long)cmnd->device->hostdata; |
| 1575 | vfc_cmd->tgt_scsi_id = rport->port_id; | 1575 | vfc_cmd->tgt_scsi_id = rport->port_id; |
| 1576 | if ((rport->supported_classes & FC_COS_CLASS3) && | ||
| 1577 | (fc_host_supported_classes(vhost->host) & FC_COS_CLASS3)) | ||
| 1578 | vfc_cmd->flags = IBMVFC_CLASS_3_ERR; | ||
| 1579 | vfc_cmd->iu.xfer_len = scsi_bufflen(cmnd); | 1576 | vfc_cmd->iu.xfer_len = scsi_bufflen(cmnd); |
| 1580 | int_to_scsilun(cmnd->device->lun, &vfc_cmd->iu.lun); | 1577 | int_to_scsilun(cmnd->device->lun, &vfc_cmd->iu.lun); |
| 1581 | memcpy(vfc_cmd->iu.cdb, cmnd->cmnd, cmnd->cmd_len); | 1578 | memcpy(vfc_cmd->iu.cdb, cmnd->cmnd, cmnd->cmd_len); |
| @@ -3266,6 +3263,7 @@ static int ibmvfc_alloc_target(struct ibmvfc_host *vhost, u64 scsi_id) | |||
| 3266 | return -ENOMEM; | 3263 | return -ENOMEM; |
| 3267 | } | 3264 | } |
| 3268 | 3265 | ||
| 3266 | memset(tgt, 0, sizeof(*tgt)); | ||
| 3269 | tgt->scsi_id = scsi_id; | 3267 | tgt->scsi_id = scsi_id; |
| 3270 | tgt->new_scsi_id = scsi_id; | 3268 | tgt->new_scsi_id = scsi_id; |
| 3271 | tgt->vhost = vhost; | 3269 | tgt->vhost = vhost; |
| @@ -3576,9 +3574,18 @@ static void ibmvfc_log_ae(struct ibmvfc_host *vhost, int events) | |||
| 3576 | static void ibmvfc_tgt_add_rport(struct ibmvfc_target *tgt) | 3574 | static void ibmvfc_tgt_add_rport(struct ibmvfc_target *tgt) |
| 3577 | { | 3575 | { |
| 3578 | struct ibmvfc_host *vhost = tgt->vhost; | 3576 | struct ibmvfc_host *vhost = tgt->vhost; |
| 3579 | struct fc_rport *rport; | 3577 | struct fc_rport *rport = tgt->rport; |
| 3580 | unsigned long flags; | 3578 | unsigned long flags; |
| 3581 | 3579 | ||
| 3580 | if (rport) { | ||
| 3581 | tgt_dbg(tgt, "Setting rport roles\n"); | ||
| 3582 | fc_remote_port_rolechg(rport, tgt->ids.roles); | ||
| 3583 | spin_lock_irqsave(vhost->host->host_lock, flags); | ||
| 3584 | ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); | ||
| 3585 | spin_unlock_irqrestore(vhost->host->host_lock, flags); | ||
| 3586 | return; | ||
| 3587 | } | ||
| 3588 | |||
| 3582 | tgt_dbg(tgt, "Adding rport\n"); | 3589 | tgt_dbg(tgt, "Adding rport\n"); |
| 3583 | rport = fc_remote_port_add(vhost->host, 0, &tgt->ids); | 3590 | rport = fc_remote_port_add(vhost->host, 0, &tgt->ids); |
| 3584 | spin_lock_irqsave(vhost->host->host_lock, flags); | 3591 | spin_lock_irqsave(vhost->host->host_lock, flags); |
