Commit 8533afb1 authored by Jens Axboe's avatar Jens Axboe Committed by Linus Torvalds

[PATCH] io scheduler barrier fix

From: Nick Piggin <piggin@cyberone.com.au>

This should be the last piece to ensure correct barrier handling for AS
and DL?
parent c92c54fe
...@@ -1403,6 +1403,11 @@ as_insert_request(request_queue_t *q, struct request *rq, int where) ...@@ -1403,6 +1403,11 @@ as_insert_request(request_queue_t *q, struct request *rq, int where)
struct as_data *ad = q->elevator.elevator_data; struct as_data *ad = q->elevator.elevator_data;
struct as_rq *arq = RQ_DATA(rq); struct as_rq *arq = RQ_DATA(rq);
/* barriers must flush the reorder queue */
if (unlikely(rq->flags & (REQ_SOFTBARRIER | REQ_HARDBARRIER)
&& where == ELEVATOR_INSERT_SORT))
where = ELEVATOR_INSERT_BACK;
switch (where) { switch (where) {
case ELEVATOR_INSERT_BACK: case ELEVATOR_INSERT_BACK:
while (ad->next_arq[REQ_SYNC]) while (ad->next_arq[REQ_SYNC])
......
...@@ -618,6 +618,11 @@ deadline_insert_request(request_queue_t *q, struct request *rq, int where) ...@@ -618,6 +618,11 @@ deadline_insert_request(request_queue_t *q, struct request *rq, int where)
struct deadline_data *dd = q->elevator.elevator_data; struct deadline_data *dd = q->elevator.elevator_data;
struct deadline_rq *drq = RQ_DATA(rq); struct deadline_rq *drq = RQ_DATA(rq);
/* barriers must flush the reorder queue */
if (unlikely(rq->flags & (REQ_SOFTBARRIER | REQ_HARDBARRIER)
&& where == ELEVATOR_INSERT_SORT))
where = ELEVATOR_INSERT_BACK;
switch (where) { switch (where) {
case ELEVATOR_INSERT_BACK: case ELEVATOR_INSERT_BACK:
while (deadline_dispatch_requests(dd)) while (deadline_dispatch_requests(dd))
......
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