lkml.org 
[lkml]   [2011]   [Oct]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/6] block: allow blk_execute_rq_nowait() to be called form IRQ context
    Date
    Currently blk_execute_rq_nowait() directly calls __blk_run_queue() and
    thus can't be called from IRQ context. This patch updates it to use
    blk_run_queue_async() instead. This will be used to unexport
    elv_add_request().

    This changes how queue is kicked after blk_execute_rq_nowait() but
    it's hardly a hot path and the effect shouldn't be noticeable.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Cc: Jens Axboe <axboe@kernel.dk>
    ---
    block/blk-exec.c | 8 ++++----
    1 files changed, 4 insertions(+), 4 deletions(-)

    diff --git a/block/blk-exec.c b/block/blk-exec.c
    index a1ebceb..056f097 100644
    --- a/block/blk-exec.c
    +++ b/block/blk-exec.c
    @@ -49,6 +49,7 @@ void blk_execute_rq_nowait(struct request_queue *q, struct gendisk *bd_disk,
    rq_end_io_fn *done)
    {
    int where = at_head ? ELEVATOR_INSERT_FRONT : ELEVATOR_INSERT_BACK;
    + unsigned long flags;

    if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags))) {
    rq->errors = -ENXIO;
    @@ -59,14 +60,13 @@ void blk_execute_rq_nowait(struct request_queue *q, struct gendisk *bd_disk,

    rq->rq_disk = bd_disk;
    rq->end_io = done;
    - WARN_ON(irqs_disabled());
    - spin_lock_irq(q->queue_lock);
    + spin_lock_irqsave(q->queue_lock, flags);
    __elv_add_request(q, rq, where);
    - __blk_run_queue(q);
    + blk_run_queue_async(q);
    /* the queue is stopped so it won't be run */
    if (rq->cmd_type == REQ_TYPE_PM_RESUME)
    q->request_fn(q);
    - spin_unlock_irq(q->queue_lock);
    + spin_unlock_irqrestore(q->queue_lock, flags);
    }
    EXPORT_SYMBOL_GPL(blk_execute_rq_nowait);

    --
    1.7.3.1


    \
     
     \ /
      Last update: 2011-10-21 05:59    [W:0.058 / U:29.420 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site