All of lore.kernel.org
 help / color / mirror / Atom feed
From: JerinJacob <jerin.jacob@maxim-ic.com>
To: Adrian Hunter <adrian.hunter@nokia.com>
Cc: "Bityutskiy Artem \(Nokia-M/Helsinki\)"
	<Artem.Bityutskiy@nokia.com>,
	"linux-mtd@lists.infradead.org" <linux-mtd@lists.infradead.org>
Subject: Re: UBIFS Error
Date: Thu, 10 Sep 2009 17:31:32 +0530	[thread overview]
Message-ID: <4AA8EA9C.4070805@maxim-ic.com> (raw)
In-Reply-To: <4AA60E6C.6060307@nokia.com>

Hi UBIFS-Dev,

I am able to reproduce the problem with a C  program. please find it below.
Please find pseudo code for the same
-----------------------------------------------------------------------------
Step 1: Open 10 files for writing.  
Step 2: fill the files with random data, which size is less than 
(100KiB*2*10)
Step 3: if total files size is greater than 500MiB then
            lseek file pointers to 0'th location
Step 4: Goto  2
---------------------------------------------------------------------------------       


Could you please give me some pointers that may cause  this bug, so that
i can start on debugging the problem.
  

[Error Log]
===========
UBIFS error (pid 74): ubifs_read_node: bad node type (108 but expected 9)
UBIFS error (pid 74): ubifs_read_node: bad node at LEB 1108:97040

Backtrace:
[<c0122cd8>] (dump_backtrace+0x0/0x110) from [<c01231ac>] 
(dump_stack+0x18/0x1c)
 r6:c1f05a60 r5:0000006c r4:c1f9a000
[<c0123194>] (dump_stack+0x0/0x1c) from [<bf13cc30>] 
(ubifs_read_node+0x300/0x380 [ubifs])
[<bf13c930>] (ubifs_read_node+0x0/0x380 [ubifs]) from [<bf1651e8>] 
(ubifs_load_znode+0xa4/0x874 [ubifs])
[<bf165144>] (ubifs_load_znode+0x0/0x874 [ubifs]) from [<bf1411b4>] 
(lookup_level0_dirty+0xf8/0x448 [ubifs])
[<bf1410bc>] (lookup_level0_dirty+0x0/0x448 [ubifs]) from [<bf144048>] 
(ubifs_tnc_add+0x50/0x19c [ubifs])
[<bf143ff8>] (ubifs_tnc_add+0x0/0x19c [ubifs]) from [<bf12d5b0>] 
(ubifs_jnl_write_inode+0x118/0x260 [ubifs])
[<bf12d498>] (ubifs_jnl_write_inode+0x0/0x260 [ubifs]) from [<bf13a0ac>] 
(ubifs_write_inode+0xbc/0x198 [ubifs])
[<bf139ff0>] (ubifs_write_inode+0x0/0x198 [ubifs]) from [<c01c9ad4>] 
(__writeback_single_inode+0x2a4/0x378)
 r8:c084edac r7:00000005 r6:c084ed14 r5:c1f9a000 r4:00000000
[<c01c9830>] (__writeback_single_inode+0x0/0x378) from [<c01c9fd0>] 
(generic_sync_sb_inodes+0x33c/0x474)
[<c01c9c94>] (generic_sync_sb_inodes+0x0/0x474) from [<c01ca118>] 
(sync_sb_inodes+0x10/0x14)
[<c01ca108>] (sync_sb_inodes+0x0/0x14) from [<c01ca4d4>] 
(writeback_inodes+0xdc/0x110)
[<c01ca3f8>] (writeback_inodes+0x0/0x110) from [<c018a678>] 
(background_writeout+0xe8/0x120)
 r8:c0372680 r7:c1f9bf70 r6:c1f9bf6c r5:fffffd52 r4:00000152
[<c018a590>] (background_writeout+0x0/0x120) from [<c018b0ac>] 
(pdflush+0x140/0x2bc)
[<c018af6c>] (pdflush+0x0/0x2bc) from [<c015e364>] (kthread+0x58/0x84)
[<c015e30c>] (kthread+0x0/0x84) from [<c014a050>] (do_exit+0x0/0x70c)
 r5:00000000 r4:00000000

UBIFS warning (pid 74): ubifs_ro_mode: switched to read-only mode, error -22

Backtrace:
[<c0122cd8>] (dump_backtrace+0x0/0x110) from [<c01231ac>] 
(dump_stack+0x18/0x1c)
 r6:c1de2000 r5:c084ed14 r4:000000a0
[<c0123194>] (dump_stack+0x0/0x1c) from [<bf13c520>] 
(ubifs_ro_mode+0x68/0x78 [ubifs])
[<bf13c4b8>] (ubifs_ro_mode+0x0/0x78 [ubifs]) from [<bf12d5c8>] 
(ubifs_jnl_write_inode+0x130/0x260 [ubifs])
[<bf12d498>] (ubifs_jnl_write_inode+0x0/0x260 [ubifs]) from [<bf13a0ac>] 
(ubifs_write_inode+0xbc/0x198 [ubifs])
[<bf139ff0>] (ubifs_write_inode+0x0/0x198 [ubifs]) from [<c01c9ad4>] 
(__writeback_single_inode+0x2a4/0x378)
 r8:c084edac r7:00000005 r6:c084ed14 r5:c1f9a000 r4:00000000
[<c01c9830>] (__writeback_single_inode+0x0/0x378) from [<c01c9fd0>] 
(generic_sync_sb_inodes+0x33c/0x474)
[<c01c9c94>] (generic_sync_sb_inodes+0x0/0x474) from [<c01ca118>] 
(sync_sb_inodes+0x10/0x14)
[<c01ca108>] (sync_sb_inodes+0x0/0x14) from [<c01ca4d4>] 
(writeback_inodes+0xdc/0x110)
[<c01ca3f8>] (writeback_inodes+0x0/0x110) from [<c018a678>] 
(background_writeout+0xe8/0x120)
 r8:c0372680 r7:c1f9bf70 r6:c1f9bf6c r5:fffffd52 r4:00000152
[<c018a590>] (background_writeout+0x0/0x120) from [<c018b0ac>] 
(pdflush+0x140/0x2bc)
[<c018af6c>] (pdflush+0x0/0x2bc) from [<c015e364>] (kthread+0x58/0x84)
[<c015e30c>] (kthread+0x0/0x84) from [<c014a050>] (do_exit+0x0/0x70c)
 r5:00000000 r4:00000000

UBIFS error (pid 74): ubifs_write_inode: can't write inode 1073, error -22
UBIFS error (pid 74): make_reservation: cannot reserve 4144 bytes in 
jhead 2, error -30
UBIFS error (pid 74): do_writepage: cannot write page 0 of inode 1077, 
error -30
UBIFS error (pid 74): make_reservation: cannot reserve 160 bytes in 
jhead 1, error -30
UBIFS error (pid 74): ubifs_write_inode: can't write inode 1077, error -30
UBIFS error (pid 74): make_reservation: cannot reserve 4144 bytes in 
jhead 2, error -30

--------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#define NOFD 10
#define CHUNKMAX 102400 //100Kib
#define MAXSIZE 500 // Maximum size in MB


unsigned long long thecounter=0;
int fd[NOFD];
char buffer[CHUNKMAX];

int openfiles(char *mpath)
{  
    int i;
    char filename[128];
    mode_t fmode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
    for(i=0; i < NOFD ; i++) {
        // Generate file name
        sprintf(filename, "%s%s%d",mpath,"/mytest",i);
        // Open it
        fd[i] = open(filename,O_WRONLY|O_CREAT|O_TRUNC, fmode);
        // Check for errors
        if (fd[i] < 0) {
            fprintf(stderr, "ERROR: could not open file %s for 
writing\n", filename);
                return -1;
        }
    }
    return 1;
}

int fillrandomdata(void)
{
    int countmax=1,count,ret,i,j,write_size;
    // This loop would fill a set random datas in all the files
    for (i=0; i < NOFD ; i++) {
        write_size = (rand() & (CHUNKMAX-1));

        // fill the buffer some data
        for (j = 0; j < write_size; j++){
            buffer[j] = j;
        }

        for(count=0; count < countmax; count++) {
            ret = write(fd[i], buffer, write_size);
            if (ret < 0) {
                printf("Write errno is %d\n",errno);
                return -1;
            }
            thecounter=thecounter + ret;
        }
    }
    return 1;
}

int main(void)
{
    int loop=1,j;
    if(openfiles("/ubifs_root") < 0)
        printf("Error in Opening the file \n");
    while(1){
      
        if(fillrandomdata() < 0){
            printf("Error while writing the file \n");
            exit(0);
        }

              
        if(thecounter > ((MAXSIZE*1024*1024)*loop)){
            printf("Looping back\n");
            for (j = 0; j < NOFD ; j++)
            lseek(fd[j], 0, SEEK_SET);
            loop++;
        }

        printf("Number of bytes written into Nand flash is  %lld MiB 
\n",(thecounter / (1024 * 1024)));
    }
    return 0; // Never returns
}




JerinJacob wrote:
 > Please find below the actual test script:
 >
 > 
--------------------------start---------------------------------------------------------------
 > #!/bin/sh
 >
 > sizecount=0
 > localcount=0
 >
 > deletelimit=`expr 500 \* 1024 \* 1024` # 500 MB
 > FILENAME="1 2 3 4 5 6 7 8 9 10"
 >
 > rm -rf /ubifs_rootfs/*
 >
 > while [ 1 ]
 > do
 >
 >        for filename in $FILENAME
 >        do
 >            size=`expr 4096 \* 10`
 >
 >            dd if=/dev/urandom of=/ubifs_rootfs/foo1${filename} 
bs=1024 count=4 2> /dev/null ;
 >            dd if=/dev/urandom of=/ubifs_rootfs/foo2${filename} 
bs=1024 count=4 2> /dev/null ;
 >            dd if=/dev/urandom of=/ubifs_rootfs/foo3${filename} 
bs=1024 count=4 2> /dev/null ;
 >            dd if=/dev/urandom of=/ubifs_rootfs/foo4${filename} 
bs=1024 count=4 2> /dev/null ;
 >            dd if=/dev/urandom of=/ubifs_rootfs/foo5${filename} 
bs=1024 count=4 2> /dev/null ;
 >            dd if=/dev/urandom of=/ubifs_rootfs/foo6${filename} 
bs=1024 count=4 2> /dev/null ;
 >            dd if=/dev/urandom of=/ubifs_rootfs/foo7${filename} 
bs=1024 count=4 2> /dev/null ;
 >            dd if=/dev/urandom of=/ubifs_rootfs/foo8${filename} 
bs=1024 count=4 2> /dev/null ;
 >            dd if=/dev/urandom of=/ubifs_rootfs/foo9${filename} 
bs=1024 count=4 2> /dev/null ;
 >            dd if=/dev/urandom of=/ubifs_rootfs/foo10${filename} 
bs=1024 count=4 2> /dev/null ;
 >
 >            localcount=`expr $localcount + $size`
 >            sizecount=`expr $sizecount + $size`
 >        done
 >
 >        if [ $localcount -gt $deletelimit ] ; then
 >                echo "Clean up!!!"
 >                localcount=0
 >                rm -rf /ubifs_rootf/* ; sync
 >        fi
 >
 >        date ; sync
 >        echo "Bytes Written to Nand flash:`expr $sizecount / 1048576 ` MB"
 >
 > done
 > 
-----------------------------End-----------------------------------------------------------------
 >
 >
 > Adrian Hunter wrote:
 >> JerinJacob wrote:
 >> 
 >>> Hi All,
 >>>
 >>> Got an UBIFS error while performing a regression write test on 
UBIFS file system.
 >>>
 >>>
 >>> [Issue]
 >>> =======
 >>>
 >>> While performing a regression write test on UBIFS file system,the 
UBIFS file system becomes read-only mode.
 >>> pseudo code for the regression write test as follows:
 >>>
 >>> while(1)
 >>> {
 >>> create and write a random image(with different block size using dd 
command) to nand flash
 >>>
 >>> if "disk space is reached maxim size"
 >>>     delete all the files
 >>>
 >>> }
 >>>    
 >>
 >> Can you provide the actual test?
 >>
 >>
 >> .
 >>
 >>  
 >


> [Steps followed]
>
> ================
>
>
>
> flash_eraseall /dev/mtd6
>
> ubiformat /dev/mtd6 -y
>
> modprobe ubi mtd=6 ; modprobe ubifs
>
> ubimkvol /dev/ubi0 -m -N rootfs
>
> mkfs.ubifs /dev/ubi0_0 -x none
>
> mount -t ubifs ubi0:rootfs /ubifs_rootfs
>
> "excetued the regression nand write test"
>
>
>
>
>
> [Error Log]
>
> ===========
>
> UBIFS error (pid 74): ubifs_read_node: bad node type (108 but expected 9)
>
> UBIFS error (pid 74): ubifs_read_node: bad node at LEB 1108:97040
>
>
>
> Backtrace:
>
> [<c0122cd8>] (dump_backtrace+0x0/0x110) from [<c01231ac>] 
> (dump_stack+0x18/0x1c)
>
> r6:c1f05a60 r5:0000006c r4:c1f9a000
>
> [<c0123194>] (dump_stack+0x0/0x1c) from [<bf13cc30>] 
> (ubifs_read_node+0x300/0x380 [ubifs])
>
> [<bf13c930>] (ubifs_read_node+0x0/0x380 [ubifs]) from [<bf1651e8>] 
> (ubifs_load_znode+0xa4/0x874 [ubifs])
>
> [<bf165144>] (ubifs_load_znode+0x0/0x874 [ubifs]) from [<bf1411b4>] 
> (lookup_level0_dirty+0xf8/0x448 [ubifs])
>
> [<bf1410bc>] (lookup_level0_dirty+0x0/0x448 [ubifs]) from [<bf144048>] 
> (ubifs_tnc_add+0x50/0x19c [ubifs])
>
> [<bf143ff8>] (ubifs_tnc_add+0x0/0x19c [ubifs]) from [<bf12d5b0>] 
> (ubifs_jnl_write_inode+0x118/0x260 [ubifs])
>
> [<bf12d498>] (ubifs_jnl_write_inode+0x0/0x260 [ubifs]) from [<bf13a0ac>] 
> (ubifs_write_inode+0xbc/0x198 [ubifs])
>
> [<bf139ff0>] (ubifs_write_inode+0x0/0x198 [ubifs]) from [<c01c9ad4>] 
> (__writeback_single_inode+0x2a4/0x378)
>
> r8:c084edac r7:00000005 r6:c084ed14 r5:c1f9a000 r4:00000000
>
> [<c01c9830>] (__writeback_single_inode+0x0/0x378) from [<c01c9fd0>] 
> (generic_sync_sb_inodes+0x33c/0x474)
>
> [<c01c9c94>] (generic_sync_sb_inodes+0x0/0x474) from [<c01ca118>] 
> (sync_sb_inodes+0x10/0x14)
>
> [<c01ca108>] (sync_sb_inodes+0x0/0x14) from [<c01ca4d4>] 
> (writeback_inodes+0xdc/0x110)
>
> [<c01ca3f8>] (writeback_inodes+0x0/0x110) from [<c018a678>] 
> (background_writeout+0xe8/0x120)
>
> r8:c0372680 r7:c1f9bf70 r6:c1f9bf6c r5:fffffd52 r4:00000152
>
> [<c018a590>] (background_writeout+0x0/0x120) from [<c018b0ac>] 
> (pdflush+0x140/0x2bc)
>
> [<c018af6c>] (pdflush+0x0/0x2bc) from [<c015e364>] (kthread+0x58/0x84)
>
> [<c015e30c>] (kthread+0x0/0x84) from [<c014a050>] (do_exit+0x0/0x70c)
>
> r5:00000000 r4:00000000
>
>
>
> UBIFS warning (pid 74): ubifs_ro_mode: switched to read-only mode, error -22
>
>
>
> Backtrace:
>
> [<c0122cd8>] (dump_backtrace+0x0/0x110) from [<c01231ac>] 
> (dump_stack+0x18/0x1c)
>
> r6:c1de2000 r5:c084ed14 r4:000000a0
>
> [<c0123194>] (dump_stack+0x0/0x1c) from [<bf13c520>] 
> (ubifs_ro_mode+0x68/0x78 [ubifs])
>
> [<bf13c4b8>] (ubifs_ro_mode+0x0/0x78 [ubifs]) from [<bf12d5c8>] 
> (ubifs_jnl_write_inode+0x130/0x260 [ubifs])
>
> [<bf12d498>] (ubifs_jnl_write_inode+0x0/0x260 [ubifs]) from [<bf13a0ac>] 
> (ubifs_write_inode+0xbc/0x198 [ubifs])
>
> [<bf139ff0>] (ubifs_write_inode+0x0/0x198 [ubifs]) from [<c01c9ad4>] 
> (__writeback_single_inode+0x2a4/0x378)
>
> r8:c084edac r7:00000005 r6:c084ed14 r5:c1f9a000 r4:00000000
>
> [<c01c9830>] (__writeback_single_inode+0x0/0x378) from [<c01c9fd0>] 
> (generic_sync_sb_inodes+0x33c/0x474)
>
> [<c01c9c94>] (generic_sync_sb_inodes+0x0/0x474) from [<c01ca118>] 
> (sync_sb_inodes+0x10/0x14)
>
> [<c01ca108>] (sync_sb_inodes+0x0/0x14) from [<c01ca4d4>] 
> (writeback_inodes+0xdc/0x110)
>
> [<c01ca3f8>] (writeback_inodes+0x0/0x110) from [<c018a678>] 
> (background_writeout+0xe8/0x120)
>
> r8:c0372680 r7:c1f9bf70 r6:c1f9bf6c r5:fffffd52 r4:00000152
>
> [<c018a590>] (background_writeout+0x0/0x120) from [<c018b0ac>] 
> (pdflush+0x140/0x2bc)
>
> [<c018af6c>] (pdflush+0x0/0x2bc) from [<c015e364>] (kthread+0x58/0x84)
>
> [<c015e30c>] (kthread+0x0/0x84) from [<c014a050>] (do_exit+0x0/0x70c)
>
> r5:00000000 r4:00000000
>
>
>
> UBIFS error (pid 74): ubifs_write_inode: can't write inode 1073, error -22
>
> UBIFS error (pid 74): make_reservation: cannot reserve 4144 bytes in 
> jhead 2, error -30
>
> UBIFS error (pid 74): do_writepage: cannot write page 0 of inode 1077, 
> error -30
>
> UBIFS error (pid 74): make_reservation: cannot reserve 160 bytes in 
> jhead 1, error -30
>
> UBIFS error (pid 74): ubifs_write_inode: can't write inode 1077, error -30
>
> UBIFS error (pid 74): make_reservation: cannot reserve 4144 bytes in 
> jhead 2, error -30
>
>
>
>
>
>
>
> [Environment]
>
> =============
>
>
>
> root@mg3500evp323 # uname -a
>
> Linux evp323 2.6.30.SDK6r3430 #1 PREEMPT Tue Sep 1 21:18:07 IST 2009 
> armv5tejl GNU/Linux
>
>
>
>
>
> root@evp323 # cat /proc/mtd
>
> dev:    size   erasesize  name
>
> mtd0: 000c0000 00020000 "mboot1"
>
> mtd1: 00320000 00020000 "kernel1"
>
> mtd2: 00320000 00020000 "kernel2"
>
> mtd3: 00220000 00020000 "initrd1"
>
> mtd4: 00220000 00020000 "initrd2"
>
> mtd5: 02880000 00020000 "rootfs"
>
> mtd6: 3cc40000 00020000 "data"
>
>
>
>
>
> root@evp323 # mtdinfo /dev/mtd6
>
> mtd6
>
> Name:                           data
>
> Type:                           nand
>
> Eraseblock size:                131072 bytes, 128.0 KiB
>
> Amount of eraseblocks:          7778 (1019478016 bytes, 972.3 MiB)
>
> Minimum input/output unit size: 2048 bytes
>
> Sub-page size:                  512 bytes
>
> OOB size:                       64 bytes
>
> Character device major/minor:   90:12
>
> Bad blocks are allowed:         true
>
> Device is writable:             true
>
>
>
>
>
> root@evp323 # modprobe ubi mtd=6 ; modprobe ubifs
>
> UBI: attaching mtd6 to ubi0
>
> UBI: physical eraseblock size:   131072 bytes (128 KiB)
>
> UBI: logical eraseblock size:    129024 bytes
>
> UBI: smallest flash I/O unit:    2048
>
> UBI: sub-page size:              512
>
> UBI: VID header offset:          512 (aligned 512)
>
> UBI: data offset:                2048
>
> UBI: attached mtd6 to ubi0
>
> UBI: MTD device name:            "data"
>
> UBI: MTD device size:            972 MiB
>
> UBI: number of good PEBs:        7763
>
> UBI: number of bad PEBs:         15
>
> UBI: max. allowed volumes:       128
>
> UBI: wear-leveling threshold:    4096
>
> UBI: number of internal volumes: 1
>
> UBI: number of user volumes:     2
>
> UBI: available PEBs:             0
>
> UBI: total number of reserved PEBs: 7763
>
> UBI: number of PEBs reserved for bad PEB handling: 77
>
> UBI: max/mean erase counter: 26/25
>
> UBI: background thread "ubi_bgt0d" started, PID 1163
>
>
>
>
>
> root@evp323 # mount -t ubifs ubi0:rootfs /ubifs_rootfs
>
> UBIFS: recovery needed
>
> UBIFS: recovery completed
>
> UBIFS: mounted UBI device 0, volume 1, name "rootfs"
>
> UBIFS: file system size:   832333824 bytes (812826 KiB, 793 MiB, 6451 LEBs)
>
> UBIFS: journal size:       9033728 bytes (8822 KiB, 8 MiB, 71 LEBs)
>
> UBIFS: media format:       w4/r0 (latest is w4/r0)
>
> UBIFS: default compressor: none
>
> UBIFS: reserved for root:  0 bytes (0 KiB)
>
>
>
>
>
> root@evp323 # ubinfo
>
> UBI version:                    1
>
> Count of UBI devices:           1
>
> UBI control device major/minor: 10:60
>
> Present UBI devices:            ubi0
>
>
>
>
>
>
>
> It would be great, if someone could throw some light on this.
>
> Any help is appreciated.
>
>
>
> Thanks in Advance,
>
> Jerin.
>
>
>
>
>   

  parent reply	other threads:[~2009-09-10 12:01 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-08  6:02 UBIFS Error JerinJacob
2009-09-08  7:57 ` Adrian Hunter
2009-09-08 12:16   ` JerinJacob
2009-09-10 12:01   ` JerinJacob [this message]
2009-09-10 12:13     ` Artem Bityutskiy
2009-09-10 12:53       ` JerinJacob
2009-09-10 13:46         ` Artem Bityutskiy
2009-09-10 14:22           ` JerinJacob
2009-09-11 12:18           ` JerinJacob
2009-09-14 14:27             ` Artem Bityutskiy
2009-09-14 14:29               ` Artem Bityutskiy
2009-09-15  8:28                 ` JerinJacob
2009-09-17  8:38                   ` JerinJacob
2009-09-28 11:22                     ` Artem Bityutskiy
2009-09-29  5:48                       ` JerinJacob
2009-09-30  5:37                         ` Artem Bityutskiy
2009-09-14 15:07               ` JerinJacob
2009-09-14 15:08                 ` Artem Bityutskiy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4AA8EA9C.4070805@maxim-ic.com \
    --to=jerin.jacob@maxim-ic.com \
    --cc=Artem.Bityutskiy@nokia.com \
    --cc=adrian.hunter@nokia.com \
    --cc=linux-mtd@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.