Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -671,14 +671,14 @@ static void elevator_switch(request_queue_t *q, struct elevator_type *new_e)
	 */
	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->rq.elvpriv) {
		spin_unlock_irq(q->queue_lock);
		msleep(100);
		msleep(10);
		spin_lock_irq(q->queue_lock);
	}

@@ -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.
	 */
	elevator_exit(old_elevator);
	clear_bit(QUEUE_FLAG_BYPASS, &q->queue_flags);
	clear_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
	return;

fail_register:
@@ -716,7 +716,7 @@ static void elevator_switch(request_queue_t *q, struct elevator_type *new_e)
fail:
	q->elevator = old_elevator;
	elv_register_queue(q);
	clear_bit(QUEUE_FLAG_BYPASS, &q->queue_flags);
	clear_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
	kfree(e);
error:
	elevator_put(new_e);
+1 −1
Original line number Diff line number Diff line
@@ -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))
		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)
		rl->elvpriv++;

+1 −1
Original line number Diff line number Diff line
@@ -442,7 +442,7 @@ enum {
#define QUEUE_FLAG_DEAD		5	/* queue being torn down */
#define QUEUE_FLAG_REENTER	6	/* Re-entrancy avoidance */
#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 blk_queue_plugged(q)	test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags)