X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fs390%2Fchar%2Ftape_std.c;fp=drivers%2Fs390%2Fchar%2Ftape_std.c;h=2f9fe30989a7d8e28b096c26e169f842d94507fa;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=7a76ec413a3a15ac239367f821ffed0458420dd2;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/drivers/s390/char/tape_std.c b/drivers/s390/char/tape_std.c index 7a76ec413..2f9fe3098 100644 --- a/drivers/s390/char/tape_std.c +++ b/drivers/s390/char/tape_std.c @@ -11,6 +11,7 @@ * Stefan Bader */ +#include #include #include #include @@ -36,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