Allow debugfs and dumpe2fs to support fs features under development

Add support for the new flag EXT2_FLAG_SOFTSUPP_FEATURES flag to
ext2fs_open() , which allows application to open filesystes with features
which are currently only partially supported by e2fsprogs.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c
index f09484f..5050117 100644
--- a/lib/ext2fs/openfs.c
+++ b/lib/ext2fs/openfs.c
@@ -86,6 +86,7 @@
 	ext2_filsys	fs;
 	errcode_t	retval;
 	unsigned long	i;
+	__u32		features;
 	int		j, groups_per_block, blocks_per_group, io_flags;
 	blk_t		group_block, blk;
 	char		*dest, *cp;
@@ -197,17 +198,27 @@
 	 * Check for feature set incompatibility
 	 */
 	if (!(flags & EXT2_FLAG_FORCE)) {
-		if (fs->super->s_feature_incompat &
-		    ~EXT2_LIB_FEATURE_INCOMPAT_SUPP) {
+		features = fs->super->s_feature_incompat;
+#ifdef EXT2_LIB_SOFTSUPP_INCOMPAT
+		if (flags & EXT2_FLAG_SOFTSUPP_FEATURES)
+			features &= !EXT2_LIB_SOFTSUPP_INCOMPAT;
+#endif
+		if (features & ~EXT2_LIB_FEATURE_INCOMPAT_SUPP) {
 			retval = EXT2_ET_UNSUPP_FEATURE;
 			goto cleanup;
 		}
+
+		features = fs->super->s_feature_ro_compat;
+#ifdef EXT2_LIB_SOFTSUPP_RO_COMPAT
+		if (flags & EXT2_FLAG_SOFTSUPP_FEATURES)
+			features &= !EXT2_LIB_SOFTSUPP_RO_COMPAT;
+#endif
 		if ((flags & EXT2_FLAG_RW) &&
-		    (fs->super->s_feature_ro_compat &
-		     ~EXT2_LIB_FEATURE_RO_COMPAT_SUPP)) {
+		    (features & ~EXT2_LIB_FEATURE_RO_COMPAT_SUPP)) {
 			retval = EXT2_ET_RO_UNSUPP_FEATURE;
 			goto cleanup;
 		}
+
 		if (!(flags & EXT2_FLAG_JOURNAL_DEV_OK) &&
 		    (fs->super->s_feature_incompat &
 		     EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)) {