Skip to contentSkip to conversation

JFFS2 Cleanmarker Issue

DISCUSSION Suresh Rajashekara 3 participants 5 messages Jun 16, 2008 – Jun 30, 2008 1 message not in the archive Memory technology devices (MTD)

lore
Share & tools
lore
#0 lore raw

Hi Everyone,

Few necessary details before I explain my issue.

Hardware I use: OMAP5912 based board
Linux: 2.6.16-rc3

Let me know if you guys need more details.

The issue:
I use the JFFS2 file system on the oneNAND flash. Every time I boot the board I see the following on the serial console (I have CONFIG_JFFS2_FS_DEBUG=2)

<SNIP>
jffs2_check_nand_cleanmarker(): Cleanmarker node not detected in block at 00000000 OOB at 00000000 was ff ff 00 19 03 03 ff ff ff ff ff 56 fe ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff jffs_check_nand_cleanmarker returned 1 jffs2_check_oob_empty returned 1
JFFS2: Erase block at 0x00000000 is not formatted. It will be erased
jffs2_check_nand_cleanmarker(): Cleanmarker node not detected in block at 00020000 OOB at 00020000 was ff ff 00 19 03 03 ff ff ff ff ff 56 fe ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff jffs_check_nand_cleanmarker returned 1 jffs2_check_oob_empty returned 1 blah.. .
blah...
.
.
</SNIP>

Getting this on the first boot, is I guess expected. But this messages repeats every time we reboot the board. I did some debugging and found that the JFFS2 driver is marking these blocks and writes the clean markers.

Since these prints were appearing on every boot, I read the oob area which the jffs2 driver wrote to mark the cleanmarkers. I found the data to be shifted. I tried Googling and also went through the GIT log messages to find if this was a known issue, but could not find any. Is this a known issue in 2.6.16-rc3.

The developers who did the initial design have chosen to format the partition using the nftl_format command. I read on the MTD howto that it should not be used. I tried replacing that with "flash_eraseall -j" and created the jffs2 file system using the command mkfs.jffs2 (I tried with the correct page size and other stuff by looking in to the datasheet) and wrote the jffs2 file system using the nand_write command, but none helped.

Could someone please point me in the right direction?

Thanks in advance,

Best Regards,
Suresh

#1 lore raw

Hi,

The clean marker is not getting written to spare area on your nand device. The first 4 bytes of clean maker is 19852003 I think.
Just check whether you are getting spare write request for these bytes in your Nand driver and also check if you have written it properly to the spare area.

Quoted 63 lines · Suresh Rajashekara

Hi Everyone,

Few necessary details before I explain my issue.

Hardware I use: OMAP5912 based board
Linux: 2.6.16-rc3

Let me know if you guys need more details.

The issue:
I use the JFFS2 file system on the oneNAND flash. Every time I boot the board I see the following on the serial console (I have CONFIG_JFFS2_FS_DEBUG=2)

<SNIP>
jffs2_check_nand_cleanmarker(): Cleanmarker node not detected in block at 00000000 OOB at 00000000 was ff ff 00 19 03 03 ff ff ff ff ff 56 fe ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff jffs_check_nand_cleanmarker returned 1 jffs2_check_oob_empty returned 1
JFFS2: Erase block at 0x00000000 is not formatted. It will be erased jffs2_check_nand_cleanmarker(): Cleanmarker node not detected in block at 00020000 OOB at 00020000 was ff ff 00 19 03 03 ff ff ff ff ff 56 fe ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff jffs_check_nand_cleanmarker returned 1 jffs2_check_oob_empty returned 1 blah..
.
blah...
.
.
</SNIP>

Getting this on the first boot, is I guess expected. But this messages repeats every time we reboot the board. I did some debugging and found that the JFFS2 driver is marking these blocks and writes the clean markers.

Since these prints were appearing on every boot, I read the oob area which the jffs2 driver wrote to mark the cleanmarkers. I found the data to be shifted. I tried Googling and also went through the GIT log messages to find if this was a known issue, but could not find any. Is this a known issue in 2.6.16-rc3.

The developers who did the initial design have chosen to format the partition using the nftl_format command. I read on the MTD howto that it should not be used. I tried replacing that with "flash_eraseall -j" and created the jffs2 file system using the command mkfs.jffs2 (I tried with the correct page size and other stuff by looking in to the datasheet) and wrote the jffs2 file system using the nand_write command, but none helped.

Could someone please point me in the right direction?

Thanks in advance,

Best Regards,
Suresh

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

Signature · 2 lines
Regards,
Sudeep

A message that is not in the archive (sent off-list or not yet received): [email protected]

#3 lore raw
Quoted 15 lines · Suresh Rajashekara
Quoted 10 lines · Sudeep K N

Hi,

The clean marker is not getting written to spare area on your nand device. The first 4 bytes of clean maker is 19852003 I think.
Just check whether you are getting spare write request for these bytes in your
Nand driver and also check if you have written it properly to the spare area.

Thanks Sudeep. I think the oneNAND driver has some issues. Now I guess I am in the right direction.

Quoted 9 lines

One more question I have is, why the first 2 bytes are ff ff and the cleanmarker is starting from the 3rd byte? Is this how it is? I thought the cleanmarker should start from the first byte.

Thanks in advance,

Best Regards,
Suresh

No cleanmarker doesnot always start from 1st byte
The position of cleanmarker depends on the oobfree area specified by you through
struct nand_ecclayout

Signature · 2 lines
Regards,
Sudeep
#4 lore raw

Hi

Quoting Sudeep K N <[email protected]>:

Quoted 8 lines

No cleanmarker doesnot always start from 1st byte
The position of cleanmarker depends on the oobfree area specified by you through
struct nand_ecclayout

--
Regards,
Sudeep

I think I found the reason for the issue. I forgot to mention that we are using oneNAND. OneNAND uses the fragmented OOB, which I think is not supported by Jffs2 and oneNAND driver in 2.6.16-rc3.

Thanks,
Suresh

#5 lore raw

Hi,

Quoted 12 lines · On Mon, Jun 30, 2008 at 12:08 AM, <[email protected]> wrote:

Hi

Quoting Sudeep K N <[email protected]>:

Quoted 8 lines

No cleanmarker doesnot always start from 1st byte
The position of cleanmarker depends on the oobfree area specified by you through
struct nand_ecclayout

--
Regards,
Sudeep

Quoted 7 lines

I think I found the reason for the issue. I forgot to mention that we are using oneNAND. OneNAND uses the fragmented OOB, which I think is not supported by Jffs2 and oneNAND driver in 2.6.16-rc3.

Thanks,
Suresh

In the early stage, it doesn't handle not-alinged oob access and use the MTD_OOB_PLACE.
If you don't need to use 2.6.16-rc3, please use the latest kernel or later version.
or simple hack, please modify oobfree value from {2, 3} to {2, 4}, {18, 3->4} and so one, but not recommend.

Thank you,
Kyungmin Park