Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Stefan Haberland and committed by
Martin Schwidefsky
ea4da6ea 17ea345a

+8 -2
+8 -2
drivers/s390/block/dasd_eckd.c
··· 1573 1573 { 1574 1574 struct dasd_device *device = container_of(work, struct dasd_device, 1575 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 1580 == -EAGAIN) { 1578 1581 /* schedule worker again if failed */ 1579 1582 schedule_work(&device->kick_validate); ··· 4160 4157 int rc; 4161 4158 struct dasd_uid temp_uid; 4162 4159 unsigned long flags; 4160 + unsigned long cqr_flags = 0; 4163 4161 4164 4162 private = (struct dasd_eckd_private *) device->private; 4165 4163 ··· 4182 4178 rc = dasd_alias_make_device_known_to_lcu(device); 4183 4179 if (rc) 4184 4180 return rc; 4185 - dasd_eckd_validate_server(device, DASD_CQR_FLAGS_FAILFAST); 4181 + 4182 + set_bit(DASD_CQR_FLAGS_FAILFAST, &cqr_flags); 4183 + dasd_eckd_validate_server(device, cqr_flags); 4186 4184 4187 4185 /* RE-Read Configuration Data */ 4188 4186 dasd_eckd_read_conf(device);