diff options
author | Christof Schmitt <christof.schmitt@de.ibm.com> | 2008-12-25 07:38:50 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-12-25 07:39:01 -0500 |
commit | bd43a42b7e9880f426ed715f18bb4f963b7352af (patch) | |
tree | 1c58540f9df8d6b45f932b77830bf21eb47dabf9 /drivers/s390/scsi/zfcp_aux.c | |
parent | 6bcac508fbebdca52f5a55d69a4316997ecb5391 (diff) |
[S390] zfcp: Report microcode level through service level interface
Register zfcp with the new /proc/service_level interface to report the
FCP microcode level. When the adapter goes offline or a channel path
disappears, zfcp unregisters, since the microcode version might change
and zfcp does not know about it.
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/scsi/zfcp_aux.c')
-rw-r--r-- | drivers/s390/scsi/zfcp_aux.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index 3d4e3e3f3fc0..fc4a28953824 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c | |||
@@ -26,6 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | #include <linux/miscdevice.h> | 28 | #include <linux/miscdevice.h> |
29 | #include <linux/seq_file.h> | ||
29 | #include "zfcp_ext.h" | 30 | #include "zfcp_ext.h" |
30 | 31 | ||
31 | static char *device; | 32 | static char *device; |
@@ -436,6 +437,16 @@ static void _zfcp_status_read_scheduler(struct work_struct *work) | |||
436 | stat_work)); | 437 | stat_work)); |
437 | } | 438 | } |
438 | 439 | ||
440 | static void zfcp_print_sl(struct seq_file *m, struct service_level *sl) | ||
441 | { | ||
442 | struct zfcp_adapter *adapter = | ||
443 | container_of(sl, struct zfcp_adapter, service_level); | ||
444 | |||
445 | seq_printf(m, "zfcp: %s microcode level %x\n", | ||
446 | dev_name(&adapter->ccw_device->dev), | ||
447 | adapter->fsf_lic_version); | ||
448 | } | ||
449 | |||
439 | /** | 450 | /** |
440 | * zfcp_adapter_enqueue - enqueue a new adapter to the list | 451 | * zfcp_adapter_enqueue - enqueue a new adapter to the list |
441 | * @ccw_device: pointer to the struct cc_device | 452 | * @ccw_device: pointer to the struct cc_device |
@@ -500,6 +511,8 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device) | |||
500 | INIT_WORK(&adapter->stat_work, _zfcp_status_read_scheduler); | 511 | INIT_WORK(&adapter->stat_work, _zfcp_status_read_scheduler); |
501 | INIT_WORK(&adapter->scan_work, _zfcp_scan_ports_later); | 512 | INIT_WORK(&adapter->scan_work, _zfcp_scan_ports_later); |
502 | 513 | ||
514 | adapter->service_level.seq_print = zfcp_print_sl; | ||
515 | |||
503 | /* mark adapter unusable as long as sysfs registration is not complete */ | 516 | /* mark adapter unusable as long as sysfs registration is not complete */ |
504 | atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status); | 517 | atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status); |
505 | 518 | ||