* Brian King (brking@xxxxxxxxxxxxxxxxxx) wrote: > > If attempting to abort requests due to a fail fail timeout > or error handling while the link is down, we cannot send > an abort out on the fabric. We can, however, send a cancel > to the VIOS. This fixes ibmvfc to send a cancel in this > case to prevent error handling from failing and/or > escalating. > > Signed-off-by: Brian King <brking@xxxxxxxxxxxxxxxxxx> Acked-by: Robert Jennings <rcj@xxxxxxxxxxxxxxxxxx> > --- > > drivers/scsi/ibmvscsi/ibmvfc.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > > diff -puN drivers/scsi/ibmvscsi/ibmvfc.c~ibmvfc_cancel_when_link_down drivers/scsi/ibmvscsi/ibmvfc.c > --- linux-2.6/drivers/scsi/ibmvscsi/ibmvfc.c~ibmvfc_cancel_when_link_down 2013-01-23 08:12:09.000000000 -0600 > +++ linux-2.6-bjking1/drivers/scsi/ibmvscsi/ibmvfc.c 2013-01-23 09:18:46.000000000 -0600 > @@ -2179,7 +2179,7 @@ static int ibmvfc_cancel_all(struct scsi > return 0; > } > > - if (vhost->state == IBMVFC_ACTIVE) { > + if (vhost->logged_in) { > evt = ibmvfc_get_event(vhost); > ibmvfc_init_event(evt, ibmvfc_sync_completion, IBMVFC_MAD_FORMAT); > > @@ -2190,7 +2190,10 @@ static int ibmvfc_cancel_all(struct scsi > tmf->common.length = sizeof(*tmf); > tmf->scsi_id = rport->port_id; > int_to_scsilun(sdev->lun, &tmf->lun); > - tmf->flags = (type | IBMVFC_TMF_LUA_VALID); > + if (vhost->state == IBMVFC_ACTIVE) > + tmf->flags = (type | IBMVFC_TMF_LUA_VALID); > + else > + tmf->flags = IBMVFC_TMF_LUA_VALID; > tmf->cancel_key = (unsigned long)sdev->hostdata; > tmf->my_cancel_key = (unsigned long)starget->hostdata; > > @@ -2389,7 +2392,7 @@ static int ibmvfc_eh_abort_handler(struc > { > struct scsi_device *sdev = cmd->device; > struct ibmvfc_host *vhost = shost_priv(sdev->host); > - int cancel_rc, block_rc, abort_rc = 0; > + int cancel_rc, block_rc; > int rc = FAILED; > > ENTER; > @@ -2397,11 +2400,11 @@ static int ibmvfc_eh_abort_handler(struc > ibmvfc_wait_while_resetting(vhost); > if (block_rc != FAST_IO_FAIL) { > cancel_rc = ibmvfc_cancel_all(sdev, IBMVFC_TMF_ABORT_TASK_SET); > - abort_rc = ibmvfc_abort_task_set(sdev); > + ibmvfc_abort_task_set(sdev); > } else > cancel_rc = ibmvfc_cancel_all(sdev, 0); > > - if (!cancel_rc && !abort_rc) > + if (!cancel_rc) > rc = ibmvfc_wait_for_ops(vhost, sdev, ibmvfc_match_lun); > > if (block_rc == FAST_IO_FAIL && rc != FAILED) > _ -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html