Commit d1ea9b58 authored by Julian Wiedmann's avatar Julian Wiedmann Committed by Heiko Carstens
Browse files

s390/qdio: propagate error when cancelling a ccw fails



If qdio_cancel_ccw() times out (or is interrupted) before the interrupt
for the {halt,clear} action arrives, report this back to the caller as
an error.

Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
Reviewed-by: default avatarBenjamin Block <bblock@linux.ibm.com>
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parent d06314e0
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -893,6 +893,7 @@ static void qdio_shutdown_queues(struct qdio_irq *irq_ptr)
static int qdio_cancel_ccw(struct qdio_irq *irq, int how)
{
	struct ccw_device *cdev = irq->cdev;
	long timeout;
	int rc;

	spin_lock_irq(get_ccwdev_lock(cdev));
@@ -909,12 +910,14 @@ static int qdio_cancel_ccw(struct qdio_irq *irq, int how)
		return rc;
	}

	wait_event_interruptible_timeout(cdev->private->wait_q,
	timeout = wait_event_interruptible_timeout(cdev->private->wait_q,
						   irq->state == QDIO_IRQ_STATE_INACTIVE ||
						   irq->state == QDIO_IRQ_STATE_ERR,
						   10 * HZ);
	if (timeout <= 0)
		rc = (timeout == -ERESTARTSYS) ? -EINTR : -ETIME;

	return 0;
	return rc;
}

/**