On Mit, 2009-03-18 at 18:26 +0100, Felix Zielcke wrote:
> Am Mittwoch, den 18.03.2009, 18:00 +0100 schrieb Michel Dänzer:
> 
> > The function grub_ext2_read_block() doesn't take endianness into account
> > when checking the inode flags for EXT4_EXTENTS_FLAG, so the check doesn't
> > work properly on big endian. The attached patch fixes this, it was necessary
> > for loading and booting a Linux kernel from an ext4 filesystem on my 
> > PowerBook.
> 
> Hi,
> 
> it would be nice if you could write a ChangeLog entry for this and send
> your patch directly upstream to [email protected], though you need to
> subscribe first.

Last time I tried this wasn't too pleasant an experience for me I'm
afraid (as a result I filed #516458, which was fixed with a different
patch, for which I thanked the author personally). The attached includes
a ChangeLog entry, but I'd appreciate if you or someone else could take
care of getting it integrated upstream.

Thanks,


-- 
Earthling Michel Dänzer           |                http://www.vmware.com
Libre software enthusiast         |          Debian, X and DRI developer
--- grub2-1.96+20090317.orig/fs/ext2.c	2009-02-08 01:28:09.000000000 +0100
+++ grub2-1.96+20090317/fs/ext2.c	2009-03-18 17:29:03.000000000 +0100
@@ -385,7 +385,7 @@ grub_ext2_read_block (grub_fshelp_node_t
   unsigned int blksz = EXT2_BLOCK_SIZE (data);
   int log2_blksz = LOG2_EXT2_BLOCK_SIZE (data);
   
-  if (inode->flags & EXT4_EXTENTS_FLAG)
+  if (grub_le_to_cpu32(inode->flags) & EXT4_EXTENTS_FLAG)
     {
       char buf[EXT2_BLOCK_SIZE(data)];
       struct grub_ext4_extent_header *leaf;
--- grub2-1.96+20090317.orig/ChangeLog	2009-03-14 16:18:59.000000000 +0100
+++ grub2-1.96+20090317/ChangeLog	2009-03-18 18:39:26.000000000 +0100
@@ -0,0 +1,5 @@
+2009-03-18  Michel Dänzer  <[email protected]>
+
+	* fs/ext2.c (grub_ext2_read_block): Take endianness into account when
+	checking inode flags for EXT4_EXTENTS_FLAG.
+

Reply via email to