From de53f82a75fa437dbff5c5a89adc583c297eb6d9 Mon Sep 17 00:00:00 2001 From: Stefan Bader Date: Fri, 24 Mar 2006 03:15:26 -0800 Subject: [PATCH] --- yaml --- r: 23379 b: refs/heads/master c: 842d3fba94ed94cc5de7b712e0f4218ce6e4fd73 h: refs/heads/master i: 23377: 24eadc99c2f48b88e770291888da87a3dc80b38e 23375: 3941a5bb0ca1935b643e7b07fc075108078fd1ea v: v3 --- [refs] | 2 +- trunk/drivers/s390/char/tape_core.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 85e4c012f6d2..25c92b358eae 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 20c644680af1ef9a6b36c0873f59498c98b07ab1 +refs/heads/master: 842d3fba94ed94cc5de7b712e0f4218ce6e4fd73 diff --git a/trunk/drivers/s390/char/tape_core.c b/trunk/drivers/s390/char/tape_core.c index 4ea438c749c9..c42f5e25024e 100644 --- a/trunk/drivers/s390/char/tape_core.c +++ b/trunk/drivers/s390/char/tape_core.c @@ -1064,15 +1064,16 @@ __tape_do_irq (struct ccw_device *cdev, unsigned long intparm, struct irb *irb) /* * If the condition code is not zero and the start function bit is * still set, this is an deferred error and the last start I/O did - * not succeed. Restart the request now. + * not succeed. At this point the condition that caused the deferred + * error might still apply. So we just schedule the request to be + * started later. */ if (irb->scsw.cc != 0 && (irb->scsw.fctl & SCSW_FCTL_START_FUNC)) { PRINT_WARN("(%s): deferred cc=%i. restaring\n", cdev->dev.bus_id, irb->scsw.cc); - rc = __tape_start_io(device, request); - if (rc) - __tape_end_request(device, request, rc); + request->status = TAPE_REQUEST_QUEUED; + schedule_work(&device->tape_dnr); return; }