Author: pfg
Date: Sat Feb 22 22:07:16 2014
New Revision: 262346
URL: http://svnweb.freebsd.org/changeset/base/262346

Log:
  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
  Reviewed by:  pfg
  MFC after:    5 days

Modified:
  head/sys/fs/ext2fs/ext2_vfsops.c
  head/sys/fs/ext2fs/ext2fs.h

Modified: head/sys/fs/ext2fs/ext2_vfsops.c
==============================================================================
--- head/sys/fs/ext2fs/ext2_vfsops.c    Sat Feb 22 22:03:26 2014        
(r262345)
+++ head/sys/fs/ext2fs/ext2_vfsops.c    Sat Feb 22 22:07:16 2014        
(r262346)
@@ -290,7 +290,8 @@ ext2_check_sb_compat(struct ext2fs *es, 
                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));

Modified: head/sys/fs/ext2fs/ext2fs.h
==============================================================================
--- head/sys/fs/ext2fs/ext2fs.h Sat Feb 22 22:03:26 2014        (r262345)
+++ head/sys/fs/ext2fs/ext2fs.h Sat Feb 22 22:07:16 2014        (r262346)
@@ -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:
  * - 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
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to