[PATCH 2/7] ext4: determine group descriptor size for 64bit feature

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH 2/7] ext4: determine group descriptor size for 64bit feature

Stefan Brüns
If EXT4_FEATURE_INCOMPAT_64BIT is set, the descriptor can be read from
the superblocks, otherwise it defaults to 32.

Signed-off-by: Stefan Brüns <[hidden email]>
---
 fs/ext4/ext4_common.c | 18 ++++++++++++++----
 include/ext4fs.h      |  2 ++
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
index a78b0b8..416a9db 100644
--- a/fs/ext4/ext4_common.c
+++ b/fs/ext4/ext4_common.c
@@ -2233,13 +2233,23 @@ int ext4fs_mount(unsigned part_length)
  goto fail;
  }
 
- if (le32_to_cpu(data->sblock.revision_level) == 0)
+ if (le32_to_cpu(data->sblock.revision_level) == 0) {
  fs->inodesz = 128;
- else
+ } else {
+ debug("EXT4 features COMPAT: %08x INCOMPAT: %08x RO_COMPAT: %08x\n",
+      __le32_to_cpu(data->sblock.feature_compatibility),
+      __le32_to_cpu(data->sblock.feature_incompat),
+      __le32_to_cpu(data->sblock.feature_ro_compat));
+
  fs->inodesz = le16_to_cpu(data->sblock.inode_size);
+ fs->gdsize = le32_to_cpu(data->sblock.feature_incompat) &
+ EXT4_FEATURE_INCOMPAT_64BIT ?
+ le16_to_cpu(data->sblock.descriptor_size) : 32;
+ }
 
- debug("EXT2 rev %d, inode_size %d\n",
-       le32_to_cpu(data->sblock.revision_level), fs->inodesz);
+ debug("EXT2 rev %d, inode_size %d, descriptor size %d\n",
+      le32_to_cpu(data->sblock.revision_level),
+      fs->inodesz, fs->gdsize);
 
  data->diropen.data = data;
  data->diropen.ino = 2;
diff --git a/include/ext4fs.h b/include/ext4fs.h
index 6e31c73..7e1ee6c 100644
--- a/include/ext4fs.h
+++ b/include/ext4fs.h
@@ -87,6 +87,8 @@ struct ext_filesystem {
  uint32_t inodesz;
  /* Sectors per Block */
  uint32_t sect_perblk;
+ /* Group Descriptor size */
+ uint16_t gdsize;
  /* Group Descriptor Block Number */
  uint32_t gdtable_blkno;
  /* Total block groups of partition */
--
2.10.0

_______________________________________________
U-Boot mailing list
[hidden email]
http://lists.denx.de/mailman/listinfo/u-boot
Reply | Threaded
Open this post in threaded view
|

Re: [U-Boot, 2/7] ext4: determine group descriptor size for 64bit feature

Tom Rini-4
On Sat, Sep 17, 2016 at 02:10:07AM +0200, Stefan Brüns wrote:

> If EXT4_FEATURE_INCOMPAT_64BIT is set, the descriptor can be read from
> the superblocks, otherwise it defaults to 32.
>
> Signed-off-by: Stefan Brüns <[hidden email]>

Applied to u-boot/master, thanks!

--
Tom

_______________________________________________
U-Boot mailing list
[hidden email]
http://lists.denx.de/mailman/listinfo/u-boot

signature.asc (836 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH 2/7] ext4: determine group descriptor size for 64bit feature

Kever Yang
In reply to this post by Stefan Brüns
Hi Stefan, Tom,

     I'm using genext2fs command in Linux to generate my boot image for
kernel and its dtb, my command is like this:
     $ genext2fs -b 32768 -B $((32*1024*1024/32768)) -d boot/ -i 8192 -U
boot.img

     In the latest version of U-Boot, the image from above command is
not able
to be mount. After debug, I found out that the root cause is that the
genext2fs
does not have a initial value for revision_level in super block. After I
do the mount
and umount for the image in Linux, the U-Boot then can mount the image.

     Is it possible to still support the ext2 image generated by
genext2fs command in U-Boot?

Thanks,
- Kever
On 09/17/2016 08:10 AM, Stefan Brüns wrote:

> If EXT4_FEATURE_INCOMPAT_64BIT is set, the descriptor can be read from
> the superblocks, otherwise it defaults to 32.
>
> Signed-off-by: Stefan Brüns <[hidden email]>
> ---
>   fs/ext4/ext4_common.c | 18 ++++++++++++++----
>   include/ext4fs.h      |  2 ++
>   2 files changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
> index a78b0b8..416a9db 100644
> --- a/fs/ext4/ext4_common.c
> +++ b/fs/ext4/ext4_common.c
> @@ -2233,13 +2233,23 @@ int ext4fs_mount(unsigned part_length)
>   goto fail;
>   }
>  
> - if (le32_to_cpu(data->sblock.revision_level) == 0)
> + if (le32_to_cpu(data->sblock.revision_level) == 0) {
>   fs->inodesz = 128;
> - else
> + } else {
> + debug("EXT4 features COMPAT: %08x INCOMPAT: %08x RO_COMPAT: %08x\n",
> +      __le32_to_cpu(data->sblock.feature_compatibility),
> +      __le32_to_cpu(data->sblock.feature_incompat),
> +      __le32_to_cpu(data->sblock.feature_ro_compat));
> +
>   fs->inodesz = le16_to_cpu(data->sblock.inode_size);
> + fs->gdsize = le32_to_cpu(data->sblock.feature_incompat) &
> + EXT4_FEATURE_INCOMPAT_64BIT ?
> + le16_to_cpu(data->sblock.descriptor_size) : 32;
> + }
>  
> - debug("EXT2 rev %d, inode_size %d\n",
> -       le32_to_cpu(data->sblock.revision_level), fs->inodesz);
> + debug("EXT2 rev %d, inode_size %d, descriptor size %d\n",
> +      le32_to_cpu(data->sblock.revision_level),
> +      fs->inodesz, fs->gdsize);
>  
>   data->diropen.data = data;
>   data->diropen.ino = 2;
> diff --git a/include/ext4fs.h b/include/ext4fs.h
> index 6e31c73..7e1ee6c 100644
> --- a/include/ext4fs.h
> +++ b/include/ext4fs.h
> @@ -87,6 +87,8 @@ struct ext_filesystem {
>   uint32_t inodesz;
>   /* Sectors per Block */
>   uint32_t sect_perblk;
> + /* Group Descriptor size */
> + uint16_t gdsize;
>   /* Group Descriptor Block Number */
>   uint32_t gdtable_blkno;
>   /* Total block groups of partition */


_______________________________________________
U-Boot mailing list
[hidden email]
http://lists.denx.de/mailman/listinfo/u-boot
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH 2/7] ext4: determine group descriptor size for 64bit feature

Stefan Brüns
Hi Kever,

can you test the ext4 patch I just posted?

Kind regards,

Stefan

--
Stefan Brüns  /  Bergstraße 21  /  52062 Aachen
home: +49 241 53809034     mobile: +49 151 50412019
work: +49 2405 49936-424
_______________________________________________
U-Boot mailing list
[hidden email]
http://lists.denx.de/mailman/listinfo/u-boot