Two fixups for the block IO merge
Hi Linus,
An embarassing bug made the block IO merge a bit less enjoyable for some people than it should have.
- The oops problem (with CFQ), or potential corruption (with noop) due to a bad insertion type for some requests.
- A warning spew on virt_io using blk_stop_queue() inside it's callback.
Please pull these two fixes, so hopefully we can put this behind us. Thanks a lot to the people involved with fixing the first issue.
git://git.kernel.dk/linux-2.6-block.git for-linus
Jens Axboe (2):
block: fix bug with inserting flush requests as sort/merge
block: fix issue with calling blk_stop_queue() from the request_fn handler
block/blk-core.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-)
block/blk-core.c +5 -2
@@ -271,7 +271,7 @@ EXPORT_SYMBOL(blk_start_queue);**/ void blk_stop_queue (struct request_queue *q) { -cancel_delayed_work (&q->delay_work); +__cancel_delayed_work (&q->delay_work);queue_flag_set (QUEUE_FLAG_STOPPED , q); }EXPORT_SYMBOL (blk_stop_queue);
@@ -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) {
Signature · 1 line
Jens Axboe
Excerpts from Jens Axboe's message of 2011-03-25 12:07:07 -0400:
Quoted 10 lines
Hi Linus,
An embarassing bug made the block IO merge a bit less enjoyable for some people than it should have.
- The oops problem (with CFQ), or potential corruption (with noop) due to a bad insertion type for some requests.
- A warning spew on
virt_iousingblk_stop_queue()inside it's callback.
Quoted 8 lines
Please pull these two fixes, so hopefully we can put this behind us. Thanks a lot to the people involved with fixing the first issue.
git://git.kernel.dk/linux-2.6-block.gitfor-linusJens Axboe (2):
block: fix bug with inserting flush requests as sort/merge
block: fix issue with callingblk_stop_queue()from therequest_fnhandler
A quick stress test on this is going well on my box. Before this pull it would crash within 5 minutes.
-chris