Showing error 630

User: Jiri Slaby
Error type: Double Unlock
Error type description: Some lock is unlocked twice unintentionally in a sequence
File location: block/blk-core.c
Line in file: 854
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2011-11-07 22:20:57 UTC


Source:

 824
 825        blk_add_trace_generic(q, bio, rw, BLK_TA_GETRQ);
 826out:
 827        return rq;
 828}
 829
 830/*
 831 * No available requests for this queue, unplug the device and wait for some
 832 * requests to become available.
 833 *
 834 * Called with q->queue_lock held, and returns with it unlocked.
 835 */
 836static struct request *get_request_wait(struct request_queue *q, int rw_flags,
 837                                        struct bio *bio)
 838{
 839        const int rw = rw_flags & 0x01;
 840        struct request *rq;
 841
 842        rq = get_request(q, rw_flags, bio, GFP_NOIO);
 843        while (!rq) {
 844                DEFINE_WAIT(wait);
 845                struct io_context *ioc;
 846                struct request_list *rl = &q->rq;
 847
 848                prepare_to_wait_exclusive(&rl->wait[rw], &wait,
 849                                TASK_UNINTERRUPTIBLE);
 850
 851                blk_add_trace_generic(q, bio, rw, BLK_TA_SLEEPRQ);
 852
 853                __generic_unplug_device(q);
 854                spin_unlock_irq(q->queue_lock);
 855                io_schedule();
 856
 857                /*
 858                 * After sleeping, we become a "batching" process and
 859                 * will be able to allocate at least one request, and
 860                 * up to a big batch of them for a small period time.
 861                 * See ioc_batching, ioc_set_batching
 862                 */
 863                ioc = current_io_context(GFP_NOIO, q->node);
 864                ioc_set_batching(q, ioc);
Show full sources