Patchwork Commit 7eaceaccab5f40 causing boot hang.

login
register
mail settings
Submitter Jens Axboe
Date March 29, 2011, 1:59 p.m.
Message ID <4D91E5CE.1080803@fusionio.com>
Download mbox | patch
Permalink /patch/88786/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Jens Axboe - March 29, 2011, 1:59 p.m.
On 2011-03-29 10:52, Rob Landley wrote:
> On 03/29/2011 01:35 AM, Jens Axboe wrote:
>> On 2011-03-29 08:19, Rob Landley wrote:
>>> Using the attached config (run through oldconfig and holding down
>>> enter), 2.6.38 boots but current -git hangs.  I've bisected it to this
>>> commit:
>>>
>>> 7eaceaccab5f40bbfda044629a6298616aeaed50 is the first bad commit
>>> commit 7eaceaccab5f40bbfda044629a6298616aeaed50
>>> Author: Jens Axboe <jaxboe@fusionio.com>
>>> Date:   Thu Mar 10 08:52:07 2011 +0100
>>>
>>>     block: remove per-queue plugging
>>>
>>>     Code has been converted over to the new explicit on-stack plugging,
>>>     and delay users have been converted to use the new API for that.
>>>     So lets kill off the old plugging along with aops->sync_page().
>>>
>>>     Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
>>>
>>> I suspect it broke CONFIG_IDE_GD_ATA.  (The symptoms change a bit in
>>> later versions, when that was first introduced it hung right after
>>> discovering hda, now it makes it to freeing kernel memory and then hangs
>>> trying to launch init.  But "the disk hangs a lot" still seems to
>>> describe the problem.)
>>
>> That is the case even with 9ced0b95b3993660e7990cf6bf68c1a80f31544e,
>> which was otherwise supposed to fix this queue stall?
>>
> 
> The first time I tried it, that version did manage to launch init, and
> then hung two lines later with ".udev/ already exists on the static
> /dev! ..." and the cursor still on the end of that line.  Could be an
> unrelated bug, hard to tell.
> 
> I tried it three more times and it hung right after "freeing unused
> kernel memory", with no output from init.  (I also tried adding
> "init=/bin/bash" to the kernel command line and it still hung after the
> "freeing unused kernel memory" line, with no output from bash.  Pressed
> a lot of keys, nothing echoed back.)
> 
> This is an improvement over hanging earlier in the boot, but userspace
> isn't really happy at the moment.
> 
> I'm booting all this under kvm or qemu, by the way:
> 
> qemu-system-x86_64 -m 1024 -kernel arch/x86/boot/bzImage \
>   -hda ~/sid.ext3 -append "root=/dev/hda rw"
> 
> Sometimes with init=/bin/bash in that last quoted bit.  The root
> filesystem's debian sid but that's probably not relevant because it
> worked fine with .38.

Does this help?
Rob Landley - March 29, 2011, 2:13 p.m.
On 03/29/2011 08:59 AM, Jens Axboe wrote:
> On 2011-03-29 10:52, Rob Landley wrote:
>> I'm booting all this under kvm or qemu, by the way:
>>
>> qemu-system-x86_64 -m 1024 -kernel arch/x86/boot/bzImage \
>>   -hda ~/sid.ext3 -append "root=/dev/hda rw"
>>
>> Sometimes with init=/bin/bash in that last quoted bit.  The root
>> filesystem's debian sid but that's probably not relevant because it
>> worked fine with .38.
> 
> Does this help?
> 
> diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
> index 0e406d73..ca27d30 100644
> --- a/drivers/ide/ide-io.c
> +++ b/drivers/ide/ide-io.c
> @@ -570,8 +570,7 @@ void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq)
>  	spin_unlock_irqrestore(q->queue_lock, flags);
>  
>  	/* Use 3ms as that was the old plug delay */
> -	if (rq)
> -		blk_delay_queue(q, 3);
> +	blk_delay_queue(q, 3);
>  }
>  
>  static int drive_is_ready(ide_drive_t *drive)
> 

Nope, still hung the same way.

Rob
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jens Axboe - March 29, 2011, 2:16 p.m.
On 2011-03-29 16:13, Rob Landley wrote:
> On 03/29/2011 08:59 AM, Jens Axboe wrote:
>> On 2011-03-29 10:52, Rob Landley wrote:
>>> I'm booting all this under kvm or qemu, by the way:
>>>
>>> qemu-system-x86_64 -m 1024 -kernel arch/x86/boot/bzImage \
>>>   -hda ~/sid.ext3 -append "root=/dev/hda rw"
>>>
>>> Sometimes with init=/bin/bash in that last quoted bit.  The root
>>> filesystem's debian sid but that's probably not relevant because it
>>> worked fine with .38.
>>
>> Does this help?
>>
>> diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
>> index 0e406d73..ca27d30 100644
>> --- a/drivers/ide/ide-io.c
>> +++ b/drivers/ide/ide-io.c
>> @@ -570,8 +570,7 @@ void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq)
>>  	spin_unlock_irqrestore(q->queue_lock, flags);
>>  
>>  	/* Use 3ms as that was the old plug delay */
>> -	if (rq)
>> -		blk_delay_queue(q, 3);
>> +	blk_delay_queue(q, 3);
>>  }
>>  
>>  static int drive_is_ready(ide_drive_t *drive)
>>
> 
> Nope, still hung the same way.

