Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea4da6ea authored by Stefan Haberland's avatar Stefan Haberland Committed by Martin Schwidefsky
Browse files

s390/dasd: fix unresponsive device after all channel paths were lost



Failfast bit was set incorrectly.
Use set_bit to enable failfast.

Reviewed-by: default avatarStefan Weinhuber <wein@de.ibm.com>
Signed-off-by: default avatarStefan Haberland <stefan.haberland@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 17ea345a
Loading
Loading
Loading
Loading
+8 −2
Original line number Original line Diff line number Diff line
@@ -1573,7 +1573,10 @@ static void dasd_eckd_do_validate_server(struct work_struct *work)
{
{
	struct dasd_device *device = container_of(work, struct dasd_device,
	struct dasd_device *device = container_of(work, struct dasd_device,
						  kick_validate);
						  kick_validate);
	if (dasd_eckd_validate_server(device, DASD_CQR_FLAGS_FAILFAST)
	unsigned long flags = 0;

	set_bit(DASD_CQR_FLAGS_FAILFAST, &flags);
	if (dasd_eckd_validate_server(device, flags)
	    == -EAGAIN) {
	    == -EAGAIN) {
		/* schedule worker again if failed */
		/* schedule worker again if failed */
		schedule_work(&device->kick_validate);
		schedule_work(&device->kick_validate);
@@ -4157,6 +4160,7 @@ static int dasd_eckd_restore_device(struct dasd_device *device)
	int rc;
	int rc;
	struct dasd_uid temp_uid;
	struct dasd_uid temp_uid;
	unsigned long flags;
	unsigned long flags;
	unsigned long cqr_flags = 0;


	private = (struct dasd_eckd_private *) device->private;
	private = (struct dasd_eckd_private *) device->private;


@@ -4178,7 +4182,9 @@ static int dasd_eckd_restore_device(struct dasd_device *device)
	rc = dasd_alias_make_device_known_to_lcu(device);
	rc = dasd_alias_make_device_known_to_lcu(device);
	if (rc)
	if (rc)
		return rc;
		return rc;
	dasd_eckd_validate_server(device, DASD_CQR_FLAGS_FAILFAST);

	set_bit(DASD_CQR_FLAGS_FAILFAST, &cqr_flags);
	dasd_eckd_validate_server(device, cqr_flags);


	/* RE-Read Configuration Data */
	/* RE-Read Configuration Data */
	dasd_eckd_read_conf(device);
	dasd_eckd_read_conf(device);