diff options
author | Peter Oberparleiter <peter.oberparleiter@de.ibm.com> | 2009-09-11 04:28:14 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2009-09-11 04:29:36 -0400 |
commit | 1f1148c88ad37c87f14d2153416a605bf0aeaf74 (patch) | |
tree | 6cb4895b83a2b3314c415c077decf147f894a15e /drivers/s390/cio | |
parent | 0d03d59d9b31cd1e33b7e46a80b6fef66244b1f2 (diff) |
[S390] cio: fix ineffective verify event
Path verification events occurring for offline devices are currently
ignored. As a result, offline devices are not removed, even though
they might no longer be accessible (for example because the last path
to the device was varied offline). Fix this by scheduling a status
evaluation for the affected subchannel when a path verification event
occurs.
Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/cio')
-rw-r--r-- | drivers/s390/cio/device_fsm.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/s390/cio/device_fsm.c b/drivers/s390/cio/device_fsm.c index 3db88c52d287..b8bdb0d75426 100644 --- a/drivers/s390/cio/device_fsm.c +++ b/drivers/s390/cio/device_fsm.c | |||
@@ -731,6 +731,17 @@ static void ccw_device_generic_notoper(struct ccw_device *cdev, | |||
731 | } | 731 | } |
732 | 732 | ||
733 | /* | 733 | /* |
734 | * Handle path verification event in offline state. | ||
735 | */ | ||
736 | static void ccw_device_offline_verify(struct ccw_device *cdev, | ||
737 | enum dev_event dev_event) | ||
738 | { | ||
739 | struct subchannel *sch = to_subchannel(cdev->dev.parent); | ||
740 | |||
741 | css_schedule_eval(sch->schid); | ||
742 | } | ||
743 | |||
744 | /* | ||
734 | * Handle path verification event. | 745 | * Handle path verification event. |
735 | */ | 746 | */ |
736 | static void | 747 | static void |
@@ -1149,7 +1160,7 @@ fsm_func_t *dev_jumptable[NR_DEV_STATES][NR_DEV_EVENTS] = { | |||
1149 | [DEV_EVENT_NOTOPER] = ccw_device_generic_notoper, | 1160 | [DEV_EVENT_NOTOPER] = ccw_device_generic_notoper, |
1150 | [DEV_EVENT_INTERRUPT] = ccw_device_offline_irq, | 1161 | [DEV_EVENT_INTERRUPT] = ccw_device_offline_irq, |
1151 | [DEV_EVENT_TIMEOUT] = ccw_device_nop, | 1162 | [DEV_EVENT_TIMEOUT] = ccw_device_nop, |
1152 | [DEV_EVENT_VERIFY] = ccw_device_nop, | 1163 | [DEV_EVENT_VERIFY] = ccw_device_offline_verify, |
1153 | }, | 1164 | }, |
1154 | [DEV_STATE_VERIFY] = { | 1165 | [DEV_STATE_VERIFY] = { |
1155 | [DEV_EVENT_NOTOPER] = ccw_device_generic_notoper, | 1166 | [DEV_EVENT_NOTOPER] = ccw_device_generic_notoper, |