linux/drivers/s390
Michael Holzheu 03cadd36d5 [S390] tape390: Fix request queue handling in block driver
When setting a channel attached tape online under Linux 2.6.31, the

"vol_id" process from udev hangs in sync_page():
 2 sync_page+144 [0x1dfaac]
 3 __wait_on_bit_lock+194 [0x58c23e]
 4 __lock_page+116 [0x1df9dc]
 5 truncate_inode_pages_range+728 [0x1ed7cc]
 6 __blkdev_put+244 [0x25f738]
 7 __fput+300 [0x229c4c]
 8 filp_close+122 [0x225a3a]

The reason for that is an error in the request queue handling. It can
happen that we fetch a request, but do not process it further because
the number of queued requests exceeds TAPEBLOCK_MIN_REQUEUE.
To fix this, we should call blk_peek_request() instead of
blk_fetch_request() in the while condition and fetch the request in
the loop body afterwards.

This bug was introduced with the patch "block: implement and enforce
request peek/start/fetch" (9934c8c045)

Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2009-10-14 12:43:52 +02:00
..
block [S390] dasd: fix race condition in resume code 2009-10-06 10:35:11 +02:00
char [S390] tape390: Fix request queue handling in block driver 2009-10-14 12:43:52 +02:00
cio [S390] cio: allow setting boxed devices offline 2009-10-06 10:35:07 +02:00
crypto [S390] zcrypt: Improve some comments 2009-10-06 10:35:09 +02:00
kvm [S390] kvm: use console_initcall() to initialize s390 virtio console 2009-09-11 10:29:52 +02:00
net trivial: remove unnecessary semicolons 2009-09-21 15:14:58 +02:00
scsi [SCSI] zfcp: Fix hang when offlining device with offline chpid 2009-10-02 09:50:21 -05:00
Makefile [S390] split/move machine check handler code 2009-03-26 15:24:10 +01:00