aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/char/tape_core.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/s390/char/tape_core.c b/drivers/s390/char/tape_core.c
index 4ea438c749c9..c42f5e25024e 100644
--- a/drivers/s390/char/tape_core.c
+++ b/drivers/s390/char/tape_core.c
@@ -1064,15 +1064,16 @@ __tape_do_irq (struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
1064 /* 1064 /*
1065 * If the condition code is not zero and the start function bit is 1065 * If the condition code is not zero and the start function bit is
1066 * still set, this is an deferred error and the last start I/O did 1066 * still set, this is an deferred error and the last start I/O did
1067 * not succeed. Restart the request now. 1067 * not succeed. At this point the condition that caused the deferred
1068 * error might still apply. So we just schedule the request to be
1069 * started later.
1068 */ 1070 */
1069 if (irb->scsw.cc != 0 && (irb->scsw.fctl & SCSW_FCTL_START_FUNC)) { 1071 if (irb->scsw.cc != 0 && (irb->scsw.fctl & SCSW_FCTL_START_FUNC)) {
1070 PRINT_WARN("(%s): deferred cc=%i. restaring\n", 1072 PRINT_WARN("(%s): deferred cc=%i. restaring\n",
1071 cdev->dev.bus_id, 1073 cdev->dev.bus_id,
1072 irb->scsw.cc); 1074 irb->scsw.cc);
1073 rc = __tape_start_io(device, request); 1075 request->status = TAPE_REQUEST_QUEUED;
1074 if (rc) 1076 schedule_work(&device->tape_dnr);
1075 __tape_end_request(device, request, rc);
1076 return; 1077 return;
1077 } 1078 }
1078 1079