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

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

dasd: fix unresponsive device during format



If path events occur the formatting process stucks because path
events may flush format requests from the queue.

Kick the format process after path events are handled.

Signed-off-by: default avatarStefan Haberland <stefan.haberland@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent daa991bf
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -1675,8 +1675,11 @@ void dasd_int_handler(struct ccw_device *cdev, unsigned long intparm,
	if (cqr->status == DASD_CQR_CLEAR_PENDING &&
	    scsw_fctl(&irb->scsw) & SCSW_FCTL_CLEAR_FUNC) {
		cqr->status = DASD_CQR_CLEARED;
		if (cqr->callback_data == DASD_SLEEPON_START_TAG)
			cqr->callback_data = DASD_SLEEPON_END_TAG;
		dasd_device_clear_timer(device);
		wake_up(&dasd_flush_wq);
		wake_up(&generic_waitq);
		dasd_schedule_device_bh(device);
		return;
	}
@@ -2439,6 +2442,8 @@ int dasd_cancel_req(struct dasd_ccw_req *cqr)
	case DASD_CQR_QUEUED:
		/* request was not started - just set to cleared */
		cqr->status = DASD_CQR_CLEARED;
		if (cqr->callback_data == DASD_SLEEPON_START_TAG)
			cqr->callback_data = DASD_SLEEPON_END_TAG;
		break;
	case DASD_CQR_IN_IO:
		/* request in IO - terminate IO and release again */
@@ -3512,6 +3517,10 @@ int dasd_generic_path_operational(struct dasd_device *device)
	dasd_schedule_device_bh(device);
	if (device->block)
		dasd_schedule_block_bh(device->block);

	if (!device->stopped)
		wake_up(&generic_waitq);

	return 1;
}
EXPORT_SYMBOL_GPL(dasd_generic_path_operational);