diff options
author | Stefan Haberland <stefan.haberland@de.ibm.com> | 2013-02-19 03:30:05 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2013-02-28 03:37:07 -0500 |
commit | ea4da6eae393dbbb26800700a38cf1b32c9109fd (patch) | |
tree | 8acb543e8e02901269729a826ff4c5bd093f8768 | |
parent | 17ea345a474925ad0da2ad5a8791cd5443301667 (diff) |
s390/dasd: fix unresponsive device after all channel paths were lost
Failfast bit was set incorrectly.
Use set_bit to enable failfast.
Reviewed-by: Stefan Weinhuber <wein@de.ibm.com>
Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r-- | drivers/s390/block/dasd_eckd.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index 33f26bfa62f2..6999fd919e94 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c | |||
@@ -1573,7 +1573,10 @@ static void dasd_eckd_do_validate_server(struct work_struct *work) | |||
1573 | { | 1573 | { |
1574 | struct dasd_device *device = container_of(work, struct dasd_device, | 1574 | struct dasd_device *device = container_of(work, struct dasd_device, |
1575 | kick_validate); | 1575 | kick_validate); |
1576 | if (dasd_eckd_validate_server(device, DASD_CQR_FLAGS_FAILFAST) | 1576 | unsigned long flags = 0; |
1577 | |||
1578 | set_bit(DASD_CQR_FLAGS_FAILFAST, &flags); | ||
1579 | if (dasd_eckd_validate_server(device, flags) | ||
1577 | == -EAGAIN) { | 1580 | == -EAGAIN) { |
1578 | /* schedule worker again if failed */ | 1581 | /* schedule worker again if failed */ |
1579 | schedule_work(&device->kick_validate); | 1582 | schedule_work(&device->kick_validate); |
@@ -4157,6 +4160,7 @@ static int dasd_eckd_restore_device(struct dasd_device *device) | |||
4157 | int rc; | 4160 | int rc; |
4158 | struct dasd_uid temp_uid; | 4161 | struct dasd_uid temp_uid; |
4159 | unsigned long flags; | 4162 | unsigned long flags; |
4163 | unsigned long cqr_flags = 0; | ||
4160 | 4164 | ||
4161 | private = (struct dasd_eckd_private *) device->private; | 4165 | private = (struct dasd_eckd_private *) device->private; |
4162 | 4166 | ||
@@ -4178,7 +4182,9 @@ static int dasd_eckd_restore_device(struct dasd_device *device) | |||
4178 | rc = dasd_alias_make_device_known_to_lcu(device); | 4182 | rc = dasd_alias_make_device_known_to_lcu(device); |
4179 | if (rc) | 4183 | if (rc) |
4180 | return rc; | 4184 | return rc; |
4181 | dasd_eckd_validate_server(device, DASD_CQR_FLAGS_FAILFAST); | 4185 | |
4186 | set_bit(DASD_CQR_FLAGS_FAILFAST, &cqr_flags); | ||
4187 | dasd_eckd_validate_server(device, cqr_flags); | ||
4182 | 4188 | ||
4183 | /* RE-Read Configuration Data */ | 4189 | /* RE-Read Configuration Data */ |
4184 | dasd_eckd_read_conf(device); | 4190 | dasd_eckd_read_conf(device); |