From: Jens Axboe Date: Fri, 25 Mar 2011 15:57:52 +0000 (+0100) Subject: block: fix bug with inserting flush requests as sort/merge X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=401a18e92ce32cd0ddfa5738899ca2b8114f2bbf;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git block: fix bug with inserting flush requests as sort/merge With the introduction of the on-stack plugging, we would assume that any request being inserted was a normal file system request. As flush/fua requires a special insert mode, this caused problems. Fix this up by checking for this in flush_plug_list() and use the appropriate insert mechanism. Big thanks goes to Markus Tripplesdorf for tirelessly testing patches, and to Sergey Senozhatsky for helping find the real issue. Reported-by: Markus Tripplesdorf Signed-off-by: Jens Axboe --- diff --git a/block/blk-core.c b/block/blk-core.c index 59b5c00c0126..64e96ee1d6af 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -2702,7 +2702,10 @@ static void flush_plug_list(struct blk_plug *plug) /* * rq is already accounted, so use raw insert */ - __elv_add_request(q, rq, ELEVATOR_INSERT_SORT_MERGE); + if (rq->cmd_flags & (REQ_FLUSH | REQ_FUA)) + __elv_add_request(q, rq, ELEVATOR_INSERT_FLUSH); + else + __elv_add_request(q, rq, ELEVATOR_INSERT_SORT_MERGE); } if (q) {