diff options
author | Sage Weil <sage@newdream.ne> | 2009-04-23 10:37:58 +0400 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2009-04-24 10:54:21 +0400 |
commit | f3c737de8f57b5ce756010c2175f7d574194b30d (patch) | |
tree | fa741dba43d33b83f66c7f912e983feae594d40f /drivers/block | |
parent | 42dad7647aec49b3ad20dd0cb832b232a6ae514f (diff) | |
download | linux-f3c737de8f57b5ce756010c2175f7d574194b30d.tar.xz |
umem: fix request_queue lock warning
The umem driver issues two warnings on boot, due to blk_plug_device() and
blk_remove_plug() being called without q->queue_lock held. Starting with
e48ec690 (block: extend queue_flag bitops), the queue_flag_* functions
warn if q->queue_lock doesn't appear to be locked. In fact, q->queue_lock
is NULL (though that apparently isn't otherwise a problem as the driver is
using card->lock for everything).
Although blk_init_queue() with take a request_fn_proc and spinlock_t*,
there isn't a corresponding init helper that takes a make_request_fn.
Setting queue_lock to &card->lock explicitly seems to work fine for me.
The warning goes away and the device appears to behave.
[ 1.531881] v2.3 : Micro Memory(tm) PCI memory board block driver
[ 1.538136] umem 0000:02:01.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20
[ 1.545018] umem 0000:02:01.0: Micro Memory(tm) controller found (PCI Mem Module (Battery Backup))
[ 1.554176] umem 0000:02:01.0: CSR 0xfc9ffc00 -> 0xffffc200013d0c00 (0x100)
[ 1.561279] umem 0000:02:01.0: Size 1048576 KB, Battery 1 Disabled (FAILURE), Battery 2 Disabled (FAILURE)
[ 1.571114] umem 0000:02:01.0: Window size 16777216 bytes, IRQ 20
[ 1.577304] umem 0000:02:01.0: memory NOT initialized. Consider over-writing whole device.
[ 1.585989] umema:<4>------------[ cut here ]------------
[ 1.591775] WARNING: at include/linux/blkdev.h:492 blk_plug_device+0x6d/0x106()
[ 1.592025] Hardware name: H8SSL
[ 1.592025] Modules linked in:
[ 1.592025] Pid: 1, comm: swapper Not tainted 2.6.29 #8
[ 1.592025] Call Trace:
[ 1.592025] [<ffffffff8023c994>] warn_slowpath+0xd3/0xf2
[ 1.592025] [<ffffffff8025a5b5>] ? save_trace+0x3f/0x9b
[ 1.592025] [<ffffffff8025a68b>] ? add_lock_to_list+0x7a/0xba
[ 1.592025] [<ffffffff8025e609>] ? validate_chain+0xb3b/0xce8
[ 1.592025] [<ffffffff80441556>] ? mm_make_request+0x27/0x59
[ 1.592025] [<ffffffff80441556>] ? mm_make_request+0x27/0x59
[ 1.592025] [<ffffffff8025ef04>] ? __lock_acquire+0x74e/0x7b9
[ 1.592025] [<ffffffff8025a70e>] ? get_lock_stats+0x34/0x5e
[ 1.592025] [<ffffffff8025a746>] ? put_lock_stats+0xe/0x27
[ 1.592025] [<ffffffff80441556>] ? mm_make_request+0x27/0x59
[ 1.592025] [<ffffffff803ad165>] blk_plug_device+0x6d/0x106
[ 1.592025] [<ffffffff80441575>] mm_make_request+0x46/0x59
[ 1.592025] [<ffffffff803ac2d9>] generic_make_request+0x335/0x3cf
[ 1.592025] [<ffffffff8027fcc7>] ? mempool_alloc_slab+0x11/0x13
[ 1.592025] [<ffffffff8027fdce>] ? mempool_alloc+0x45/0x101
[ 1.592025] [<ffffffff8025a746>] ? put_lock_stats+0xe/0x27
[ 1.592025] [<ffffffff803adda5>] submit_bio+0x10a/0x119
[ 1.592025] [<ffffffff802c8d00>] submit_bh+0xe5/0x109
[ 1.592025] [<ffffffff802cbf43>] block_read_full_page+0x2aa/0x2cb
[ 1.592025] [<ffffffff802cf4c4>] ? blkdev_get_block+0x0/0x4c
[ 1.592025] [<ffffffff805c90a8>] ? _spin_unlock_irq+0x36/0x51
[ 1.592025] [<ffffffff80286836>] ? __lru_cache_add+0x92/0xb2
[ 1.592025] [<ffffffff802cf008>] blkdev_readpage+0x13/0x15
[ 1.592025] [<ffffffff8027de06>] read_cache_page_async+0x90/0x134
[ 1.592025] [<ffffffff802ceff5>] ? blkdev_readpage+0x0/0x15
[ 1.592025] [<ffffffff802f5f1c>] ? adfspart_check_ICS+0x0/0x16c
[ 1.592025] [<ffffffff8027deb8>] read_cache_page+0xe/0x45
[ 1.592025] [<ffffffff802f5170>] read_dev_sector+0x2e/0x93
[ 1.592025] [<ffffffff802f5f44>] adfspart_check_ICS+0x28/0x16c
[ 1.592025] [<ffffffff8025d427>] ? trace_hardirqs_on+0xd/0xf
[ 1.592025] [<ffffffff802f5f1c>] ? adfspart_check_ICS+0x0/0x16c
[ 1.592025] [<ffffffff802f59c5>] rescan_partitions+0x168/0x2fb
[ 1.592025] [<ffffffff802ceae9>] __blkdev_get+0x259/0x336
[ 1.592025] [<ffffffff803ca1e2>] ? kobject_put+0x47/0x4b
[ 1.592025] [<ffffffff802cebd1>] blkdev_get+0xb/0xd
[ 1.592025] [<ffffffff802f5773>] register_disk+0xc4/0x12b
[ 1.592025] [<ffffffff803b2a7b>] add_disk+0xc3/0x12d
[ 1.592025] [<ffffffff808a1d4a>] ? mm_init+0x0/0x1a5
[ 1.592025] [<ffffffff808a1e73>] mm_init+0x129/0x1a5
[ 1.592025] [<ffffffff808a1d4a>] ? mm_init+0x0/0x1a5
[ 1.592025] [<ffffffff80209056>] _stext+0x56/0x130
[ 1.592025] [<ffffffff80274932>] ? register_irq_proc+0xae/0xca
[ 1.592025] [<ffffffff802f0000>] ? proc_pid_lookup+0xb4/0x18b
[ 1.592025] [<ffffffff8087f975>] kernel_init+0x132/0x18b
[ 1.592025] [<ffffffff8020d17a>] child_rip+0xa/0x20
[ 1.592025] [<ffffffff8020cb40>] ? restore_args+0x0/0x30
[ 1.592025] [<ffffffff8087f843>] ? kernel_init+0x0/0x18b
[ 1.592025] [<ffffffff8020d170>] ? child_rip+0x0/0x20
[ 1.592025] ---[ end trace 7150b3b86da74e1e ]---
[ 1.889858] ------------[ cut here ]------------[ve_plug+0x5f/0x91()
[ 1.893848] Hardware name: H8SSL
[ 1.893848] Modules linked in:
[ 1.893848] Pid: 1, comm: swapper Tainted: G W 2.6.29 #8
[ 1.893848] Call Trace:
[ 1.893848] [<ffffffff8023c994>] warn_slowpath+0xd3/0xf2
[ 1.893848] [<ffffffff805c8411>] ? trace_hardirqs_on_thunk+0x3a/0x3f
[ 1.893848] [<ffffffff8020cb40>] ? restore_args+0x0/0x30
[ 1.893848] [<ffffffff80254245>] ? __atomic_notifier_call_chain+0x0/0xb2
[ 1.893848] [<ffffffff805c90a3>] ? _spin_unlock_irq+0x31/0x51
[ 1.893848] [<ffffffff805c90bf>] ? _spin_unlock_irq+0x4d/0x51
[ 1.893848] [<ffffffff8044157d>] ? mm_make_request+0x4e/0x59
[ 1.893848] [<ffffffff8025a70e>] ? get_lock_stats+0x34/0x5e
[ 1.893848] [<ffffffff8025a75d>] ? put_lock_stats+0x25/0x27
[ 1.893848] [<ffffffff80441504>] ? mm_unplug_device+0x25/0x50
[ 1.893848] [<ffffffff803acf23>] blk_remove_plug+0x5f/0x91
[ 1.893848] [<ffffffff8044150f>] mm_unplug_device+0x30/0x50
[ 1.893848] [<ffffffff803ab74a>] blk_unplug+0x78/0x7d
[ 1.893848] [<ffffffff803ab75c>] blk_backing_dev_unplug+0xd/0xf
[ 1.893848] [<ffffffff802c853c>] block_sync_page+0x4a/0x4c
[ 1.893848] [<ffffffff8027da1c>] sync_page+0x44/0x4d
[ 1.893848] [<ffffffff805c66fd>] __wait_on_bit_lock+0x42/0x8a
[ 1.893848] [<ffffffff8027d9d8>] ? sync_page+0x0/0x4d
[ 1.893848] [<ffffffff8027d9c4>] __lock_page+0x64/0x6b
[ 1.893848] [<ffffffff802508db>] ? wake_bit_function+0x0/0x2a
[ 1.893848] [<ffffffff8027de4a>] read_cache_page_async+0xd4/0x134
[ 1.893848] [<ffffffff802ceff5>] ? blkdev_readpage+0x0/0x15
[ 1.893848] [<ffffffff802f5f1c>] ? adfspart_check_ICS+0x0/0x16c
[ 1.893848] [<ffffffff8027deb8>] read_cache_page+0xe/0x45
[ 1.893848] [<ffffffff802f5170>] read_dev_sector+0x2e/0x93
[ 1.893848] [<ffffffff802f5f44>] adfspart_check_ICS+0x28/0x16c
[ 1.893848] [<ffffffff8025d427>] ? trace_hardirqs_on+0xd/0xf
[ 1.893848] [<ffffffff802f5f1c>] ? adfspart_check_ICS+0x0/0x16c
[ 1.893848] [<ffffffff802f59c5>] rescan_partitions+0x168/0x2fb
[ 1.893848] [<ffffffff802ceae9>] __blkdev_get+0x259/0x336
[ 1.893848] [<ffffffff803ca1e2>] ? kobject_put+0x47/0x4b
[ 1.893848] [<ffffffff802cebd1>] blkdev_get+0xb/0xd
[ 1.893848] [<ffffffff802f5773>] register_disk+0xc4/0x12b
[ 1.893848] [<ffffffff803b2a7b>] add_disk+0xc3/0x12d
[ 1.893848] [<ffffffff808a1d4a>] ? mm_init+0x0/0x1a5
[ 1.893848] [<ffffffff808a1e73>] mm_init+0x129/0x1a5
[ 1.893848] [<ffffffff808a1d4a>] ? mm_init+0x0/0x1a5
[ 1.893848] [<ffffffff80209056>] _stext+0x56/0x130
[ 1.893848] [<ffffffff80274932>] ? register_irq_proc+0xae/0xca
[ 1.893848] [<ffffffff802f0000>] ? proc_pid_lookup+0xb4/0x18b
[ 1.893848] [<ffffffff8087f975>] kernel_init+0x132/0x18b
[ 1.893848] [<ffffffff8020d17a>] child_rip+0xa/0x20
[ 1.893848] [<ffffffff8020cb40>] ? restore_args+0x0/0x30
[ 1.893848] [<ffffffff8087f843>] ? kernel_init+0x0/0x18b
[ 1.893848] [<ffffffff8020d170>] ? child_rip+0x0/0x20
[ 1.893848] ---[ end trace 7150b3b86da74e1f ]---
Signed-off-by: Sage Weil <sage@newdream.net>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/umem.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/block/umem.c b/drivers/block/umem.c index 9744d59a69f2..858c34dd032d 100644 --- a/drivers/block/umem.c +++ b/drivers/block/umem.c @@ -906,6 +906,7 @@ static int __devinit mm_pci_probe(struct pci_dev *dev, goto failed_alloc; blk_queue_make_request(card->queue, mm_make_request); + card->queue->queue_lock = &card->lock; card->queue->queuedata = card; card->queue->unplug_fn = mm_unplug_device; |