Re: [BUG] 2.6.8-rc3 jffs2 unable to read filesystems

From: David Woodhouse
Date: Sat Aug 07 2004 - 16:59:02 EST


On Sat, 2004-08-07 at 14:18 +0100, Russell King wrote:
> This can be seen by tracing through the code from jffs2_alloc_raw_inode()
> and noticing that previous implementations do not initialise this field -
> AFAICS kmem_cache_alloc() does not guarantee that memory returned by
> this function will be initialised.

Doh.

> Therefore, recent 2.6.8-rc kernels must _NOT_ use this field if they
> wish to remain compatible with existing jffs2 filesystems.

The format is compatible in theory -- we just need to work around the
bug in the older code. Can you try this?

Index: fs/jffs2/compr.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/compr.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -p -r1.41 -r1.42
--- fs/jffs2/compr.c 24 Jun 2004 09:51:38 -0000 1.41
+++ fs/jffs2/compr.c 7 Aug 2004 21:56:08 -0000 1.42
@@ -9,7 +9,7 @@
*
* For licensing information, see the file 'LICENCE' in this directory.
*
- * $Id: compr.c,v 1.41 2004/06/24 09:51:38 havasi Exp $
+ * $Id: compr.c,v 1.42 2004/08/07 21:56:08 dwmw2 Exp $
*
*/

@@ -180,6 +180,11 @@ int jffs2_decompress(struct jffs2_sb_inf
struct jffs2_compressor *this;
int ret;

+ /* Older code had a bug where it would write non-zero 'usercompr'
+ fields. Deal with it. */
+ if ((comprtype & 0xff) <= JFFS2_COMPR_ZLIB)
+ comprtype &= 0xff;
+
switch (comprtype & 0xff) {
case JFFS2_COMPR_NONE:
/* This should be special-cased elsewhere, but we might as well deal with it */
@@ -208,7 +213,7 @@ int jffs2_decompress(struct jffs2_sb_inf
return ret;
}
}
- printk(KERN_WARNING "JFFS2 compression type 0x%02x not avaiable.\n", comprtype);
+ printk(KERN_WARNING "JFFS2 compression type 0x%02x not available.\n", comprtype);
spin_unlock(&jffs2_compressor_list_lock);
return -EIO;
}



--
dwmw2


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/