X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fs390%2Fchar%2Ftape_std.c;h=2f9fe30989a7d8e28b096c26e169f842d94507fa;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=99cf881f41db8b3f995c5199e8440bb18f6ab711;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/drivers/s390/char/tape_std.c b/drivers/s390/char/tape_std.c index 99cf881f4..2f9fe3098 100644 --- a/drivers/s390/char/tape_std.c +++ b/drivers/s390/char/tape_std.c @@ -37,19 +37,20 @@ tape_std_assign_timeout(unsigned long data) { struct tape_request * request; struct tape_device * device; - int rc; request = (struct tape_request *) data; if ((device = request->device) == NULL) BUG(); - DBF_EVENT(3, "%08x: Assignment timeout. Device busy.\n", + spin_lock_irq(get_ccwdev_lock(device->cdev)); + if (request->callback != NULL) { + DBF_EVENT(3, "%08x: Assignment timeout. Device busy.\n", device->cdev_id); - rc = tape_cancel_io(device, request); - if(rc) - PRINT_ERR("(%s): Assign timeout: Cancel failed with rc = %i\n", - device->cdev->dev.bus_id, rc); - + PRINT_ERR("%s: Assignment timeout. Device busy.\n", + device->cdev->dev.bus_id); + ccw_device_clear(device->cdev, (long) request); + } + spin_unlock_irq(get_ccwdev_lock(device->cdev)); } int