RE: JFFS2 corruption when mounting filesystem with filenames oflength> 7
From: Joakim Tjernlund <hidden>
Date: 2010-06-26 13:33:25
quoted hunk ↗ jump to hunk
quoted
-----Original Message----- From: linux-mtd-bounces@lists.infradead.org [mailto:linux-mtd-bounces@lists.infradead.org] On Behalf Of Steve Deiters Sent: Thursday, June 24, 2010 3:02 PM To: linux-mtd@lists.infradead.org Subject: RE: JFFS2 corruption when mounting filesystem with filenames oflength> 7quoted
-----Original Message----- From: linux-mtd-bounces@lists.infradead.org [mailto:linux-mtd-bounces@lists.infradead.org] On Behalf Of Steve Deiters Sent: Wednesday, June 23, 2010 5:42 PM To: linux-mtd@lists.infradead.org Subject: RE: JFFS2 corruption when mounting filesystem withfilenamesquoted
oflength > 7quoted
-----Original Message----- From: linux-mtd-bounces@lists.infradead.org [mailto:linux-mtd-bounces@lists.infradead.org] On Behalf Of Steve Deiters Sent: Wednesday, June 23, 2010 5:21 PM To: linux-mtd@lists.infradead.org Subject: JFFS2 corruption when mounting filesystem withfilenames ofquoted
length > 7 I found an archived post which seems to be identical to my issue. However, this is quite old and there never seemed to be any resolution. http://www.infradead.org/pipermail/linux-mtd/2006-September/01 6491.html If I mount a filesystem that has filenames greater than 7charactersquoted
in length, the files are corrupted when I mount. In my case, I am making a JFFS2 image with mkfs.jffs2 and flashing it in with u-boot. However, I have attached a workflow where I erase the Flashand createquoted
a new filesystem completely within Linux and it gives the same behavior. I can list the files with the 'ls' command from within u-boot. If I mount from withinLinux, and thenquoted
quoted
reboot into u-boot, it will not display any files that hada filenamequoted
greater than 7 characters. I enabled the MTD debug verbosity at level 2 for theattached examplequoted
session. I am running on a custom board with a MPC5121 and Linux 2.6.33.4. Thanks in advance for any help.Sorry for the jumbled mess. Looks like the line endings are messed up. Trying again. I also provided this as an attachment incase it getsquoted
messed up again.Once again sorry for the mess. I tried this again with the DENX-v2.6.34 tag in the DENX git repository (git://git.denx.de/linux-2.6-denx.git). The only modification I made was to add my dts file. I still get the same issue I had before. I've attached my kernel config if that gives any clues. Are there any thoughts on what may be causing this? Thanks.I think there may be something weird going on with the memcpy in my build. If I use the following patch I no longer get errors when I mount the filesystem. All I did was replace the memcpy with a loop. I'm not sure what's special about this particular use of memcpy. I can't believe that things would be working as well as they do if memcpy was broken in general. This is on a PowerPC 32 bit build for a MPC5121. I am using a GCC 4.1.2 to compile. Is anyone aware of any issues with memcpy in this configuration? Thanks. -------diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c index 46f870d..673caa2 100644 --- a/fs/jffs2/scan.c +++ b/fs/jffs2/scan.c@@ -1038,7 +1038,10 @@ static int jffs2_scan_dirent_node(structjffs2_sb_info *c, struct jffs2_eraseblo if (!fd) { return -ENOMEM; } - memcpy(&fd->name, rd->name, checkedlen);
Are the pointers to memcpy overlapping? If so memcpy is undefined and you have to use memmove().
+ int i;
+ for(i = 0; i < checkedlen; i++)
+ ((unsigned char*)fd->name)[i] = ((const unsigned
char*)rd->name)[i];
+
fd->name[checkedlen] = 0;
crc = crc32(0, fd->name, rd->nsize);
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev