From: <ga...@us...> - 2012-08-10 06:29:28
|
Revision: 5908 http://jnode.svn.sourceforge.net/jnode/?rev=5908&view=rev Author: galatnm Date: 2012-08-10 06:29:21 +0000 (Fri, 10 Aug 2012) Log Message: ----------- Add support to detect Ext4 features. Modified Paths: -------------- trunk/fs/src/fs/org/jnode/fs/ext2/Ext2Constants.java trunk/fs/src/fs/org/jnode/fs/ext2/Ext2FileSystem.java Modified: trunk/fs/src/fs/org/jnode/fs/ext2/Ext2Constants.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/ext2/Ext2Constants.java 2012-08-10 06:19:44 UTC (rev 5907) +++ trunk/fs/src/fs/org/jnode/fs/ext2/Ext2Constants.java 2012-08-10 06:29:21 UTC (rev 5908) @@ -93,6 +93,10 @@ public static final long EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER = 0x0001; public static final long EXT2_FEATURE_RO_COMPAT_LARGE_FILE = 0x0002; public static final long EXT2_FEATURE_RO_COMPAT_BTREE_DIR = 0x0004; + public static final long EXT4_FEATURE_ROCOMPAT_HUGE_FILE = 0x0008; + public static final long EXT4_FEATURE_ROCOMPAT_GDT_CSUM = 0x0010; + public static final long EXT4_FEATURE_ROCOMPAT_DIR_NLINK = 0x0020; + public static final long EXT4_FEATURE_ROCOMPAT_EXTRA_ISIZE = 0x0040; // S_FEATURE_INCOMPAT constants public static final long EXT2_FEATURE_INCOMPAT_COMPRESSION = 0x0001; @@ -100,6 +104,10 @@ public static final long EXT3_FEATURE_INCOMPAT_RECOVER = 0x0004; public static final long EXT3_FEATURE_INCOMPAT_JOURNAL_DEV = 0x0008; public static final long EXT2_FEATURE_INCOMPAT_META_BG = 0x0010; + public static final long EXT4_FEATURE_INCOMPAT_EXTENTS = 0x0040; + public static final long EXT4_FEATURE_INCOMPAT_64BIT = 0x0080; + public static final long EXT4_FEATURE_INCOMPAT_MMP = 0x0100; + public static final long EXT4_FEATURE_INCOMPAT_FLEX_BG = 0X0200; // constants specific to this (JNode) implementation /** Modified: trunk/fs/src/fs/org/jnode/fs/ext2/Ext2FileSystem.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/ext2/Ext2FileSystem.java 2012-08-10 06:19:44 UTC (rev 5907) +++ trunk/fs/src/fs/org/jnode/fs/ext2/Ext2FileSystem.java 2012-08-10 06:29:21 UTC (rev 5908) @@ -24,7 +24,6 @@ import java.nio.ByteBuffer; import java.text.SimpleDateFormat; import java.util.Date; - import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.jnode.driver.Device; @@ -119,16 +118,28 @@ // at all) if (hasIncompatFeature(Ext2Constants.EXT2_FEATURE_INCOMPAT_COMPRESSION)) throw new FileSystemException(getDevice().getId() + - " Unsupported filesystem feature (COMPRESSION) disallows mounting"); + " Unsupported filesystem feature (COMPRESSION) disallows mounting"); if (hasIncompatFeature(Ext2Constants.EXT2_FEATURE_INCOMPAT_META_BG)) throw new FileSystemException(getDevice().getId() + - " Unsupported filesystem feature (META_BG) disallows mounting"); + " Unsupported filesystem feature (META_BG) disallows mounting"); if (hasIncompatFeature(Ext2Constants.EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)) throw new FileSystemException(getDevice().getId() + - " Unsupported filesystem feature (JOURNAL_DEV) disallows mounting"); - if (hasIncompatFeature(Ext2Constants.EXT3_FEATURE_INCOMPAT_RECOVER)) + " Unsupported filesystem feature (JOURNAL_DEV) disallows mounting"); +// if (hasIncompatFeature(Ext2Constants.EXT3_FEATURE_INCOMPAT_RECOVER)) +// throw new FileSystemException(getDevice().getId() + +// " Unsupported filesystem feature (RECOVER) disallows mounting"); +// if (hasIncompatFeature(Ext2Constants.EXT4_FEATURE_INCOMPAT_EXTENTS)) +// throw new FileSystemException(getDevice().getId() + +// " Unsupported filesystem feature (EXTENTS) disallows mounting"); + if (hasIncompatFeature(Ext2Constants.EXT4_FEATURE_INCOMPAT_64BIT)) throw new FileSystemException(getDevice().getId() + - " Unsupported filesystem feature (RECOVER) disallows mounting"); + " Unsupported filesystem feature (64BIT) disallows mounting"); + if (hasIncompatFeature(Ext2Constants.EXT4_FEATURE_INCOMPAT_MMP)) + throw new FileSystemException(getDevice().getId() + + " Unsupported filesystem feature (MMP) disallows mounting"); + if (hasIncompatFeature(Ext2Constants.EXT4_FEATURE_INCOMPAT_FLEX_BG)) + throw new FileSystemException(getDevice().getId() + + " Unsupported filesystem feature (FLEX_BG) disallows mounting"); // an unsupported RO_COMPAT feature means that the filesystem can only // be mounted readonly @@ -140,6 +151,22 @@ log.info(getDevice().getId() + " Unsupported filesystem feature (BTREE_DIR) forces readonly mode"); setReadOnly(true); } + if (hasROFeature(Ext2Constants.EXT4_FEATURE_ROCOMPAT_HUGE_FILE)) { + log.info(getDevice().getId() + " Unsupported filesystem feature (HUGE_FILE) forces readonly mode"); + setReadOnly(true); + } + if (hasROFeature(Ext2Constants.EXT4_FEATURE_ROCOMPAT_GDT_CSUM)) { + log.info(getDevice().getId() + " Unsupported filesystem feature (GDT_CSUM) forces readonly mode"); + setReadOnly(true); + } + if (hasROFeature(Ext2Constants.EXT4_FEATURE_ROCOMPAT_DIR_NLINK)) { + log.info(getDevice().getId() + " Unsupported filesystem feature (DIR_NLINK) forces readonly mode"); + setReadOnly(true); + } + if (hasROFeature(Ext2Constants.EXT4_FEATURE_ROCOMPAT_EXTRA_ISIZE)) { + log.info(getDevice().getId() + " Unsupported filesystem feature (EXTRA_ISIZE) forces readonly mode"); + setReadOnly(true); + } // if the filesystem has not been cleanly unmounted, mount it readonly if (superblock.getState() == Ext2Constants.EXT2_ERROR_FS) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |