On Dec 7, 2012, at 8:51 AM, Hannes Reinecke <h...@suse.de> wrote:
> 
> diff --git a/drivers/scsi/bfa/bfad_im.c b/drivers/scsi/bfa/bfad_im.c
> index 8f92732..d6555aa 100644
> --- a/drivers/scsi/bfa/bfad_im.c
> +++ b/drivers/scsi/bfa/bfad_im.c
> @@ -793,7 +793,7 @@ struct scsi_host_template bfad_im_scsi_host_template = {
>       .queuecommand = bfad_im_queuecommand,
>       .eh_abort_handler = bfad_im_abort_handler,
>       .eh_device_reset_handler = bfad_im_reset_lun_handler,
> -     .eh_bus_reset_handler = bfad_im_reset_bus_handler,
> +     .eh_bus_reset_handler = fc_eh_reset_it_nexus_handler,
> 
>       .slave_alloc = bfad_im_slave_alloc,
>       .slave_configure = bfad_im_slave_configure,
> @@ -815,7 +815,7 @@ struct scsi_host_template bfad_im_vport_template = {
>       .queuecommand = bfad_im_queuecommand,
>       .eh_abort_handler = bfad_im_abort_handler,
>       .eh_device_reset_handler = bfad_im_reset_lun_handler,
> -     .eh_bus_reset_handler = bfad_im_reset_bus_handler,
> +     .eh_bus_reset_handler = fc_eh_reset_it_nexus_handler,
> 
>       .slave_alloc = bfad_im_slave_alloc,
>       .slave_configure = bfad_im_slave_configure,
> diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
> index 60e5a17..2fd67c1 100644
> --- a/drivers/scsi/lpfc/lpfc_scsi.c
> +++ b/drivers/scsi/lpfc/lpfc_scsi.c
> @@ -5136,7 +5136,7 @@ struct scsi_host_template lpfc_template = {
>       .eh_abort_handler       = lpfc_abort_handler,
>       .eh_device_reset_handler = lpfc_device_reset_handler,
>       .eh_target_reset_handler = lpfc_target_reset_handler,
> -     .eh_bus_reset_handler   = lpfc_bus_reset_handler,
> +     .eh_bus_reset_handler   = fc_eh_reset_it_nexus_handler,
>       .eh_host_reset_handler  = lpfc_host_reset_handler,
>       .slave_alloc            = lpfc_slave_alloc,
>       .slave_configure        = lpfc_slave_configure,
> @@ -5160,7 +5160,7 @@ struct scsi_host_template lpfc_vport_template = {
>       .eh_abort_handler       = lpfc_abort_handler,
>       .eh_device_reset_handler = lpfc_device_reset_handler,
>       .eh_target_reset_handler = lpfc_target_reset_handler,
> -     .eh_bus_reset_handler   = lpfc_bus_reset_handler,
> +     .eh_bus_reset_handler   = fc_eh_reset_it_nexus_handler,
>       .slave_alloc            = lpfc_slave_alloc,
>       .slave_configure        = lpfc_slave_configure,
>       .slave_destroy          = lpfc_slave_destroy,
> diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
> index 3a1661c..5d59284 100644
> --- a/drivers/scsi/qla2xxx/qla_os.c
> +++ b/drivers/scsi/qla2xxx/qla_os.c
> @@ -246,7 +246,7 @@ struct scsi_host_template qla2xxx_driver_template = {
>       .eh_abort_handler       = qla2xxx_eh_abort,
>       .eh_device_reset_handler = qla2xxx_eh_device_reset,
>       .eh_target_reset_handler = qla2xxx_eh_target_reset,
> -     .eh_bus_reset_handler   = qla2xxx_eh_bus_reset,
> +     .eh_bus_reset_handler   = fc_eh_reset_it_nexus_handler,
>       .eh_host_reset_handler  = qla2xxx_eh_host_reset,


Hey,

One other comment. I do not think we can use the bus reset callout as is. I 
think for all fc drivers but mptfc, the channel is always 0. All targets on 
those hosts have the same channel value, and it seems  this code in 
scsi_error.c:scsi_eh_bus_reset():

                rtn = scsi_try_bus_reset(chan_scmd);
                if (rtn == SUCCESS || rtn == FAST_IO_FAIL) {
                        list_for_each_entry_safe(scmd, next, work_q, eh_entry) {
                                if (channel == scmd_channel(scmd)) {

would end up matching all the commands on the host instead of just the commands 
on the specific target that was passed into scsi_try_bus_reset if SUCCESS or 
FAST_IO_FAIL was returned by scsi_try_bus_reset. If there were 2 faulty targets 
on a host, you would end up calling fc_eh_reset_it_nexus_handler on only 1.--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to