[SCSI] qla2xxx: do not reset dev_loss_tmo in slave callout
authorMike Christie <michaelc@cs.wisc.edu>
Fri, 6 Aug 2010 08:02:38 +0000 (03:02 -0500)
committerJames Bottomley <James.Bottomley@suse.de>
Sun, 5 Sep 2010 16:45:25 +0000 (13:45 -0300)
This fixes a bug where the driver was resetting the
rport dev_loss_tmo when devices were added by adding
support for the get_host_def_dev_loss_tmo callout.

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/qla2xxx/qla_attr.c
drivers/scsi/qla2xxx/qla_os.c

index 420238c..679a432 100644 (file)
@@ -1529,6 +1529,15 @@ qla2x00_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout)
                rport->dev_loss_tmo = 1;
 }
 
+static void
+qla2x00_get_host_def_loss_tmo(struct Scsi_Host *shost)
+{
+       scsi_qla_host_t *vha = shost_priv(shost);
+       struct qla_hw_data *ha = vha->hw;
+
+       fc_host_def_dev_loss_tmo(shost) = ha->port_down_retry_count;
+}
+
 static void
 qla2x00_dev_loss_tmo_callbk(struct fc_rport *rport)
 {
@@ -1903,6 +1912,7 @@ struct fc_function_template qla2xxx_transport_functions = {
        .show_host_fabric_name = 1,
        .get_host_port_state = qla2x00_get_host_port_state,
        .show_host_port_state = 1,
+       .get_host_def_dev_loss_tmo = qla2x00_get_host_def_loss_tmo,
 
        .dd_fcrport_size = sizeof(struct fc_port *),
        .show_rport_supported_classes = 1,
@@ -1949,6 +1959,7 @@ struct fc_function_template qla2xxx_transport_vport_functions = {
        .show_host_fabric_name = 1,
        .get_host_port_state = qla2x00_get_host_port_state,
        .show_host_port_state = 1,
+       .get_host_def_dev_loss_tmo = qla2x00_get_host_def_loss_tmo,
 
        .dd_fcrport_size = sizeof(struct fc_port *),
        .show_rport_supported_classes = 1,
index 8c80b49..30b0522 100644 (file)
@@ -1295,17 +1295,12 @@ static int
 qla2xxx_slave_configure(struct scsi_device *sdev)
 {
        scsi_qla_host_t *vha = shost_priv(sdev->host);
-       struct qla_hw_data *ha = vha->hw;
-       struct fc_rport *rport = starget_to_rport(sdev->sdev_target);
        struct req_que *req = vha->req;
 
        if (sdev->tagged_supported)
                scsi_activate_tcq(sdev, req->max_q_depth);
        else
                scsi_deactivate_tcq(sdev, req->max_q_depth);
-
-       rport->dev_loss_tmo = ha->port_down_retry_count;
-
        return 0;
 }