MFC r262346:

ext2fs: fully enable ext4 read-only support.

The ext4 developers tend to tag Ext4-specific flags as
"incompatible" even when such features are not relevant for
read-only support.  This is a consequence of the process
though which this filesystem is implemented without design
and the fact that some new features are not extensible to
ext2/3.

Organize the features according to what we support and sort
them so that we can now read-only mount filesystems with
some features that may be found in newly formatted ext4 fs.

Submitted by:	Zheng Liu
This commit is contained in:
pfg 2014-02-27 16:05:52 +00:00
parent f03d4b82a2
commit ea1005cca4
2 changed files with 14 additions and 6 deletions

View File

@ -290,7 +290,8 @@ ext2_check_sb_compat(struct ext2fs *es, struct cdev *dev, int ronly)
return (1);
}
if (es->e2fs_rev > E2FS_REV0) {
if (es->e2fs_features_incompat & ~EXT2F_INCOMPAT_SUPP) {
if (es->e2fs_features_incompat & ~(EXT2F_INCOMPAT_SUPP |
EXT4F_RO_INCOMPAT_SUPP)) {
printf(
"WARNING: mount of %s denied due to unsupported optional features\n",
devtoname(dev));

View File

@ -200,19 +200,26 @@ struct csum {
* We support the following REV1 features:
* - EXT2F_ROCOMPAT_SPARSESUPER
* - EXT2F_ROCOMPAT_LARGEFILE
* - EXT2F_ROCOMPAT_EXTRA_ISIZE
* - EXT2F_INCOMPAT_FTYPE
*
* We partially (read-only) support the following EXT4 features:
* We partially support (read-only) the following EXT4 features:
* - EXT2F_ROCOMPAT_HUGE_FILE
* - EXT2F_ROCOMPAT_EXTRA_ISIZE
* - EXT2F_INCOMPAT_EXTENTS
*
* We do not support these EXT4 features but they are irrelevant
* for read-only support:
* - EXT2F_INCOMPAT_FLEX_BG
* - EXT2F_INCOMPAT_META_BG
*/
#define EXT2F_COMPAT_SUPP 0x0000
#define EXT2F_COMPAT_SUPP EXT2F_COMPAT_DIRHASHINDEX
#define EXT2F_ROCOMPAT_SUPP (EXT2F_ROCOMPAT_SPARSESUPER | \
EXT2F_ROCOMPAT_LARGEFILE | \
EXT2F_ROCOMPAT_EXTRA_ISIZE)
#define EXT2F_INCOMPAT_SUPP (EXT2F_INCOMPAT_FTYPE | \
EXT2F_INCOMPAT_EXTENTS)
#define EXT2F_INCOMPAT_SUPP EXT2F_INCOMPAT_FTYPE
#define EXT4F_RO_INCOMPAT_SUPP (EXT2F_INCOMPAT_EXTENTS | \
EXT2F_INCOMPAT_FLEX_BG | \
EXT2F_INCOMPAT_META_BG )
/* Assume that user mode programs are passing in an ext2fs superblock, not
* a kernel struct super_block. This will allow us to call the feature-test