Re: [patch] use cheaper elv_queue_empty when unplug a device

Nick Piggin
2005-03-30T00:07:44Z

Jens Axboe wrote:
> On Tue, Mar 29 2005, Nick Piggin wrote:
>
>>@@ -2577,19 +2577,18 @@ static int __make_request(request_queue_
>> spin_lock_prefetch(q->queue_lock);
>>
>> barrier = bio_barrier(bio);
>>- if (barrier && (q->ordered == QUEUE_ORDERED_NONE)) {
>>+ if (unlikely(barrier) && (q->ordered == QUEUE_ORDERED_NONE)) {
>> err = -EOPNOTSUPP;
>> goto end_io;
>> }
>>
>>-again:
>> spin_lock_irq(q->queue_lock);
>>
>> if (elv_queue_empty(q)) {
>> blk_plug_device(q);
>> goto get_rq;
>> }
>
>
> This should just goto get_rq, the plug should happen only at the end
> where you did add it:
>

Yes I see. I'll fix that up.

>
>>@@ -2693,10 +2675,11 @@ get_rq:
>> req->rq_disk = bio->bi_bdev->bd_disk;
>> req->start_time = jiffies;
>>
>>+ spin_lock_irq(q->queue_lock);
>>+ if (elv_queue_empty(q))
>>+ blk_plug_device(q);
>> add_request(q, req);
>> out:
>>- if (freereq)
>>- __blk_put_request(q, freereq);
>> if (bio_sync(bio))
>> __generic_unplug_device(q);
>>
>
>