linux/drivers/s390/char
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
..
con3215.c [S390] driver_data access 2009-06-22 12:08:23 +02:00
con3270.c [S390] 3270 console: convert from bootmem to slab 2009-06-22 12:08:17 +02:00
ctrlchar.c
ctrlchar.h
defkeymap.c
defkeymap.map
fs3270.c [S390] pm: con3270 power management callbacks. 2009-06-16 10:31:20 +02:00
Kconfig [S390] add call home support 2009-09-11 10:29:49 +02:00
keyboard.c
keyboard.h
Makefile [S390] add call home support 2009-09-11 10:29:49 +02:00
monreader.c [S390] proper use of device register 2009-09-11 10:29:45 +02:00
monwriter.c [S390] pm: monwriter power management callbacks. 2009-06-16 10:31:21 +02:00
raw3270.c [S390] 3270 console build fix 2009-10-06 10:35:05 +02:00
raw3270.h [S390] pm: con3270 power management callbacks. 2009-06-16 10:31:20 +02:00
sclp_async.c [S390] add call home support 2009-09-11 10:29:49 +02:00
sclp_cmd.c [S390] pm: memory hotplug power management callbacks 2009-06-16 10:31:20 +02:00
sclp_con.c [S390] Use del_timer instead of del_timer_sync 2009-06-22 12:08:19 +02:00
sclp_config.c [S390] convert sclp printks to pr_xxx macros. 2008-12-25 13:39:24 +01:00
sclp_cpi_sys.c [S390] convert sclp printks to pr_xxx macros. 2008-12-25 13:39:24 +01:00
sclp_cpi_sys.h
sclp_cpi.c
sclp_quiesce.c [S390] Cleanup sclp printk messages. 2008-07-14 10:02:19 +02:00
sclp_rw.c [S390] pm: power management support for SCLP drivers. 2009-06-16 10:31:16 +02:00
sclp_rw.h [S390] sclp: fix compile error for !SCLP_CONSOLE 2009-07-07 16:37:50 +02:00
sclp_sdias.c [S390] convert sclp printks to pr_xxx macros. 2008-12-25 13:39:24 +01:00
sclp_tty.c [S390] sclp_tty: Fix scheduling while atomic bug. 2008-07-14 10:02:25 +02:00
sclp_tty.h [S390] sclp_tty: remove ioctl interface. 2008-07-14 10:02:25 +02:00
sclp_vt220.c [S390] vt220 console: convert from bootmem to slab 2009-06-22 12:08:18 +02:00
sclp.c [S390] pm: power management support for SCLP drivers. 2009-06-16 10:31:16 +02:00
sclp.h [S390] add call home support 2009-09-11 10:29:49 +02:00
tape_34xx.c [S390] tape: Use pr_xxx instead of dev_xxx in shared driver code 2009-09-11 10:29:57 +02:00
tape_3590.c [S390] tape: Use pr_xxx instead of dev_xxx in shared driver code 2009-09-11 10:29:57 +02:00
tape_3590.h
tape_block.c [S390] tape390: Fix request queue handling in block driver 2009-10-14 12:43:52 +02:00
tape_char.c [S390] tape message cleanup 2009-03-26 15:24:25 +01:00
tape_class.c device create: s390: convert device_create_drvdata to device_create 2008-10-16 09:24:44 -07:00
tape_class.h
tape_core.c [S390] tape: Use pr_xxx instead of dev_xxx in shared driver code 2009-09-11 10:29:57 +02:00
tape_proc.c [S390] tape message cleanup 2009-03-26 15:24:25 +01:00
tape_std.c [S390] tape: use init_timer_on_stack() rather than init_timer() 2009-09-11 10:29:46 +02:00
tape_std.h
tape.h [S390] pm: tape power management callbacks 2009-06-16 10:31:16 +02:00
tty3270.c [S390] 3270: lock dependency fixes 2009-06-12 10:27:33 +02:00
tty3270.h
vmcp.c [S390] convert vmcp printks to pr_xxx macros. 2008-12-25 13:39:18 +01:00
vmcp.h
vmlogrdr.c [S390] proper use of device register 2009-09-11 10:29:45 +02:00
vmur.c [S390] vmur: Invalid allocation sequence for vmur class 2009-09-11 10:29:49 +02:00
vmur.h [S390] vmur: Use wait queue instead of mutex to serialize open 2008-04-17 07:46:59 +02:00
vmwatchdog.c [S390] improve suspend/resume error messages 2009-07-07 16:37:53 +02:00
zcore.c headers: utsname.h redux 2009-09-23 18:13:10 -07:00