Re: [GIT PULL] Core block IO bits for 2.6.39 - early Oops

Jens Axboe
2011-03-25T15:51:56Z

On 2011-03-25 15:28, Markus Trippelsdorf wrote:
> On 2011.03.25 at 15:20 +0100, Jens Axboe wrote:
>> On 2011-03-25 15:14, Markus Trippelsdorf wrote:
>>> On 2011.03.25 at 15:10 +0100, Jens Axboe wrote:
>>>> On 2011-03-25 14:09, Markus Trippelsdorf wrote:
>>>>> On 2011.03.25 at 13:44 +0100, Jens Axboe wrote:
>>>>>> On 2011-03-25 10:57, Markus Trippelsdorf wrote:
>>>>>>>
>>>>>>> Reverting it solves all problems here.
>>>>>>
>>>>>> Can you try this one?
>>>>>
>>>>> This one doesn't help; I still get the same BUG.
>>>>>
>>>>> BTW if you're having trouble reproducing this, here is the only non
>>>>> stock xfs option that I use on the affected partitions:
>>>>>
>>>>> noatime,logbsize=262144
>>>>
>>>> This?
>>>
>>> No.
>>
>> Lets expand the scope a bit, this one?
>
> No. And setting CONFIG_PREEMPT_NONE also doesn't help.
>

Does this work? I'm actually relieved that the preempt was a red
herring. I had earlier convinced myself that it was all safe without
that mucking around with preempt counts.

diff --git a/block/blk-core.c b/block/blk-core.c
index 59b5c00..64e96ee 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) {

--
Jens Axboe