Re: 2.4.22-pre3 and reiserfs boot problem

Chris Mason
2003-07-11T13:02:21Z

[-- Attachment #1: Type: text/plain, Size: 1105 bytes --]

On Thu, 2003-07-10 at 14:01, Marcelo Tosatti wrote:
> On Thu, 10 Jul 2003, Stephan von Krawczynski wrote:
>
> > On Thu, 10 Jul 2003 20:20:02 +0400
> > "Peter Lojkin" <ia6432@inbox.ru> wrote:
> >
> > > Hello,
> > >
> > > here is exact patch i've used. i made it by cutting pre2-pre3 diff,
> > > so apply it o top of 2.4.22-pre3 with -R option to patch...
> >
> > Hello Peter
> > Hello Marcelo
> >
> > I can confirm that pre3 works when reversing the attached patch. Thanks very
> > much, Peter.
>
> Fine Stephan. Now can youplease get us the task backtraces from sysrq when
> the hang happens?
>
> Andrea, Chris, any idea of why this is happening?

My first guess is that blk_oversized_queue is false but there aren't any
requests left. That will pretty much spin in __get_request_wait with
irqs off, which sounds similar to what he's hitting.

I think we need this hunk even if it doesn't fix his problem.

Stephan, if this patch doesn't help, could you please boot with
nmi_watchdog=1? An earlier email said sysrq wasn't working, so we'll
probably need the nmi_watchdog to get a backtrace.

-chris

[-- Attachment #2: io-stalls-11-inc.diff --]
[-- Type: text/plain, Size: 455 bytes --]

===== drivers/block/ll_rw_blk.c 1.46 vs edited =====
--- 1.46/drivers/block/ll_rw_blk.c Fri Jul 4 13:35:08 2003
+++ edited/drivers/block/ll_rw_blk.c Fri Jul 11 08:30:54 2003
@@ -618,7 +618,7 @@
do {
set_current_state(TASK_UNINTERRUPTIBLE);
spin_lock_irq(&io_request_lock);
- if (blk_oversized_queue(q)) {
+ if (blk_oversized_queue(q) || q->rq.count == 0) {
__generic_unplug_device(q);
spin_unlock_irq(&io_request_lock);
schedule();