aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Haberland <stefan.haberland@de.ibm.com>2013-02-19 03:30:05 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2013-02-28 03:37:07 -0500
commitea4da6eae393dbbb26800700a38cf1b32c9109fd (patch)
tree8acb543e8e02901269729a826ff4c5bd093f8768
parent17ea345a474925ad0da2ad5a8791cd5443301667 (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.c10
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);