From 8533afb1de09b8969e209631312d2ac74aeb3d54 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Thu, 18 Sep 2003 04:58:32 -0700 Subject: [PATCH] [PATCH] io scheduler barrier fix From: Nick Piggin This should be the last piece to ensure correct barrier handling for AS and DL? --- drivers/block/as-iosched.c | 5 +++++ drivers/block/deadline-iosched.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/drivers/block/as-iosched.c b/drivers/block/as-iosched.c index 9099467dfec2f..a54f8e9a358e5 100644 --- a/drivers/block/as-iosched.c +++ b/drivers/block/as-iosched.c @@ -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_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) { case ELEVATOR_INSERT_BACK: while (ad->next_arq[REQ_SYNC]) diff --git a/drivers/block/deadline-iosched.c b/drivers/block/deadline-iosched.c index 8bb37f65d5361..ecc2a99970076 100644 --- a/drivers/block/deadline-iosched.c +++ b/drivers/block/deadline-iosched.c @@ -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_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) { case ELEVATOR_INSERT_BACK: while (deadline_dispatch_requests(dd)) -- 2.53.0