Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

[PATCH] CFQ: use irq safe locking in cfq_cic_link()

If cfq_set_request() is called for a new process AND a non-fs io
request (so that __GFP_WAIT may not be set), cfq_cic_link() may
use spin_lock_irq() and spin_unlock_irq() with interrupts already
disabled.

Fix is to always use irq safe locking in cfq_cic_link()

Acked-By: Arjan van de Ven <arjan@linux.intel.com>
Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Jens Axboe and committed by
Linus Torvalds
0261d688 209ad53b

+3 -2
+3 -2
block/cfq-iosched.c
··· 1362 1362 struct rb_node **p; 1363 1363 struct rb_node *parent; 1364 1364 struct cfq_io_context *__cic; 1365 + unsigned long flags; 1365 1366 void *k; 1366 1367 1367 1368 cic->ioc = ioc; ··· 1392 1391 rb_link_node(&cic->rb_node, parent, p); 1393 1392 rb_insert_color(&cic->rb_node, &ioc->cic_root); 1394 1393 1395 - spin_lock_irq(cfqd->queue->queue_lock); 1394 + spin_lock_irqsave(cfqd->queue->queue_lock, flags); 1396 1395 list_add(&cic->queue_list, &cfqd->cic_list); 1397 - spin_unlock_irq(cfqd->queue->queue_lock); 1396 + spin_unlock_irqrestore(cfqd->queue->queue_lock, flags); 1398 1397 } 1399 1398 1400 1399 /*