X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=drivers%2Fs390%2Fchar%2Ftape_core.c;h=c42f5e25024efab3535094f593004b3180deea17;hb=842d3fba94ed94cc5de7b712e0f4218ce6e4fd73;hp=8f486e1a85075657fd890c94b3016ab4f99a80f1;hpb=2ecc26b87a2b3e8650d3c7fe3fc85a8c73d5560d;p=mirror_ubuntu-artful-kernel.git diff --git a/drivers/s390/char/tape_core.c b/drivers/s390/char/tape_core.c index 8f486e1a8507..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) /* * 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; } @@ -1239,7 +1240,7 @@ tape_init (void) #ifdef DBF_LIKE_HELL debug_set_level(TAPE_DBF_AREA, 6); #endif - DBF_EVENT(3, "tape init: ($Revision: 1.54 $)\n"); + DBF_EVENT(3, "tape init\n"); tape_proc_init(); tapechar_init (); tapeblock_init (); @@ -1263,8 +1264,7 @@ tape_exit(void) MODULE_AUTHOR("(C) 2001 IBM Deutschland Entwicklung GmbH by Carsten Otte and " "Michael Holzheu (cotte@de.ibm.com,holzheu@de.ibm.com)"); -MODULE_DESCRIPTION("Linux on zSeries channel attached " - "tape device driver ($Revision: 1.54 $)"); +MODULE_DESCRIPTION("Linux on zSeries channel attached tape device driver"); MODULE_LICENSE("GPL"); module_init(tape_init);