diff options
author | Michael Holzheu <holzheu@de.ibm.com> | 2006-03-24 06:15:28 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-24 10:33:18 -0500 |
commit | 5f38433885245dce82aa53c20a6b2efbe81ae350 (patch) | |
tree | 1731a5e3b9092f3ff060ac6aa652be8ec6dde890 /drivers/s390/char/tape.h | |
parent | 4cd190a736a97e302c038bd91357d636369d4c6b (diff) |
[PATCH] s390: fix endless retry loop in tape driver
If a tape device is assigned to another host, the interrupt for the assign
operation comes back with deferred condition code 1. Under some conditions
this can lead to an endless loop of retries. Check if the current request is
still in IO in deferred condition code handling and prevent retries when the
request has already been cancelled.
Signed-off-by: Michael Holzheu <holzheu@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/s390/char/tape.h')
-rw-r--r-- | drivers/s390/char/tape.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/s390/char/tape.h b/drivers/s390/char/tape.h index 01d865d93791..cd51ace8b610 100644 --- a/drivers/s390/char/tape.h +++ b/drivers/s390/char/tape.h | |||
@@ -250,6 +250,7 @@ extern void tape_free_request(struct tape_request *); | |||
250 | extern int tape_do_io(struct tape_device *, struct tape_request *); | 250 | extern int tape_do_io(struct tape_device *, struct tape_request *); |
251 | extern int tape_do_io_async(struct tape_device *, struct tape_request *); | 251 | extern int tape_do_io_async(struct tape_device *, struct tape_request *); |
252 | extern int tape_do_io_interruptible(struct tape_device *, struct tape_request *); | 252 | extern int tape_do_io_interruptible(struct tape_device *, struct tape_request *); |
253 | extern int tape_cancel_io(struct tape_device *, struct tape_request *); | ||
253 | void tape_hotplug_event(struct tape_device *, int major, int action); | 254 | void tape_hotplug_event(struct tape_device *, int major, int action); |
254 | 255 | ||
255 | static inline int | 256 | static inline int |