Re: [PATCH] null_blk: don't enable irqs when in irq

From: Rabin Vincent
Date: Mon Dec 28 2015 - 14:07:36 EST


On Mon, Dec 28, 2015 at 11:52:24AM -0700, Jens Axboe wrote:
> Something like this should work, can you test it?

Spits out a bunch of the following. It's this assertion:

static inline void queue_lockdep_assert_held(struct request_queue *q)
{
if (q->queue_lock)
lockdep_assert_held(q->queue_lock);
}

[ 11.797139] ------------[ cut here ]------------
[ 11.797670] WARNING: CPU: 0 PID: 6 at /home/rabin/dev/linux/include/linux/blkdev.h:505 blk_start_queue_async+0x54/0x60()
[ 11.798810] Modules linked in:
[ 11.799139] CPU: 0 PID: 6 Comm: kworker/u4:0 Not tainted 4.4.0-rc6+ #82
[ 11.799811] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Debian-1.8.2-1 04/01/2014
[ 11.800012] Workqueue: writeback wb_workfn (flush-253:0)
[ 11.800012] ffffffff817fdd30 ffff88000d603e40 ffffffff813446dc 0000000000000000
[ 11.800012] ffff88000d603e78 ffffffff810501e2 ffff88000005bc00 ffff88000005bc00
[ 11.800012] ffff88000d60db40 ffffffff813da2b0 ffff88000d60dc28 ffff88000d603e88
[ 11.800012] Call Trace:
[ 11.800012] <IRQ> [<ffffffff813446dc>] dump_stack+0x4e/0x82
[ 11.800012] [<ffffffff810501e2>] warn_slowpath_common+0x82/0xc0
[ 11.800012] [<ffffffff813da2b0>] ? null_softirq_done_fn+0x30/0x30
[ 11.800012] [<ffffffff810502da>] warn_slowpath_null+0x1a/0x20
[ 11.800012] [<ffffffff8131e094>] blk_start_queue_async+0x54/0x60
[ 11.800012] [<ffffffff813da244>] end_cmd+0x84/0xc0
[ 11.800012] [<ffffffff813da2c2>] null_cmd_timer_expired+0x12/0x20
[ 11.800012] [<ffffffff810bbaab>] __hrtimer_run_queues+0x12b/0x4b0
[ 11.800012] [<ffffffff810bc69f>] hrtimer_interrupt+0xaf/0x1b0
[ 11.800012] [<ffffffff8112446d>] ? mempool_alloc_slab+0x1d/0x30
[ 11.800012] [<ffffffff810361f6>] local_apic_timer_interrupt+0x36/0x60
[ 11.800012] [<ffffffff81563ced>] smp_apic_timer_interrupt+0x3d/0x50
[ 11.800012] [<ffffffff8156217c>] apic_timer_interrupt+0x8c/0xa0
[ 11.800012] <EOI> [<ffffffff8112446d>] ? mempool_alloc_slab+0x1d/0x30
[ 11.800012] [<ffffffff8116431b>] ? __slab_alloc.isra.17.constprop.19+0x6b/0xa0
[ 11.800012] [<ffffffff81164558>] kmem_cache_alloc+0x208/0x240
[ 11.800012] [<ffffffff8112446d>] ? mempool_alloc_slab+0x1d/0x30
[ 11.800012] [<ffffffff8112446d>] mempool_alloc_slab+0x1d/0x30
[ 11.800012] [<ffffffff81124348>] mempool_alloc+0x68/0x170
[ 11.800012] [<ffffffff8109cc5f>] ? mark_held_locks+0x6f/0xa0
[ 11.800012] [<ffffffff81560a5f>] ? _raw_spin_unlock_irqrestore+0x5f/0x80
[ 11.800012] [<ffffffff81318128>] bio_alloc_bioset+0xb8/0x230
[ 11.800012] [<ffffffff811a32b3>] submit_bh_wbc.isra.2+0x73/0x130
[ 11.800012] [<ffffffff811a5230>] __block_write_full_page.constprop.3+0x110/0x360
[ 11.800012] [<ffffffff811a5870>] ? I_BDEV+0x20/0x20
[ 11.800012] [<ffffffff811a5870>] ? I_BDEV+0x20/0x20
[ 11.800012] [<ffffffff811a559c>] block_write_full_page+0x11c/0x1b0
[ 11.800012] [<ffffffff811a6418>] blkdev_writepage+0x18/0x20
[ 11.800012] [<ffffffff8112b9a6>] __writepage+0x16/0x40
[ 11.800012] [<ffffffff8112c746>] write_cache_pages+0x226/0x5f0
[ 11.800012] [<ffffffff8112b990>] ? bdi_set_max_ratio+0x70/0x70
[ 11.800012] [<ffffffff8112cb54>] generic_writepages+0x44/0x60
[ 11.800012] [<ffffffff81099e60>] ? __lock_is_held+0x50/0x70
[ 11.800012] [<ffffffff8112edf1>] do_writepages+0x21/0x30
[ 11.800012] [<ffffffff81198a3f>] __writeback_single_inode+0x7f/0x6f0
[ 11.800012] [<ffffffff8119937d>] writeback_sb_inodes+0x2cd/0x5b0
[ 11.800012] [<ffffffff811996ec>] __writeback_inodes_wb+0x8c/0xc0
[ 11.800012] [<ffffffff8119997b>] wb_writeback+0x25b/0x520
[ 11.800012] [<ffffffff8119aa38>] wb_workfn+0x2a8/0x5d0
[ 11.800012] [<ffffffff810eee79>] ? ring_buffer_event_data+0x9/0x10
[ 11.800012] [<ffffffff81068af6>] process_one_work+0x206/0x650
[ 11.800012] [<ffffffff81068a52>] ? process_one_work+0x162/0x650
[ 11.800012] [<ffffffff81068f8e>] worker_thread+0x4e/0x450
[ 11.800012] [<ffffffff81068f40>] ? process_one_work+0x650/0x650
[ 11.800012] [<ffffffff8106faef>] kthread+0xef/0x110
[ 11.800012] [<ffffffff8106fa00>] ? kthread_stop+0x280/0x280
[ 11.800012] [<ffffffff8156171f>] ret_from_fork+0x3f/0x70
[ 11.800012] [<ffffffff8106fa00>] ? kthread_stop+0x280/0x280
[ 11.800012] ---[ end trace b21adbd5c353edec ]---

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/