svn commit: r262346 - head/sys/fs/ext2fs

Pedro F. Giffuni pfg at FreeBSD.org
Sat Feb 22 22:07:17 UTC 2014


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


More information about the svn-src-all mailing list