aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorSven Schuetz <sven@linux.vnet.ibm.com>2008-06-10 12:20:59 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-07-12 09:22:26 -0400
commit85a82392fe6fe7620d8fe0eb694f926cefe62e1f (patch)
treef05a7ad547ca8eed52fa4cca1a424a881b7b733b /drivers/s390
parent553448f6c4838a1e4bed2bc9301c748278d7d9ce (diff)
[SCSI] zfcp: Add port_state attribute to sysfs
The sysfs attribute /sys/class/fc_host/hostX/port_state was not set by zfcp so far. Now, the appropriate members of the fc_function_template struct are set during its initialziation. The first is a boolean to show the port state. The second is a function pointer to the function zfcp_get_host_port_state, which reads the port state from our adapter status bits and calls fc_host_port_state with the approriate port state afterwards. Signed-off-by: Sven Schuetz <sven@linux.vnet.ibm.com> Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/scsi/zfcp_scsi.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c
index a96e5c3b9460..446fb1da25df 100644
--- a/drivers/s390/scsi/zfcp_scsi.c
+++ b/drivers/s390/scsi/zfcp_scsi.c
@@ -704,6 +704,23 @@ zfcp_reset_fc_host_stats(struct Scsi_Host *shost)
704 } 704 }
705} 705}
706 706
707static void zfcp_get_host_port_state(struct Scsi_Host *shost)
708{
709 struct zfcp_adapter *adapter =
710 (struct zfcp_adapter *)shost->hostdata[0];
711 int status = atomic_read(&adapter->status);
712
713 if ((status & ZFCP_STATUS_COMMON_RUNNING) &&
714 !(status & ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED))
715 fc_host_port_state(shost) = FC_PORTSTATE_ONLINE;
716 else if (status & ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED)
717 fc_host_port_state(shost) = FC_PORTSTATE_LINKDOWN;
718 else if (status & ZFCP_STATUS_COMMON_ERP_FAILED)
719 fc_host_port_state(shost) = FC_PORTSTATE_ERROR;
720 else
721 fc_host_port_state(shost) = FC_PORTSTATE_UNKNOWN;
722}
723
707static void zfcp_set_rport_dev_loss_tmo(struct fc_rport *rport, u32 timeout) 724static void zfcp_set_rport_dev_loss_tmo(struct fc_rport *rport, u32 timeout)
708{ 725{
709 rport->dev_loss_tmo = timeout; 726 rport->dev_loss_tmo = timeout;
@@ -726,6 +743,8 @@ struct fc_function_template zfcp_transport_functions = {
726 .get_fc_host_stats = zfcp_get_fc_host_stats, 743 .get_fc_host_stats = zfcp_get_fc_host_stats,
727 .reset_fc_host_stats = zfcp_reset_fc_host_stats, 744 .reset_fc_host_stats = zfcp_reset_fc_host_stats,
728 .set_rport_dev_loss_tmo = zfcp_set_rport_dev_loss_tmo, 745 .set_rport_dev_loss_tmo = zfcp_set_rport_dev_loss_tmo,
746 .get_host_port_state = zfcp_get_host_port_state,
747 .show_host_port_state = 1,
729 /* no functions registered for following dynamic attributes but 748 /* no functions registered for following dynamic attributes but
730 directly set by LLDD */ 749 directly set by LLDD */
731 .show_host_port_type = 1, 750 .show_host_port_type = 1,