]> Pileus Git - ~andy/linux/blobdiff - drivers/scsi/fnic/fnic_main.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[~andy/linux] / drivers / scsi / fnic / fnic_main.c
index 9eb7a9ebccaeb4f2ec6e011a08fcb4990cc334b5..bb63f1a1f808ed52a3b4c46523c0f88c076afbc5 100644 (file)
@@ -80,8 +80,6 @@ static struct libfc_function_template fnic_transport_template = {
 static int fnic_slave_alloc(struct scsi_device *sdev)
 {
        struct fc_rport *rport = starget_to_rport(scsi_target(sdev));
-       struct fc_lport *lp = shost_priv(sdev->host);
-       struct fnic *fnic = lport_priv(lp);
 
        sdev->tagged_supported = 1;
 
@@ -89,8 +87,6 @@ static int fnic_slave_alloc(struct scsi_device *sdev)
                return -ENXIO;
 
        scsi_activate_tcq(sdev, FNIC_DFLT_QUEUE_DEPTH);
-       rport->dev_loss_tmo = fnic->config.port_down_timeout / 1000;
-
        return 0;
 }
 
@@ -113,6 +109,15 @@ static struct scsi_host_template fnic_host_template = {
        .shost_attrs = fnic_attrs,
 };
 
+static void
+fnic_set_rport_dev_loss_tmo(struct fc_rport *rport, u32 timeout)
+{
+       if (timeout)
+               rport->dev_loss_tmo = timeout;
+       else
+               rport->dev_loss_tmo = 1;
+}
+
 static void fnic_get_host_speed(struct Scsi_Host *shost);
 static struct scsi_transport_template *fnic_fc_transport;
 static struct fc_host_statistics *fnic_get_stats(struct Scsi_Host *);
@@ -140,6 +145,7 @@ static struct fc_function_template fnic_fc_functions = {
        .show_starget_port_name = 1,
        .show_starget_port_id = 1,
        .show_rport_dev_loss_tmo = 1,
+       .set_rport_dev_loss_tmo = fnic_set_rport_dev_loss_tmo,
        .issue_fc_host_lip = fnic_reset,
        .get_fc_host_stats = fnic_get_stats,
        .dd_fcrport_size = sizeof(struct fc_rport_libfc_priv),
@@ -706,6 +712,7 @@ static int __devinit fnic_probe(struct pci_dev *pdev,
                goto err_out_free_exch_mgr;
        }
        fc_host_maxframe_size(lp->host) = lp->mfs;
+       fc_host_dev_loss_tmo(lp->host) = fnic->config.port_down_timeout / 1000;
 
        sprintf(fc_host_symbolic_name(lp->host),
                DRV_NAME " v" DRV_VERSION " over %s", fnic->name);