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

Jens Axboe
2011-03-25T14:10:52Z

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?

diff --git a/block/blk-core.c b/block/blk-core.c
index 59b5c00..121df87 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1197,6 +1197,7 @@ static bool attempt_plug_merge(struct task_struct *tsk, struct request_queue *q,
if (!plug)
goto out;

+ preempt_disable();
list_for_each_entry_reverse(rq, &plug->list, queuelist) {
int el_ret;

@@ -1214,6 +1215,7 @@ static bool attempt_plug_merge(struct task_struct *tsk, struct request_queue *q,
break;
}
}
+ preempt_enable();
out:
return ret;
}
@@ -1322,7 +1324,9 @@ get_rq:
* Debug flag, kill later
*/
req->cmd_flags |= REQ_ON_PLUG;
+ preempt_disable();
list_add_tail(&req->queuelist, &plug->list);
+ preempt_enable();
drive_stat_acct(req, 1);
} else {
spin_lock_irq(q->queue_lock);

--
Jens Axboe