X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Fdrivers%2Ffilesystems%2Fext2%2Fsrc%2Fmemory.c;h=6678579a9402599242577ccbf05e7448f17ad11e;hp=8cd9a9fe4b9d69e84c109df1a0e2689322048527;hb=5c2272b886372d945016166cb70887b26a939936;hpb=4f5478d56affb9c741dc0c531c9effc73599096c diff --git a/reactos/drivers/filesystems/ext2/src/memory.c b/reactos/drivers/filesystems/ext2/src/memory.c index 8cd9a9fe4b9..6678579a940 100644 --- a/reactos/drivers/filesystems/ext2/src/memory.c +++ b/reactos/drivers/filesystems/ext2/src/memory.c @@ -2318,17 +2318,22 @@ Ext2InitializeVcb( IN PEXT2_IRP_CONTEXT IrpContext, _SEH2_LEAVE; } - /* checking in/compat features */ - if (IsFlagOn(sb->s_feature_compat, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) { - Vcb->IsExt3fs = TRUE; - } - - /* don't mount any volumes with external journal devices */ - if (IsFlagOn(sb->s_feature_incompat, EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)) { + /* Reject mounting volume if we encounter unsupported incompat features */ + if (FlagOn(sb->s_feature_incompat, ~EXT4_FEATURE_INCOMPAT_SUPP)) { Status = STATUS_UNRECOGNIZED_VOLUME; _SEH2_LEAVE; } + /* Mount the volume RO if we encounter unsupported ro_compat features */ + if (FlagOn(sb->s_feature_ro_compat, ~EXT4_FEATURE_RO_COMPAT_SUPP)) { + SetLongFlag(Vcb->Flags, VCB_RO_COMPAT_READ_ONLY); + } + + /* Recognize the filesystem as Ext3fs if it supports journalling */ + if (IsFlagOn(sb->s_feature_compat, EXT4_FEATURE_COMPAT_HAS_JOURNAL)) { + Vcb->IsExt3fs = TRUE; + } + /* check block size */ Vcb->BlockSize = (EXT2_MIN_BLOCK_SIZE << sb->s_log_block_size); /* we cannot handle volume with block size bigger than 64k */