aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio
diff options
context:
space:
mode:
authorPeter Oberparleiter <peter.oberparleiter@de.ibm.com>2009-09-11 04:28:14 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2009-09-11 04:29:36 -0400
commit1f1148c88ad37c87f14d2153416a605bf0aeaf74 (patch)
tree6cb4895b83a2b3314c415c077decf147f894a15e /drivers/s390/cio
parent0d03d59d9b31cd1e33b7e46a80b6fef66244b1f2 (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.c13
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 */
736static 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 */
736static void 747static 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,