issues Ext4 inode flags

Pedro Giffuni pfg at FreeBSD.org
Thu Jan 16 16:31:38 UTC 2014


Hello;

I have been working around some issues in our ext2/3/4 support and
there is this problem:

Before r260545 we were passing the Ext2/3/4 flags with some
conversion into the inode i_flags. Since our system flags don't
match the linux flags this actually introduced a lot of garbage.

r260545 cut the garbage completely but it also does not pass
the EXT4 flags of which we need two for our ext4 ro implementation:
EXT4_EXTENTS and EXT4_INDEX. We also use EXT4_HUGE_FILE
but we can read that directly from the dinode.

The flags are pretty specific to Ext4 so it doesn't make sense to add
them to to our stat.h and include them in the inode conversion routines.

I have two options:

1- Pass only the flags that we need and clear the rest.
Obviously a hack, this seems this is somewhat safer and has
worked so far as it only applies to the read-only ext4. There is
still some space for collision:
EXT4_INDEX     --> UF_READONLY
EXT4_EXTENTS --> UF_HIDDEN

The patch is here:
http://people.freebsd.org/~pfg/patches/ext2fs/ext2fs-passinode.patch

2- Create a field in the inode specifically to carry the Ext4_* inode flags.
This. of course, costs memory for a feature that is rarely used but
is cleaner and may be useful if we ever add write support.

The proof-of-concept patch is here:
http://people.freebsd.org/~pfg/patches/ext2fs/ext2fs-inode.patch

I am inclining towards option (1): it's rather hackish but it
just works and I don't forsee us doing much efforts to support
ext4 much better in the future.

Both patches re-enable dirindex for testing purposes.
Comments and testing are welcome.

Pedro.



More information about the freebsd-fs mailing list