Funky. I'll try and reproduce this tonight.
Pete Clements - March 29, 2011, 3:51 p.m.
Quoting Jens Axboe
  > 
  > On 2011-03-29 16:13, Rob Landley wrote:
  > > On 03/29/2011 08:59 AM, Jens Axboe wrote:
  > >> On 2011-03-29 10:52, Rob Landley wrote:
  > >>> I'm booting all this under kvm or qemu, by the way:
  > >>>
  > >>> qemu-system-x86_64 -m 1024 -kernel arch/x86/boot/bzImage \
  > >>>   -hda ~/sid.ext3 -append "root=/dev/hda rw"
  > >>>
  > >>> Sometimes with init=/bin/bash in that last quoted bit.  The root
  > >>> filesystem's debian sid but that's probably not relevant because it
  > >>> worked fine with .38.
  > >>
  > >> Does this help?
  > >>
  > >> diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
  > >> index 0e406d73..ca27d30 100644
  > >> --- a/drivers/ide/ide-io.c
  > >> +++ b/drivers/ide/ide-io.c
  > >> @@ -570,8 +570,7 @@ void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq)
  > >>  	spin_unlock_irqrestore(q->queue_lock, flags);
  > >>  
  > >>  	/* Use 3ms as that was the old plug delay */
  > >> -	if (rq)
  > >> -		blk_delay_queue(q, 3);
  > >> +	blk_delay_queue(q, 3);
  > >>  }
  > >>  
  > >>  static int drive_is_ready(ide_drive_t *drive)
  > >>
  > > 
  > > Nope, still hung the same way.
  > 
  > Funky. I'll try and reproduce this tonight.
  > 
  > -- 
  > Jens Axboe
  > 

I have had a similiar problem (reported earlier) unable to boot.
With git15-18 hung with IDE drives (hda), git19-21 moved the hang down to
the IDE CDROM (hdc). Applied the above patch and now booted into git21 without
any hang and all appears ok.  This is i386, UP. 

--
Pete Clements
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rob Landley - March 30, 2011, 6:06 a.m.
On 03/29/2011 10:51 AM, Pete Clements wrote:
> Quoting Jens Axboe
>   > 
>   > On 2011-03-29 16:13, Rob Landley wrote:
>   > > On 03/29/2011 08:59 AM, Jens Axboe wrote:
>   > >> On 2011-03-29 10:52, Rob Landley wrote:
>   > >>> I'm booting all this under kvm or qemu, by the way:
>   > >>>
>   > >>> qemu-system-x86_64 -m 1024 -kernel arch/x86/boot/bzImage \
>   > >>>   -hda ~/sid.ext3 -append "root=/dev/hda rw"
>   > >>>
>   > >>> Sometimes with init=/bin/bash in that last quoted bit.  The root
>   > >>> filesystem's debian sid but that's probably not relevant because it
>   > >>> worked fine with .38.
>   > >>
>   > >> Does this help?
>   > >>
>   > >> diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
>   > >> index 0e406d73..ca27d30 100644
>   > >> --- a/drivers/ide/ide-io.c
>   > >> +++ b/drivers/ide/ide-io.c
>   > >> @@ -570,8 +570,7 @@ void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq)
>   > >>  	spin_unlock_irqrestore(q->queue_lock, flags);
>   > >>  
>   > >>  	/* Use 3ms as that was the old plug delay */
>   > >> -	if (rq)
>   > >> -		blk_delay_queue(q, 3);
>   > >> +	blk_delay_queue(q, 3);
>   > >>  }
>   > >>  
>   > >>  static int drive_is_ready(ide_drive_t *drive)
>   > >>
>   > > 
>   > > Nope, still hung the same way.
>   > 
>   > Funky. I'll try and reproduce this tonight.
>   > 
>   > -- 
>   > Jens Axboe
>   > 
> 
> I have had a similiar problem (reported earlier) unable to boot.
> With git15-18 hung with IDE drives (hda), git19-21 moved the hang down to
> the IDE CDROM (hdc). Applied the above patch and now booted into git21 without
> any hang and all appears ok.

It may have made it better for me, it's hard to tell.

I did a fresh pull, re-applied the patch, and tried again with
init=/bin/sh and it booted to the shell prompt... which then hung when I
did "ls -l /".

If I let it boot normally, init announces itself, gives a spurious
warning about a fstab field (which it's been doing for a while, my fault
but harmless), then hangs.

> This is i386, UP.

I'm doing x86-64 SMP.

Rob
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index 0e406d73..ca27d30 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -570,8 +570,7 @@  void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq)
 	spin_unlock_irqrestore(q->queue_lock, flags);
 
 	/* Use 3ms as that was the old plug delay */
-	if (rq)
-		blk_delay_queue(q, 3);
+	blk_delay_queue(q, 3);
 }
 
 static int drive_is_ready(ide_drive_t *drive)