diff mbox

[2/2,MTD] Call bdi_init() and bdi_register()

Message ID 20100426163126.GD4364@logfs.org
State New, archived
Headers show

Commit Message

Jörn Engel April 26, 2010, 4:31 p.m. UTC
Otherwise we hit a BUG_ON in bdi_queue_work().

Signed-off-by: Joern Engel <joern@logfs.org>
---
 drivers/mtd/mtdcore.c |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)

Comments

Jens Axboe April 26, 2010, 5:02 p.m. UTC | #1
On Mon, Apr 26 2010, Jörn Engel wrote:
> Otherwise we hit a BUG_ON in bdi_queue_work().
> 
> Signed-off-by: Joern Engel <joern@logfs.org>
> ---
>  drivers/mtd/mtdcore.c |   17 ++++++++++++++++-
>  1 files changed, 16 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
> index cb4858b..8dd3e46 100644
> --- a/drivers/mtd/mtdcore.c
> +++ b/drivers/mtd/mtdcore.c
> @@ -322,6 +322,12 @@ int add_mtd_device(struct mtd_info *mtd)
>  		if (!mtd_table[i]) {
>  			struct mtd_notifier *not;
>  
> +			err = bdi_register(mtd->backing_dev_info, NULL, "mtd%d",
> +					i);
> +			if (err) {
> +				/* We lose the errno information :( */
> +				break;
> +			}

This is not a good idea, even if it'll currently work.

> @@ -692,6 +698,15 @@ static int __init init_mtd(void)
>  	int ret;
>  	ret = class_register(&mtd_class);
>  
> +	ret = bdi_init(&mtd_bdi_unmappable);
> +	if (ret)
> +		return ret;
> +	ret = bdi_init(&mtd_bdi_ro_mappable);
> +	if (ret)
> +		return ret;
> +	ret = bdi_init(&mtd_bdi_rw_mappable);
> +	if (ret)
> +		return ret;

Do the bdi_register() here as well.
Jörn Engel April 26, 2010, 5:12 p.m. UTC | #2
On Mon, 26 April 2010 19:02:48 +0200, Jens Axboe wrote:
> On Mon, Apr 26 2010, Jörn Engel wrote:
> > Otherwise we hit a BUG_ON in bdi_queue_work().
> > 
> > Signed-off-by: Joern Engel <joern@logfs.org>
> > ---
> >  drivers/mtd/mtdcore.c |   17 ++++++++++++++++-
> >  1 files changed, 16 insertions(+), 1 deletions(-)
> > 
> > diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
> > index cb4858b..8dd3e46 100644
> > --- a/drivers/mtd/mtdcore.c
> > +++ b/drivers/mtd/mtdcore.c
> > @@ -322,6 +322,12 @@ int add_mtd_device(struct mtd_info *mtd)
> >  		if (!mtd_table[i]) {
> >  			struct mtd_notifier *not;
> >  
> > +			err = bdi_register(mtd->backing_dev_info, NULL, "mtd%d",
> > +					i);
> > +			if (err) {
> > +				/* We lose the errno information :( */
> > +				break;
> > +			}
> 
> This is not a good idea, even if it'll currently work.
> 
> > @@ -692,6 +698,15 @@ static int __init init_mtd(void)
> >  	int ret;
> >  	ret = class_register(&mtd_class);
> >  
> > +	ret = bdi_init(&mtd_bdi_unmappable);
> > +	if (ret)
> > +		return ret;
> > +	ret = bdi_init(&mtd_bdi_ro_mappable);
> > +	if (ret)
> > +		return ret;
> > +	ret = bdi_init(&mtd_bdi_rw_mappable);
> > +	if (ret)
> > +		return ret;
> 
> Do the bdi_register() here as well.

-ENOBRAIN

Initially I wanted to do just than.  Then I looked at the block layer
and thought we could create one backing_dev_info per mtd as well.  Not
necessarily a bad if I would actually _create_ them and not just reuse
the same ones over and over again.

Jörn
Jens Axboe April 27, 2010, 7:52 a.m. UTC | #3
On Mon, Apr 26 2010, Jörn Engel wrote:
> On Mon, 26 April 2010 19:02:48 +0200, Jens Axboe wrote:
> > On Mon, Apr 26 2010, Jörn Engel wrote:
> > > Otherwise we hit a BUG_ON in bdi_queue_work().
> > > 
> > > Signed-off-by: Joern Engel <joern@logfs.org>
> > > ---
> > >  drivers/mtd/mtdcore.c |   17 ++++++++++++++++-
> > >  1 files changed, 16 insertions(+), 1 deletions(-)
> > > 
> > > diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
> > > index cb4858b..8dd3e46 100644
> > > --- a/drivers/mtd/mtdcore.c
> > > +++ b/drivers/mtd/mtdcore.c
> > > @@ -322,6 +322,12 @@ int add_mtd_device(struct mtd_info *mtd)
> > >  		if (!mtd_table[i]) {
> > >  			struct mtd_notifier *not;
> > >  
> > > +			err = bdi_register(mtd->backing_dev_info, NULL, "mtd%d",
> > > +					i);
> > > +			if (err) {
> > > +				/* We lose the errno information :( */
> > > +				break;
> > > +			}
> > 
> > This is not a good idea, even if it'll currently work.
> > 
> > > @@ -692,6 +698,15 @@ static int __init init_mtd(void)
> > >  	int ret;
> > >  	ret = class_register(&mtd_class);
> > >  
> > > +	ret = bdi_init(&mtd_bdi_unmappable);
> > > +	if (ret)
> > > +		return ret;
> > > +	ret = bdi_init(&mtd_bdi_ro_mappable);
> > > +	if (ret)
> > > +		return ret;
> > > +	ret = bdi_init(&mtd_bdi_rw_mappable);
> > > +	if (ret)
> > > +		return ret;
> > 
> > Do the bdi_register() here as well.
> 
> -ENOBRAIN
> 
> Initially I wanted to do just than.  Then I looked at the block layer
> and thought we could create one backing_dev_info per mtd as well.  Not
> necessarily a bad if I would actually _create_ them and not just reuse
> the same ones over and over again.

I cooked up that patch myself, here:

http://git.kernel.dk/?p=linux-2.6-block.git;a=commit;h=0661b1ac5d48eb47c8a5948c0554fea25e0895ab

Care to give it a quick spin?
Paolo Minazzi April 27, 2010, 8:11 a.m. UTC | #4
I Jens,
I'm Paolo Minazzi and I have a problem with logfs and 2.6.34rc5.
Can I apply the patch to rc5 and make a test on my ARM board ?
Paolo



On Tue, Apr 27, 2010 at 9:52 AM, Jens Axboe <jens.axboe@oracle.com> wrote:
> On Mon, Apr 26 2010, Jörn Engel wrote:
>> On Mon, 26 April 2010 19:02:48 +0200, Jens Axboe wrote:
>> > On Mon, Apr 26 2010, Jörn Engel wrote:
>> > > Otherwise we hit a BUG_ON in bdi_queue_work().
>> > >
>> > > Signed-off-by: Joern Engel <joern@logfs.org>
>> > > ---
>> > >  drivers/mtd/mtdcore.c |   17 ++++++++++++++++-
>> > >  1 files changed, 16 insertions(+), 1 deletions(-)
>> > >
>> > > diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
>> > > index cb4858b..8dd3e46 100644
>> > > --- a/drivers/mtd/mtdcore.c
>> > > +++ b/drivers/mtd/mtdcore.c
>> > > @@ -322,6 +322,12 @@ int add_mtd_device(struct mtd_info *mtd)
>> > >           if (!mtd_table[i]) {
>> > >                   struct mtd_notifier *not;
>> > >
>> > > +                 err = bdi_register(mtd->backing_dev_info, NULL, "mtd%d",
>> > > +                                 i);
>> > > +                 if (err) {
>> > > +                         /* We lose the errno information :( */
>> > > +                         break;
>> > > +                 }
>> >
>> > This is not a good idea, even if it'll currently work.
>> >
>> > > @@ -692,6 +698,15 @@ static int __init init_mtd(void)
>> > >   int ret;
>> > >   ret = class_register(&mtd_class);
>> > >
>> > > + ret = bdi_init(&mtd_bdi_unmappable);
>> > > + if (ret)
>> > > +         return ret;
>> > > + ret = bdi_init(&mtd_bdi_ro_mappable);
>> > > + if (ret)
>> > > +         return ret;
>> > > + ret = bdi_init(&mtd_bdi_rw_mappable);
>> > > + if (ret)
>> > > +         return ret;
>> >
>> > Do the bdi_register() here as well.
>>
>> -ENOBRAIN
>>
>> Initially I wanted to do just than.  Then I looked at the block layer
>> and thought we could create one backing_dev_info per mtd as well.  Not
>> necessarily a bad if I would actually _create_ them and not just reuse
>> the same ones over and over again.
>
> I cooked up that patch myself, here:
>
> http://git.kernel.dk/?p=linux-2.6-block.git;a=commit;h=0661b1ac5d48eb47c8a5948c0554fea25e0895ab
>
> Care to give it a quick spin?
>
> --
> Jens Axboe
>
>
Paolo Minazzi April 27, 2010, 9:01 a.m. UTC | #5
I have tried this patch.
I have enabled LOGFS, but not mounted partition with it.
/dev/mtdblock1 is my romfs root partition and it is OK.

The problem is that init cannot mount my /dev/mtdblock1 romfs root.

This is the fault :
Platform: Cirrus Logic EDB9315A Board (ARM920T) Rev A
Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
       |----------------------------------------------
Raw file loaded 0x00080000-0x001dce6b, assumed entry at
0x00080000-----------------------------------------------------------
RedBoot> exec -s 0x00b00000 -r 0x00a00000 -c "root=/dev/mtdblock1
console=ttyAM console=tty1"--------------------------------
ENTRY=0xc0008000-------------------------------------------------------------------------------------------------------------
LENGTH=0x00300000------------------------------------------------------------------------------------------------------------
BASE_ADDR=0x00080000---------------------------------------------------------------------------------------------------------
Using base address 0x00080000 and length
0x00300000--------------------------------------------------------------------------
Uncompressing Linux... done, booting the kernel.
Linux version 2.6.34-rc5 (root@darkstar) (gcc version 3.4.3) #18 Tue
Apr 27 10:55:55 CEST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: Cirrus Logic EDB9315A Evaluation Board
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512
Kernel command line: root=/dev/mtdblock1 console=ttyAM console=tty1
PID hash table entries: 512 (order: -1, 2048 bytes)
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 128MB = 128MB total
Memory: 126928k/126928k available, 4144k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    DMA     : 0xffc00000 - 0xffe00000   (   2 MB)
    vmalloc : 0xc8800000 - 0xfe800000   ( 864 MB)
    lowmem  : 0xc0000000 - 0xc8000000   ( 128 MB)
    modules : 0xbf000000 - 0xc0000000   (  16 MB)
      .init : 0xc0008000 - 0xc0036000   ( 184 kB)
      .text : 0xc0036000 - 0xc02ab000   (2516 kB)
      .data : 0xc02ac000 - 0xc02c4e00   ( 100 kB)
SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Hierarchical RCU implementation.
NR_IRQS:120
VIC @fefb0000: id 0x00041190, vendor 0x41
VIC @fefc0000: id 0x00041190, vendor 0x41
Console: colour dummy device 80x30
console [tty1] enabled
Calibrating delay loop... 99.73 BogoMIPS (lpj=498688)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
ep93xx clock: PLL1 running at 200 MHz, PLL2 at 48 MHz
ep93xx clock: FCLK 200 MHz, HCLK 100 MHz, PCLK 50 MHz
ep93xx dma_m2p: M2P DMA subsystem initialized
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
***REGISTER LOGFS
***REGISTER LOGFS DONE ret=0
ROMFS MTD (C) 2007 Red Hat, Inc.
msgmni has been set to 247
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
Console: switching to colour frame buffer device 100x37
graphics fb0: registered. Mode = 800x600-16
Serial: AMBA driver
apb:uart1: ttyAM0 at MMIO 0x808c0000 (irq = 52) is a AMBA
console [ttyAM0] enabled
apb:uart2: ttyAM1 at MMIO 0x808d0000 (irq = 54) is a AMBA
apb:uart3: ttyAM2 at MMIO 0x808e0000 (irq = 55) is a AMBA
dev->num_resources=1
physmap platform flash device: 02000000 at 60000000
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
physmap-flash.0: Found 1 x16 devices at 0x1000000 in 16-bit bank
 Intel/Sharp Extended Query Table at 0x0031
 Intel/Sharp Extended Query Table at 0x0031
Using buffer write method
cfi_cmdset_0001: Erase suspend on write enabled
cmdlinepart partition parsing not available
Searching for RedBoot partition table in physmap-flash.0 at offset 0x1fe0000
6 RedBoot partitions found on MTD device physmap-flash.0
Creating 6 MTD partitions on "physmap-flash.0":
0x000000000000-0x000000040000 : "RedBoot"
0x000000040000-0x000000b40000 : "ramdisk"
0x000000b40000-0x000000e40000 : "zImage"
0x000000e40000-0x000001fc0000 : "jffs2"
0x000001fc0000-0x000001fe0000 : "RedBoot config"
0x000001fe0000-0x000002000000 : "FIS directory"
PPP generic driver version 2.4.2
PPP Deflate Compression module registered
PPP BSD Compression module registered
ep93xx-eth version 0.1 loading
eth0: ep93xx on-chip ethernet, IRQ 39, 00:00:11:22:33:36
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
ep93xx-ohci ep93xx-ohci: EP93xx OHCI
ep93xx-ohci ep93xx-ohci: new USB bus registered, assigned bus number 1
ep93xx-ohci ep93xx-ohci: irq 56, io mem 0x80020000
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 3 ports detected
usbcore: registered new interface driver cdc_acm
cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and
ISDN adapters
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
ep93xx-rtc ep93xx-rtc: rtc core: registered ep93xx-rtc as rtc0
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
TCP cubic registered
NET: Registered protocol family 17
Last power-down at UTC 08:47:16 on 27/04/2010
ep93xx-rtc ep93xx-rtc: setting system clock to 2010-04-27 08:47:16 UTC
(1272358036)
VFS: Cannot open root device "mtdblock1" or unknown-block(31,1)
Please append a correct "root=" boot option; here are the available partitions:
1f00             256 mtdblock0 (driver?)
1f01           11264 mtdblock1 (driver?)
1f02            3072 mtdblock2 (driver?)
1f03           17920 mtdblock3 (driver?)
1f04             128 mtdblock4 (driver?)
1f05             128 mtdblock5 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,1)
Backtrace:
[<c003a3dc>] (dump_backtrace+0x0/0x12c) from [<c003a520>] (dump_stack+0x18/0x1c)
 r7:c7c11000 r6:fffffffb r5:c7c11000 r4:00000000
[<c003a508>] (dump_stack+0x0/0x1c) from [<c0046628>] (panic+0x3c/0xc4)
[<c00465ec>] (panic+0x0/0xc4) from [<c0008d58>] (mount_block_root+0x110/0x2e8)
 r3:00000000 r2:20000013 r1:c7c27f58 r0:c0276b44
[<c0008c48>] (mount_block_root+0x0/0x2e8) from [<c0008f84>]
(mount_root+0x54/0x6c)
[<c0008f30>] (mount_root+0x0/0x6c) from [<c0009094>]
(prepare_namespace+0xf8/0x194)
 r5:c001a56c r4:c001a570
[<c0008f9c>] (prepare_namespace+0x0/0x194) from [<c0008aa4>]
(kernel_init+0x114/0x15c)
 r6:c0019b0c r5:c0019d5c r4:c02c4e18
[<c0008990>] (kernel_init+0x0/0x15c) from [<c0048e98>] (do_exit+0x0/0x628)
 r6:00000000 r5:00000000 r4:00000000



If I disable logfs, my root /dev/mtdblock1 is mounted correclty.

Any ideas ?

Paolo









On Mon, Apr 26, 2010 at 6:31 PM, Jörn Engel <joern@logfs.org> wrote:
> Otherwise we hit a BUG_ON in bdi_queue_work().
>
> Signed-off-by: Joern Engel <joern@logfs.org>
> ---
>  drivers/mtd/mtdcore.c |   17 ++++++++++++++++-
>  1 files changed, 16 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
> index cb4858b..8dd3e46 100644
> --- a/drivers/mtd/mtdcore.c
> +++ b/drivers/mtd/mtdcore.c
> @@ -299,7 +299,7 @@ static struct device_type mtd_devtype = {
>
>  int add_mtd_device(struct mtd_info *mtd)
>  {
> -       int i;
> +       int i, err;
>
>        if (!mtd->backing_dev_info) {
>                switch (mtd->type) {
> @@ -322,6 +322,12 @@ int add_mtd_device(struct mtd_info *mtd)
>                if (!mtd_table[i]) {
>                        struct mtd_notifier *not;
>
> +                       err = bdi_register(mtd->backing_dev_info, NULL, "mtd%d",
> +                                       i);
> +                       if (err) {
> +                               /* We lose the errno information :( */
> +                               break;
> +                       }
>                        mtd_table[i] = mtd;
>                        mtd->index = i;
>                        mtd->usecount = 0;
> @@ -692,6 +698,15 @@ static int __init init_mtd(void)
>        int ret;
>        ret = class_register(&mtd_class);
>
> +       ret = bdi_init(&mtd_bdi_unmappable);
> +       if (ret)
> +               return ret;
> +       ret = bdi_init(&mtd_bdi_ro_mappable);
> +       if (ret)
> +               return ret;
> +       ret = bdi_init(&mtd_bdi_rw_mappable);
> +       if (ret)
> +               return ret;
>        if (ret) {
>                pr_err("Error registering mtd class: %d\n", ret);
>                return ret;
> --
> 1.6.2.1
>
>
Jens Axboe April 27, 2010, 9:16 a.m. UTC | #6
On Tue, Apr 27 2010, Paolo Minazzi wrote:
> I have tried this patch.
> I have enabled LOGFS, but not mounted partition with it.
> /dev/mtdblock1 is my romfs root partition and it is OK.
> 
> The problem is that init cannot mount my /dev/mtdblock1 romfs root.
> 
> This is the fault :
> Platform: Cirrus Logic EDB9315A Board (ARM920T) Rev A
> Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
>        |----------------------------------------------
> Raw file loaded 0x00080000-0x001dce6b, assumed entry at
> 0x00080000-----------------------------------------------------------
> RedBoot> exec -s 0x00b00000 -r 0x00a00000 -c "root=/dev/mtdblock1
> console=ttyAM console=tty1"--------------------------------
> ENTRY=0xc0008000-------------------------------------------------------------------------------------------------------------
> LENGTH=0x00300000------------------------------------------------------------------------------------------------------------
> BASE_ADDR=0x00080000---------------------------------------------------------------------------------------------------------
> Using base address 0x00080000 and length
> 0x00300000--------------------------------------------------------------------------
> Uncompressing Linux... done, booting the kernel.
> Linux version 2.6.34-rc5 (root@darkstar) (gcc version 3.4.3) #18 Tue
> Apr 27 10:55:55 CEST 2010
> CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
> CPU: VIVT data cache, VIVT instruction cache
> Machine: Cirrus Logic EDB9315A Evaluation Board
> Memory policy: ECC disabled, Data cache writeback
> Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512
> Kernel command line: root=/dev/mtdblock1 console=ttyAM console=tty1
> PID hash table entries: 512 (order: -1, 2048 bytes)
> Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
> Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
> Memory: 128MB = 128MB total
> Memory: 126928k/126928k available, 4144k reserved, 0K highmem
> Virtual kernel memory layout:
>     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
>     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
>     DMA     : 0xffc00000 - 0xffe00000   (   2 MB)
>     vmalloc : 0xc8800000 - 0xfe800000   ( 864 MB)
>     lowmem  : 0xc0000000 - 0xc8000000   ( 128 MB)
>     modules : 0xbf000000 - 0xc0000000   (  16 MB)
>       .init : 0xc0008000 - 0xc0036000   ( 184 kB)
>       .text : 0xc0036000 - 0xc02ab000   (2516 kB)
>       .data : 0xc02ac000 - 0xc02c4e00   ( 100 kB)
> SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
> Hierarchical RCU implementation.
> NR_IRQS:120
> VIC @fefb0000: id 0x00041190, vendor 0x41
> VIC @fefc0000: id 0x00041190, vendor 0x41
> Console: colour dummy device 80x30
> console [tty1] enabled
> Calibrating delay loop... 99.73 BogoMIPS (lpj=498688)
> Mount-cache hash table entries: 512
> CPU: Testing write buffer coherency: ok
> NET: Registered protocol family 16
> ep93xx clock: PLL1 running at 200 MHz, PLL2 at 48 MHz
> ep93xx clock: FCLK 200 MHz, HCLK 100 MHz, PCLK 50 MHz
> ep93xx dma_m2p: M2P DMA subsystem initialized
> bio: create slab <bio-0> at 0
> SCSI subsystem initialized
> usbcore: registered new interface driver usbfs
> usbcore: registered new interface driver hub
> usbcore: registered new device driver usb
> NET: Registered protocol family 2
> IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
> TCP established hash table entries: 4096 (order: 3, 32768 bytes)
> TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
> TCP: Hash tables configured (established 4096 bind 4096)
> TCP reno registered
> UDP hash table entries: 256 (order: 0, 4096 bytes)
> UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
> NET: Registered protocol family 1
> JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
> ***REGISTER LOGFS
> ***REGISTER LOGFS DONE ret=0
> ROMFS MTD (C) 2007 Red Hat, Inc.
> msgmni has been set to 247
> io scheduler noop registered
> io scheduler deadline registered
> io scheduler cfq registered (default)
> Console: switching to colour frame buffer device 100x37
> graphics fb0: registered. Mode = 800x600-16
> Serial: AMBA driver
> apb:uart1: ttyAM0 at MMIO 0x808c0000 (irq = 52) is a AMBA
> console [ttyAM0] enabled
> apb:uart2: ttyAM1 at MMIO 0x808d0000 (irq = 54) is a AMBA
> apb:uart3: ttyAM2 at MMIO 0x808e0000 (irq = 55) is a AMBA
> dev->num_resources=1
> physmap platform flash device: 02000000 at 60000000
> physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
> physmap-flash.0: Found 1 x16 devices at 0x1000000 in 16-bit bank
>  Intel/Sharp Extended Query Table at 0x0031
>  Intel/Sharp Extended Query Table at 0x0031
> Using buffer write method
> cfi_cmdset_0001: Erase suspend on write enabled
> cmdlinepart partition parsing not available
> Searching for RedBoot partition table in physmap-flash.0 at offset 0x1fe0000
> 6 RedBoot partitions found on MTD device physmap-flash.0
> Creating 6 MTD partitions on "physmap-flash.0":
> 0x000000000000-0x000000040000 : "RedBoot"
> 0x000000040000-0x000000b40000 : "ramdisk"
> 0x000000b40000-0x000000e40000 : "zImage"
> 0x000000e40000-0x000001fc0000 : "jffs2"
> 0x000001fc0000-0x000001fe0000 : "RedBoot config"
> 0x000001fe0000-0x000002000000 : "FIS directory"
> PPP generic driver version 2.4.2
> PPP Deflate Compression module registered
> PPP BSD Compression module registered
> ep93xx-eth version 0.1 loading
> eth0: ep93xx on-chip ethernet, IRQ 39, 00:00:11:22:33:36
> ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
> ep93xx-ohci ep93xx-ohci: EP93xx OHCI
> ep93xx-ohci ep93xx-ohci: new USB bus registered, assigned bus number 1
> ep93xx-ohci ep93xx-ohci: irq 56, io mem 0x80020000
> hub 1-0:1.0: USB hub found
> hub 1-0:1.0: 3 ports detected
> usbcore: registered new interface driver cdc_acm
> cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and
> ISDN adapters
> Initializing USB Mass Storage driver...
> usbcore: registered new interface driver usb-storage
> USB Mass Storage support registered.
> ep93xx-rtc ep93xx-rtc: rtc core: registered ep93xx-rtc as rtc0
> usbcore: registered new interface driver usbhid
> usbhid: USB HID core driver
> TCP cubic registered
> NET: Registered protocol family 17
> Last power-down at UTC 08:47:16 on 27/04/2010
> ep93xx-rtc ep93xx-rtc: setting system clock to 2010-04-27 08:47:16 UTC
> (1272358036)
> VFS: Cannot open root device "mtdblock1" or unknown-block(31,1)
> Please append a correct "root=" boot option; here are the available partitions:
> 1f00             256 mtdblock0 (driver?)
> 1f01           11264 mtdblock1 (driver?)
> 1f02            3072 mtdblock2 (driver?)
> 1f03           17920 mtdblock3 (driver?)
> 1f04             128 mtdblock4 (driver?)
> 1f05             128 mtdblock5 (driver?)
> Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,1)
> Backtrace:
> [<c003a3dc>] (dump_backtrace+0x0/0x12c) from [<c003a520>] (dump_stack+0x18/0x1c)
>  r7:c7c11000 r6:fffffffb r5:c7c11000 r4:00000000
> [<c003a508>] (dump_stack+0x0/0x1c) from [<c0046628>] (panic+0x3c/0xc4)
> [<c00465ec>] (panic+0x0/0xc4) from [<c0008d58>] (mount_block_root+0x110/0x2e8)
>  r3:00000000 r2:20000013 r1:c7c27f58 r0:c0276b44
> [<c0008c48>] (mount_block_root+0x0/0x2e8) from [<c0008f84>]
> (mount_root+0x54/0x6c)
> [<c0008f30>] (mount_root+0x0/0x6c) from [<c0009094>]
> (prepare_namespace+0xf8/0x194)
>  r5:c001a56c r4:c001a570
> [<c0008f9c>] (prepare_namespace+0x0/0x194) from [<c0008aa4>]
> (kernel_init+0x114/0x15c)
>  r6:c0019b0c r5:c0019d5c r4:c02c4e18
> [<c0008990>] (kernel_init+0x0/0x15c) from [<c0048e98>] (do_exit+0x0/0x628)
>  r6:00000000 r5:00000000 r4:00000000
> 
> 
> 
> If I disable logfs, my root /dev/mtdblock1 is mounted correclty.

So this issue looks unrelated, but a bug none the less (if just enabling
logfs breaks the mount).
Paolo Minazzi April 27, 2010, 9:26 a.m. UTC | #7
To be precise, I say :

- downloaded 2.6.34rc5
- apply the jens patch
- the logfs code is the code in the 2.6.34rc5 (I have no applied other
jorn patch)

Paolo

On Tue, Apr 27, 2010 at 11:16 AM, Jens Axboe <jens.axboe@oracle.com> wrote:
> On Tue, Apr 27 2010, Paolo Minazzi wrote:
>> I have tried this patch.
>> I have enabled LOGFS, but not mounted partition with it.
>> /dev/mtdblock1 is my romfs root partition and it is OK.
>>
>> The problem is that init cannot mount my /dev/mtdblock1 romfs root.
>>
>> This is the fault :
>> Platform: Cirrus Logic EDB9315A Board (ARM920T) Rev A
>> Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
>>        |----------------------------------------------
>> Raw file loaded 0x00080000-0x001dce6b, assumed entry at
>> 0x00080000-----------------------------------------------------------
>> RedBoot> exec -s 0x00b00000 -r 0x00a00000 -c "root=/dev/mtdblock1
>> console=ttyAM console=tty1"--------------------------------
>> ENTRY=0xc0008000-------------------------------------------------------------------------------------------------------------
>> LENGTH=0x00300000------------------------------------------------------------------------------------------------------------
>> BASE_ADDR=0x00080000---------------------------------------------------------------------------------------------------------
>> Using base address 0x00080000 and length
>> 0x00300000--------------------------------------------------------------------------
>> Uncompressing Linux... done, booting the kernel.
>> Linux version 2.6.34-rc5 (root@darkstar) (gcc version 3.4.3) #18 Tue
>> Apr 27 10:55:55 CEST 2010
>> CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
>> CPU: VIVT data cache, VIVT instruction cache
>> Machine: Cirrus Logic EDB9315A Evaluation Board
>> Memory policy: ECC disabled, Data cache writeback
>> Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512
>> Kernel command line: root=/dev/mtdblock1 console=ttyAM console=tty1
>> PID hash table entries: 512 (order: -1, 2048 bytes)
>> Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
>> Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
>> Memory: 128MB = 128MB total
>> Memory: 126928k/126928k available, 4144k reserved, 0K highmem
>> Virtual kernel memory layout:
>>     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
>>     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
>>     DMA     : 0xffc00000 - 0xffe00000   (   2 MB)
>>     vmalloc : 0xc8800000 - 0xfe800000   ( 864 MB)
>>     lowmem  : 0xc0000000 - 0xc8000000   ( 128 MB)
>>     modules : 0xbf000000 - 0xc0000000   (  16 MB)
>>       .init : 0xc0008000 - 0xc0036000   ( 184 kB)
>>       .text : 0xc0036000 - 0xc02ab000   (2516 kB)
>>       .data : 0xc02ac000 - 0xc02c4e00   ( 100 kB)
>> SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
>> Hierarchical RCU implementation.
>> NR_IRQS:120
>> VIC @fefb0000: id 0x00041190, vendor 0x41
>> VIC @fefc0000: id 0x00041190, vendor 0x41
>> Console: colour dummy device 80x30
>> console [tty1] enabled
>> Calibrating delay loop... 99.73 BogoMIPS (lpj=498688)
>> Mount-cache hash table entries: 512
>> CPU: Testing write buffer coherency: ok
>> NET: Registered protocol family 16
>> ep93xx clock: PLL1 running at 200 MHz, PLL2 at 48 MHz
>> ep93xx clock: FCLK 200 MHz, HCLK 100 MHz, PCLK 50 MHz
>> ep93xx dma_m2p: M2P DMA subsystem initialized
>> bio: create slab <bio-0> at 0
>> SCSI subsystem initialized
>> usbcore: registered new interface driver usbfs
>> usbcore: registered new interface driver hub
>> usbcore: registered new device driver usb
>> NET: Registered protocol family 2
>> IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
>> TCP established hash table entries: 4096 (order: 3, 32768 bytes)
>> TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
>> TCP: Hash tables configured (established 4096 bind 4096)
>> TCP reno registered
>> UDP hash table entries: 256 (order: 0, 4096 bytes)
>> UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
>> NET: Registered protocol family 1
>> JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
>> ***REGISTER LOGFS
>> ***REGISTER LOGFS DONE ret=0
>> ROMFS MTD (C) 2007 Red Hat, Inc.
>> msgmni has been set to 247
>> io scheduler noop registered
>> io scheduler deadline registered
>> io scheduler cfq registered (default)
>> Console: switching to colour frame buffer device 100x37
>> graphics fb0: registered. Mode = 800x600-16
>> Serial: AMBA driver
>> apb:uart1: ttyAM0 at MMIO 0x808c0000 (irq = 52) is a AMBA
>> console [ttyAM0] enabled
>> apb:uart2: ttyAM1 at MMIO 0x808d0000 (irq = 54) is a AMBA
>> apb:uart3: ttyAM2 at MMIO 0x808e0000 (irq = 55) is a AMBA
>> dev->num_resources=1
>> physmap platform flash device: 02000000 at 60000000
>> physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
>> physmap-flash.0: Found 1 x16 devices at 0x1000000 in 16-bit bank
>>  Intel/Sharp Extended Query Table at 0x0031
>>  Intel/Sharp Extended Query Table at 0x0031
>> Using buffer write method
>> cfi_cmdset_0001: Erase suspend on write enabled
>> cmdlinepart partition parsing not available
>> Searching for RedBoot partition table in physmap-flash.0 at offset 0x1fe0000
>> 6 RedBoot partitions found on MTD device physmap-flash.0
>> Creating 6 MTD partitions on "physmap-flash.0":
>> 0x000000000000-0x000000040000 : "RedBoot"
>> 0x000000040000-0x000000b40000 : "ramdisk"
>> 0x000000b40000-0x000000e40000 : "zImage"
>> 0x000000e40000-0x000001fc0000 : "jffs2"
>> 0x000001fc0000-0x000001fe0000 : "RedBoot config"
>> 0x000001fe0000-0x000002000000 : "FIS directory"
>> PPP generic driver version 2.4.2
>> PPP Deflate Compression module registered
>> PPP BSD Compression module registered
>> ep93xx-eth version 0.1 loading
>> eth0: ep93xx on-chip ethernet, IRQ 39, 00:00:11:22:33:36
>> ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
>> ep93xx-ohci ep93xx-ohci: EP93xx OHCI
>> ep93xx-ohci ep93xx-ohci: new USB bus registered, assigned bus number 1
>> ep93xx-ohci ep93xx-ohci: irq 56, io mem 0x80020000
>> hub 1-0:1.0: USB hub found
>> hub 1-0:1.0: 3 ports detected
>> usbcore: registered new interface driver cdc_acm
>> cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and
>> ISDN adapters
>> Initializing USB Mass Storage driver...
>> usbcore: registered new interface driver usb-storage
>> USB Mass Storage support registered.
>> ep93xx-rtc ep93xx-rtc: rtc core: registered ep93xx-rtc as rtc0
>> usbcore: registered new interface driver usbhid
>> usbhid: USB HID core driver
>> TCP cubic registered
>> NET: Registered protocol family 17
>> Last power-down at UTC 08:47:16 on 27/04/2010
>> ep93xx-rtc ep93xx-rtc: setting system clock to 2010-04-27 08:47:16 UTC
>> (1272358036)
>> VFS: Cannot open root device "mtdblock1" or unknown-block(31,1)
>> Please append a correct "root=" boot option; here are the available partitions:
>> 1f00             256 mtdblock0 (driver?)
>> 1f01           11264 mtdblock1 (driver?)
>> 1f02            3072 mtdblock2 (driver?)
>> 1f03           17920 mtdblock3 (driver?)
>> 1f04             128 mtdblock4 (driver?)
>> 1f05             128 mtdblock5 (driver?)
>> Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,1)
>> Backtrace:
>> [<c003a3dc>] (dump_backtrace+0x0/0x12c) from [<c003a520>] (dump_stack+0x18/0x1c)
>>  r7:c7c11000 r6:fffffffb r5:c7c11000 r4:00000000
>> [<c003a508>] (dump_stack+0x0/0x1c) from [<c0046628>] (panic+0x3c/0xc4)
>> [<c00465ec>] (panic+0x0/0xc4) from [<c0008d58>] (mount_block_root+0x110/0x2e8)
>>  r3:00000000 r2:20000013 r1:c7c27f58 r0:c0276b44
>> [<c0008c48>] (mount_block_root+0x0/0x2e8) from [<c0008f84>]
>> (mount_root+0x54/0x6c)
>> [<c0008f30>] (mount_root+0x0/0x6c) from [<c0009094>]
>> (prepare_namespace+0xf8/0x194)
>>  r5:c001a56c r4:c001a570
>> [<c0008f9c>] (prepare_namespace+0x0/0x194) from [<c0008aa4>]
>> (kernel_init+0x114/0x15c)
>>  r6:c0019b0c r5:c0019d5c r4:c02c4e18
>> [<c0008990>] (kernel_init+0x0/0x15c) from [<c0048e98>] (do_exit+0x0/0x628)
>>  r6:00000000 r5:00000000 r4:00000000
>>
>>
>>
>> If I disable logfs, my root /dev/mtdblock1 is mounted correclty.
>
> So this issue looks unrelated, but a bug none the less (if just enabling
> logfs breaks the mount).
>
> --
> Jens Axboe
>
>
Jens Axboe April 27, 2010, 9:29 a.m. UTC | #8
On Tue, Apr 27 2010, Paolo Minazzi wrote:
> On Tue, Apr 27, 2010 at 11:16 AM, Jens Axboe <jens.axboe@oracle.com> wrote:
> > On Tue, Apr 27 2010, Paolo Minazzi wrote:
> >> I have tried this patch.
> >> I have enabled LOGFS, but not mounted partition with it.
> >> /dev/mtdblock1 is my romfs root partition and it is OK.
> >>
> >> The problem is that init cannot mount my /dev/mtdblock1 romfs root.
> >>
> >> This is the fault :
> >> Platform: Cirrus Logic EDB9315A Board (ARM920T) Rev A
> >> Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
> >>        |----------------------------------------------
> >> Raw file loaded 0x00080000-0x001dce6b, assumed entry at
> >> 0x00080000-----------------------------------------------------------
> >> RedBoot> exec -s 0x00b00000 -r 0x00a00000 -c "root=/dev/mtdblock1
> >> console=ttyAM console=tty1"--------------------------------
> >> ENTRY=0xc0008000-------------------------------------------------------------------------------------------------------------
> >> LENGTH=0x00300000------------------------------------------------------------------------------------------------------------
> >> BASE_ADDR=0x00080000---------------------------------------------------------------------------------------------------------
> >> Using base address 0x00080000 and length
> >> 0x00300000--------------------------------------------------------------------------
> >> Uncompressing Linux... done, booting the kernel.
> >> Linux version 2.6.34-rc5 (root@darkstar) (gcc version 3.4.3) #18 Tue
> >> Apr 27 10:55:55 CEST 2010
> >> CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
> >> CPU: VIVT data cache, VIVT instruction cache
> >> Machine: Cirrus Logic EDB9315A Evaluation Board
> >> Memory policy: ECC disabled, Data cache writeback
> >> Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512
> >> Kernel command line: root=/dev/mtdblock1 console=ttyAM console=tty1
> >> PID hash table entries: 512 (order: -1, 2048 bytes)
> >> Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
> >> Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
> >> Memory: 128MB = 128MB total
> >> Memory: 126928k/126928k available, 4144k reserved, 0K highmem
> >> Virtual kernel memory layout:
> >>     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
> >>     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
> >>     DMA     : 0xffc00000 - 0xffe00000   (   2 MB)
> >>     vmalloc : 0xc8800000 - 0xfe800000   ( 864 MB)
> >>     lowmem  : 0xc0000000 - 0xc8000000   ( 128 MB)
> >>     modules : 0xbf000000 - 0xc0000000   (  16 MB)
> >>       .init : 0xc0008000 - 0xc0036000   ( 184 kB)
> >>       .text : 0xc0036000 - 0xc02ab000   (2516 kB)
> >>       .data : 0xc02ac000 - 0xc02c4e00   ( 100 kB)
> >> SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
> >> Hierarchical RCU implementation.
> >> NR_IRQS:120
> >> VIC @fefb0000: id 0x00041190, vendor 0x41
> >> VIC @fefc0000: id 0x00041190, vendor 0x41
> >> Console: colour dummy device 80x30
> >> console [tty1] enabled
> >> Calibrating delay loop... 99.73 BogoMIPS (lpj=498688)
> >> Mount-cache hash table entries: 512
> >> CPU: Testing write buffer coherency: ok
> >> NET: Registered protocol family 16
> >> ep93xx clock: PLL1 running at 200 MHz, PLL2 at 48 MHz
> >> ep93xx clock: FCLK 200 MHz, HCLK 100 MHz, PCLK 50 MHz
> >> ep93xx dma_m2p: M2P DMA subsystem initialized
> >> bio: create slab <bio-0> at 0
> >> SCSI subsystem initialized
> >> usbcore: registered new interface driver usbfs
> >> usbcore: registered new interface driver hub
> >> usbcore: registered new device driver usb
> >> NET: Registered protocol family 2
> >> IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
> >> TCP established hash table entries: 4096 (order: 3, 32768 bytes)
> >> TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
> >> TCP: Hash tables configured (established 4096 bind 4096)
> >> TCP reno registered
> >> UDP hash table entries: 256 (order: 0, 4096 bytes)
> >> UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
> >> NET: Registered protocol family 1
> >> JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
> >> ***REGISTER LOGFS
> >> ***REGISTER LOGFS DONE ret=0
> >> ROMFS MTD (C) 2007 Red Hat, Inc.
> >> msgmni has been set to 247
> >> io scheduler noop registered
> >> io scheduler deadline registered
> >> io scheduler cfq registered (default)
> >> Console: switching to colour frame buffer device 100x37
> >> graphics fb0: registered. Mode = 800x600-16
> >> Serial: AMBA driver
> >> apb:uart1: ttyAM0 at MMIO 0x808c0000 (irq = 52) is a AMBA
> >> console [ttyAM0] enabled
> >> apb:uart2: ttyAM1 at MMIO 0x808d0000 (irq = 54) is a AMBA
> >> apb:uart3: ttyAM2 at MMIO 0x808e0000 (irq = 55) is a AMBA
> >> dev->num_resources=1
> >> physmap platform flash device: 02000000 at 60000000
> >> physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
> >> physmap-flash.0: Found 1 x16 devices at 0x1000000 in 16-bit bank
> >>  Intel/Sharp Extended Query Table at 0x0031
> >>  Intel/Sharp Extended Query Table at 0x0031
> >> Using buffer write method
> >> cfi_cmdset_0001: Erase suspend on write enabled
> >> cmdlinepart partition parsing not available
> >> Searching for RedBoot partition table in physmap-flash.0 at offset 0x1fe0000
> >> 6 RedBoot partitions found on MTD device physmap-flash.0
> >> Creating 6 MTD partitions on "physmap-flash.0":
> >> 0x000000000000-0x000000040000 : "RedBoot"
> >> 0x000000040000-0x000000b40000 : "ramdisk"
> >> 0x000000b40000-0x000000e40000 : "zImage"
> >> 0x000000e40000-0x000001fc0000 : "jffs2"
> >> 0x000001fc0000-0x000001fe0000 : "RedBoot config"
> >> 0x000001fe0000-0x000002000000 : "FIS directory"
> >> PPP generic driver version 2.4.2
> >> PPP Deflate Compression module registered
> >> PPP BSD Compression module registered
> >> ep93xx-eth version 0.1 loading
> >> eth0: ep93xx on-chip ethernet, IRQ 39, 00:00:11:22:33:36
> >> ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
> >> ep93xx-ohci ep93xx-ohci: EP93xx OHCI
> >> ep93xx-ohci ep93xx-ohci: new USB bus registered, assigned bus number 1
> >> ep93xx-ohci ep93xx-ohci: irq 56, io mem 0x80020000
> >> hub 1-0:1.0: USB hub found
> >> hub 1-0:1.0: 3 ports detected
> >> usbcore: registered new interface driver cdc_acm
> >> cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and
> >> ISDN adapters
> >> Initializing USB Mass Storage driver...
> >> usbcore: registered new interface driver usb-storage
> >> USB Mass Storage support registered.
> >> ep93xx-rtc ep93xx-rtc: rtc core: registered ep93xx-rtc as rtc0
> >> usbcore: registered new interface driver usbhid
> >> usbhid: USB HID core driver
> >> TCP cubic registered
> >> NET: Registered protocol family 17
> >> Last power-down at UTC 08:47:16 on 27/04/2010
> >> ep93xx-rtc ep93xx-rtc: setting system clock to 2010-04-27 08:47:16 UTC
> >> (1272358036)
> >> VFS: Cannot open root device "mtdblock1" or unknown-block(31,1)
> >> Please append a correct "root=" boot option; here are the available partitions:
> >> 1f00             256 mtdblock0 (driver?)
> >> 1f01           11264 mtdblock1 (driver?)
> >> 1f02            3072 mtdblock2 (driver?)
> >> 1f03           17920 mtdblock3 (driver?)
> >> 1f04             128 mtdblock4 (driver?)
> >> 1f05             128 mtdblock5 (driver?)
> >> Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,1)
> >> Backtrace:
> >> [<c003a3dc>] (dump_backtrace+0x0/0x12c) from [<c003a520>] (dump_stack+0x18/0x1c)
> >>  r7:c7c11000 r6:fffffffb r5:c7c11000 r4:00000000
> >> [<c003a508>] (dump_stack+0x0/0x1c) from [<c0046628>] (panic+0x3c/0xc4)
> >> [<c00465ec>] (panic+0x0/0xc4) from [<c0008d58>] (mount_block_root+0x110/0x2e8)
> >>  r3:00000000 r2:20000013 r1:c7c27f58 r0:c0276b44
> >> [<c0008c48>] (mount_block_root+0x0/0x2e8) from [<c0008f84>]
> >> (mount_root+0x54/0x6c)
> >> [<c0008f30>] (mount_root+0x0/0x6c) from [<c0009094>]
> >> (prepare_namespace+0xf8/0x194)
> >>  r5:c001a56c r4:c001a570
> >> [<c0008f9c>] (prepare_namespace+0x0/0x194) from [<c0008aa4>]
> >> (kernel_init+0x114/0x15c)
> >>  r6:c0019b0c r5:c0019d5c r4:c02c4e18
> >> [<c0008990>] (kernel_init+0x0/0x15c) from [<c0048e98>] (do_exit+0x0/0x628)
> >>  r6:00000000 r5:00000000 r4:00000000
> >>
> >>
> >>
> >> If I disable logfs, my root /dev/mtdblock1 is mounted correclty.
> >
> > So this issue looks unrelated, but a bug none the less (if just enabling
> > logfs breaks the mount).
>
> To be precise, I say :
> 
> - downloaded 2.6.34rc5
> - apply the jens patch
> - the logfs code is the code in the 2.6.34rc5 (I have no applied other
> jorn patch)

(please stop top posting, I fixed this one up for you).

Just to be on the safe side - without the patch, does it work or not?
Paolo Minazzi April 27, 2010, 9:36 a.m. UTC | #9
> Just to be on the safe side - without the patch, does it work or not?
>
> --
> Jens Axboe

Without the patch for me means the standard 2.6.34rc5.
In this case :
- enabling logfs I have an oop in fs/write-back.c:157 before kernel calls init.
- disabling logfs I can do normal mount my root /dev/mtdblock1

This is my experience.

Paolo
Jörn Engel April 27, 2010, 11:17 a.m. UTC | #10
On Tue, 27 April 2010 11:01:04 +0200, Paolo Minazzi wrote:
> 
> I have tried this patch.
> I have enabled LOGFS, but not mounted partition with it.
> /dev/mtdblock1 is my romfs root partition and it is OK.
> 
> The problem is that init cannot mount my /dev/mtdblock1 romfs root.
> 
> This is the fault :
> Platform: Cirrus Logic EDB9315A Board (ARM920T) Rev A
> Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
>        |----------------------------------------------
> Raw file loaded 0x00080000-0x001dce6b, assumed entry at
> 0x00080000-----------------------------------------------------------
> RedBoot> exec -s 0x00b00000 -r 0x00a00000 -c "root=/dev/mtdblock1
> console=ttyAM console=tty1"--------------------------------
> ENTRY=0xc0008000-------------------------------------------------------------------------------------------------------------
> LENGTH=0x00300000------------------------------------------------------------------------------------------------------------
> BASE_ADDR=0x00080000---------------------------------------------------------------------------------------------------------
> Using base address 0x00080000 and length
> 0x00300000--------------------------------------------------------------------------
> Uncompressing Linux... done, booting the kernel.
> Linux version 2.6.34-rc5 (root@darkstar) (gcc version 3.4.3) #18 Tue
> Apr 27 10:55:55 CEST 2010
> CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
> CPU: VIVT data cache, VIVT instruction cache
> Machine: Cirrus Logic EDB9315A Evaluation Board
> Memory policy: ECC disabled, Data cache writeback
> Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512
> Kernel command line: root=/dev/mtdblock1 console=ttyAM console=tty1

If you add "rootfstype=romfs" to the command line, does the problem
still exist?

Jörn
Jörn Engel April 27, 2010, 11:29 a.m. UTC | #11
On Tue, 27 April 2010 09:52:29 +0200, Jens Axboe wrote:
> 
> I cooked up that patch myself, here:
> 
> http://git.kernel.dk/?p=linux-2.6-block.git;a=commit;h=0661b1ac5d48eb47c8a5948c0554fea25e0895ab
> 
> Care to give it a quick spin?

Works for me.

Acked-and-tested-by: Joern Engel <joern@logfs.org>

Jörn
Paolo Minazzi April 27, 2010, 11:31 a.m. UTC | #12
> If you add "rootfstype=romfs" to the command line, does the problem
> still exist?
>
> Jörn

Jorn , you are right.
It seems work....
please wait....
Jens Axboe April 27, 2010, 11:33 a.m. UTC | #13
On Tue, Apr 27 2010, Jörn Engel wrote:
> On Tue, 27 April 2010 09:52:29 +0200, Jens Axboe wrote:
> > 
> > I cooked up that patch myself, here:
> > 
> > http://git.kernel.dk/?p=linux-2.6-block.git;a=commit;h=0661b1ac5d48eb47c8a5948c0554fea25e0895ab
> > 
> > Care to give it a quick spin?
> 
> Works for me.

Goodness, thanks for testing. Now we are pretty close to have something
we can send out.
Jörn Engel April 27, 2010, 11:40 a.m. UTC | #14
On Tue, 27 April 2010 13:31:11 +0200, Paolo Minazzi wrote:
> 
> > If you add "rootfstype=romfs" to the command line, does the problem
> > still exist?
> 
> Jorn , you are right.
> It seems work....
> please wait....

Ok, I'm pretty sure that logfs returns -EIO where it should return
-EINVAL.  If filesystems are tried in alphabetical order, logfs comes
first and -EIO tells the kernel to stop trying and panic, essentially.

Will cook up a patch...

Jörn
Paolo Minazzi April 27, 2010, 11:54 a.m. UTC | #15
Ok, now it is very better.
My problem now is that logfs does not save files in the following case:
1) power-off, then power-on (without umount)
2) sync, then power-off, then power-on (without umount)

Using umount sometimes seems works, sometimes I have the following oop :

~ # mount -t logfs /dev/mtdblock7 /mitrolbackup
~ # cd /mitrolbackup
/mitrolbackup # echo ciao > ciao
/mitrolbackup # echo pino > pino
/mitrolbackup # ls
ciao  pino
/mitrolbackup # cd ..
~ # umount /mitrolbackup/
kernel BUG at fs/logfs/readwrite.c:1976!
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = c7db0000
[00000000] *pgd=c7dac031, *pte=00000000, *ppte=00000000
Internal error: Oops: 817 [#1]
last sysfs file:
Modules linked in:
CPU: 0    Not tainted  (2.6.34-rc5 #19)
PC is at __bug+0x20/0x2c
LR is at release_console_sem+0x1b8/0x1ec
pc : [<c003a1ac>]    lr : [<c004760c>]    psr: 60000013
sp : c7d5fe60  ip : c7d5fd98  fp : c7d5fe6c
r10: 00000003  r9 : 00000000  r8 : c7d5feb4
r7 : 00000003  r6 : c7d5feb4  r5 : c7819878  r4 : c7819870
r3 : 00000000  r2 : 60000013  r1 : 000019c2  r0 : 0000002f
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: c000717f  Table: c7db0000  DAC: 00000015
Process umount (pid: 307, stack limit = 0xc7d5e260)
Stack: (0xc7d5fe60 to 0xc7d60000)
fe60: c7d5fe7c c7d5fe70 c00fb2f0 c003a19c c7d5fe90 c7d5fe80 c00ad358 c00fb274
fe80: c7819870 c7d5feb0 c7d5fe94 c00ad3e4 c00ad2bc c7d46a64 c7d46a54 c7819880
fea0: c7d46a64 c7d5fee4 c7d5feb4 c00ad5a8 c00ad3d0 c7d5feb4 c7d5feb4 c7d46a00
fec0: c7d5e000 c022a324 00000000 c7d5ff54 c7d2b880 00000000 c7d5ff00 c7d5fee8
fee0: c009c8ec c00ad4c0 c7d46a00 c7c14000 c7d2b880 c7d5ff1c c7d5ff04 c00feb38
ff00: c009c84c c7d46a00 c02b7b84 c7d2b880 c7d5ff34 c7d5ff20 c009c740 c00feb00
ff20: c7d2b880 c7d46a00 c7d5ff4c c7d5ff38 c00b0bd0 c009c708 00000000 c7d2b898
ff40: c7d5ff94 c7d5ff50 c00b1e90 c00b0b7c 00000000 c7d5ff54 c7d5ff54 c7d5ff5c
ff60: c7d5ff5c c7d2b880 c7817500 be8e3e0c 00000000 be8e5fb4 00000016 c00370a4
ff80: c7d5e000 be8e5eec c7d5ffa4 c7d5ff98 c00b2164 c00b1e34 00000000 c7d5ffa8
ffa0: c0036f00 c00b2160 be8e3e0c 00000000 be8e5fb4 be8e3e0c be8e3e1a 00000000
ffc0: be8e3e0c 00000000 be8e5fb4 00000000 00000000 00000000 be8e5eec 00000000
ffe0: 40099450 be8e3de4 0006779c 40099458 20000010 be8e5fb4 e0830007 e0833006
Backtrace:
[<c003a18c>] (__bug+0x0/0x2c) from [<c00fb2f0>] (logfs_clear_inode+0x8c/0xb0)
[<c00fb264>] (logfs_clear_inode+0x0/0xb0) from [<c00ad358>]
(clear_inode+0xac/0x114)
[<c00ad2ac>] (clear_inode+0x0/0x114) from [<c00ad3e4>] (dispose_list+0x24/0xf0)
 r4:c7819870
[<c00ad3c0>] (dispose_list+0x0/0xf0) from [<c00ad5a8>]
(invalidate_inodes+0xf8/0x12c)
 r7:c7d46a64 r6:c7819880 r5:c7d46a54 r4:c7d46a64
[<c00ad4b0>] (invalidate_inodes+0x0/0x12c) from [<c009c8ec>]
(generic_shutdown_super+0xb0/0x11c)
[<c009c83c>] (generic_shutdown_super+0x0/0x11c) from [<c00feb38>]
(logfs_kill_sb+0x48/0xfc)
 r6:c7d2b880 r5:c7c14000 r4:c7d46a00
[<c00feaf0>] (logfs_kill_sb+0x0/0xfc) from [<c009c740>]
(deactivate_super+0x48/0x60)
 r6:c7d2b880 r5:c02b7b84 r4:c7d46a00
[<c009c6f8>] (deactivate_super+0x0/0x60) from [<c00b0bd0>]
(mntput_no_expire+0x64/0xbc)
 r5:c7d46a00 r4:c7d2b880
[<c00b0b6c>] (mntput_no_expire+0x0/0xbc) from [<c00b1e90>]
(sys_umount+0x6c/0x32c)
 r5:c7d2b898 r4:00000000
[<c00b1e24>] (sys_umount+0x0/0x32c) from [<c00b2164>] (sys_oldumount+0x14/0x18)
[<c00b2150>] (sys_oldumount+0x0/0x18) from [<c0036f00>]
(ret_fast_syscall+0x0/0x2c)
Code: e1a01000 e59f000c eb003605 e3a03000 (e5833000)
---[ end trace 979e02c61e928049 ]---
------------[ cut here ]------------
WARNING: at kernel/exit.c:907 do_exit+0x50c/0x628()
Modules linked in:
Backtrace:
[<c003a3dc>] (dump_backtrace+0x0/0x12c) from [<c003a520>] (dump_stack+0x18/0x1c)
 r7:00000000 r6:c00493a4 r5:c02794cc r4:0000038b
[<c003a508>] (dump_stack+0x0/0x1c) from [<c0046a38>]
(warn_slowpath_common+0x4c/0x64)
[<c00469ec>] (warn_slowpath_common+0x0/0x64) from [<c0046a68>]
(warn_slowpath_null+0x18/0x1c)
 r7:c7d5fcdf r6:c7c8cc00 r5:00000000 r4:0000000b
[<c0046a50>] (warn_slowpath_null+0x0/0x1c) from [<c00493a4>]
(do_exit+0x50c/0x628)
[<c0048e98>] (do_exit+0x0/0x628) from [<c003a7bc>] (die+0x27c/0x2b4)
[<c003a540>] (die+0x0/0x2b4) from [<c003be7c>] (__do_kernel_fault+0x6c/0x8c)
[<c003be10>] (__do_kernel_fault+0x0/0x8c) from [<c003c108>]
(do_page_fault+0x198/0x1d8)
 r8:00000000 r7:00010000 r6:c7d341b4 r5:c7d34180 r4:c7d33d74
[<c003bf70>] (do_page_fault+0x0/0x1d8) from [<c0036210>]
(do_DataAbort+0x40/0xa8)
[<c00361d0>] (do_DataAbort+0x0/0xa8) from [<c0036a80>] (__dabt_svc+0x40/0x60)
Exception stack(0xc7d5fe18 to 0xc7d5fe60)
fe00:                                                       0000002f 000019c2
fe20: 60000013 00000000 c7819870 c7819878 c7d5feb4 00000003 c7d5feb4 00000000
fe40: 00000003 c7d5fe6c c7d5fd98 c7d5fe60 c004760c c003a1ac 60000013 ffffffff
 r8:c7d5feb4 r7:00000003 r6:c7d5feb4 r5:c7d5fe4c r4:ffffffff
[<c003a18c>] (__bug+0x0/0x2c) from [<c00fb2f0>] (logfs_clear_inode+0x8c/0xb0)
[<c00fb264>] (logfs_clear_inode+0x0/0xb0) from [<c00ad358>]
(clear_inode+0xac/0x114)
[<c00ad2ac>] (clear_inode+0x0/0x114) from [<c00ad3e4>] (dispose_list+0x24/0xf0)
 r4:c7819870
[<c00ad3c0>] (dispose_list+0x0/0xf0) from [<c00ad5a8>]
(invalidate_inodes+0xf8/0x12c)
 r7:c7d46a64 r6:c7819880 r5:c7d46a54 r4:c7d46a64
[<c00ad4b0>] (invalidate_inodes+0x0/0x12c) from [<c009c8ec>]
(generic_shutdown_super+0xb0/0x11c)
[<c009c83c>] (generic_shutdown_super+0x0/0x11c) from [<c00feb38>]
(logfs_kill_sb+0x48/0xfc)
 r6:c7d2b880 r5:c7c14000 r4:c7d46a00
[<c00feaf0>] (logfs_kill_sb+0x0/0xfc) from [<c009c740>]
(deactivate_super+0x48/0x60)
 r6:c7d2b880 r5:c02b7b84 r4:c7d46a00
[<c009c6f8>] (deactivate_super+0x0/0x60) from [<c00b0bd0>]
(mntput_no_expire+0x64/0xbc)
 r5:c7d46a00 r4:c7d2b880
[<c00b0b6c>] (mntput_no_expire+0x0/0xbc) from [<c00b1e90>]
(sys_umount+0x6c/0x32c)
 r5:c7d2b898 r4:00000000
[<c00b1e24>] (sys_umount+0x0/0x32c) from [<c00b2164>] (sys_oldumount+0x14/0x18)
[<c00b2150>] (sys_oldumount+0x0/0x18) from [<c0036f00>]
(ret_fast_syscall+0x0/0x2c)
---[ end trace 979e02c61e92804a ]---
Segmentation fault

Today I have to work for money....probably I have no much time to test ....
As soon as I can I'm happy to give my contribute to test.

Paolo
Jörn Engel April 27, 2010, 12:05 p.m. UTC | #16
On Tue, 27 April 2010 13:54:09 +0200, Paolo Minazzi wrote:
> 
> Ok, now it is very better.
> My problem now is that logfs does not save files in the following case:
> 1) power-off, then power-on (without umount)
> 2) sync, then power-off, then power-on (without umount)

Ok, I'll have a look.

Can we move this and any other logfs problems to a seperate thread?  I'd
like to leave this one for the sync issues and not spam everyone on Cc:
with unrelated bugs. :)

Jörn
diff mbox

Patch

diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index cb4858b..8dd3e46 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -299,7 +299,7 @@  static struct device_type mtd_devtype = {
 
 int add_mtd_device(struct mtd_info *mtd)
 {
-	int i;
+	int i, err;
 
 	if (!mtd->backing_dev_info) {
 		switch (mtd->type) {
@@ -322,6 +322,12 @@  int add_mtd_device(struct mtd_info *mtd)
 		if (!mtd_table[i]) {
 			struct mtd_notifier *not;
 
+			err = bdi_register(mtd->backing_dev_info, NULL, "mtd%d",
+					i);
+			if (err) {
+				/* We lose the errno information :( */
+				break;
+			}
 			mtd_table[i] = mtd;
 			mtd->index = i;
 			mtd->usecount = 0;
@@ -692,6 +698,15 @@  static int __init init_mtd(void)
 	int ret;
 	ret = class_register(&mtd_class);
 
+	ret = bdi_init(&mtd_bdi_unmappable);
+	if (ret)
+		return ret;
+	ret = bdi_init(&mtd_bdi_ro_mappable);
+	if (ret)
+		return ret;
+	ret = bdi_init(&mtd_bdi_rw_mappable);
+	if (ret)
+		return ret;
 	if (ret) {
 		pr_err("Error registering mtd class: %d\n", ret);
 		return ret;