Commit 64521d1a authored by Jens Axboe's avatar Jens Axboe Committed by Jens Axboe

[BLOCK] elevator switch fixes/cleanup

- 100msec sleep is a little excessive, lots of requests can complete
  in that timeframe. Use 10msec instead.
- Rename QUEUE_FLAG_BYPASS to QUEUE_FLAG_ELVSWITCH to indicate what
  is going on.
Signed-off-by: default avatarJens Axboe <axboe@suse.de>
parent cb98fc8b
...@@ -671,14 +671,14 @@ static void elevator_switch(request_queue_t *q, struct elevator_type *new_e) ...@@ -671,14 +671,14 @@ static void elevator_switch(request_queue_t *q, struct elevator_type *new_e)
*/ */
spin_lock_irq(q->queue_lock); spin_lock_irq(q->queue_lock);
set_bit(QUEUE_FLAG_BYPASS, &q->queue_flags); set_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
while (q->elevator->ops->elevator_dispatch_fn(q, 1)) while (q->elevator->ops->elevator_dispatch_fn(q, 1))
; ;
while (q->rq.elvpriv) { while (q->rq.elvpriv) {
spin_unlock_irq(q->queue_lock); spin_unlock_irq(q->queue_lock);
msleep(100); msleep(10);
spin_lock_irq(q->queue_lock); spin_lock_irq(q->queue_lock);
} }
...@@ -703,7 +703,7 @@ static void elevator_switch(request_queue_t *q, struct elevator_type *new_e) ...@@ -703,7 +703,7 @@ static void elevator_switch(request_queue_t *q, struct elevator_type *new_e)
* finally exit old elevator and turn off BYPASS. * finally exit old elevator and turn off BYPASS.
*/ */
elevator_exit(old_elevator); elevator_exit(old_elevator);
clear_bit(QUEUE_FLAG_BYPASS, &q->queue_flags); clear_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
return; return;
fail_register: fail_register:
...@@ -716,7 +716,7 @@ static void elevator_switch(request_queue_t *q, struct elevator_type *new_e) ...@@ -716,7 +716,7 @@ static void elevator_switch(request_queue_t *q, struct elevator_type *new_e)
fail: fail:
q->elevator = old_elevator; q->elevator = old_elevator;
elv_register_queue(q); elv_register_queue(q);
clear_bit(QUEUE_FLAG_BYPASS, &q->queue_flags); clear_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
kfree(e); kfree(e);
error: error:
elevator_put(new_e); elevator_put(new_e);
......
...@@ -1940,7 +1940,7 @@ static struct request *get_request(request_queue_t *q, int rw, struct bio *bio, ...@@ -1940,7 +1940,7 @@ static struct request *get_request(request_queue_t *q, int rw, struct bio *bio,
if (rl->count[rw] >= queue_congestion_on_threshold(q)) if (rl->count[rw] >= queue_congestion_on_threshold(q))
set_queue_congested(q, rw); set_queue_congested(q, rw);
priv = !test_bit(QUEUE_FLAG_BYPASS, &q->queue_flags); priv = !test_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
if (priv) if (priv)
rl->elvpriv++; rl->elvpriv++;
......
...@@ -442,7 +442,7 @@ enum { ...@@ -442,7 +442,7 @@ enum {
#define QUEUE_FLAG_DEAD 5 /* queue being torn down */ #define QUEUE_FLAG_DEAD 5 /* queue being torn down */
#define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */ #define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */
#define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ #define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */
#define QUEUE_FLAG_BYPASS 8 /* don't use elevator, just do FIFO */ #define QUEUE_FLAG_ELVSWITCH 8 /* don't use elevator, just do FIFO */
#define QUEUE_FLAG_FLUSH 9 /* doing barrier flush sequence */ #define QUEUE_FLAG_FLUSH 9 /* doing barrier flush sequence */
#define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment