|
@@ -52,6 +52,7 @@
|
|
|
#include "ocfs1_fs_compat.h"
|
|
|
|
|
|
#include "alloc.h"
|
|
|
+#include "blockcheck.h"
|
|
|
#include "dlmglue.h"
|
|
|
#include "export.h"
|
|
|
#include "extent_map.h"
|
|
@@ -1989,6 +1990,15 @@ static int ocfs2_verify_volume(struct ocfs2_dinode *di,
|
|
|
|
|
|
if (memcmp(di->i_signature, OCFS2_SUPER_BLOCK_SIGNATURE,
|
|
|
strlen(OCFS2_SUPER_BLOCK_SIGNATURE)) == 0) {
|
|
|
+ /* We have to do a raw check of the feature here */
|
|
|
+ if (le32_to_cpu(di->id2.i_super.s_feature_incompat) &
|
|
|
+ OCFS2_FEATURE_INCOMPAT_META_ECC) {
|
|
|
+ status = ocfs2_block_check_validate(bh->b_data,
|
|
|
+ bh->b_size,
|
|
|
+ &di->i_check);
|
|
|
+ if (status)
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
status = -EINVAL;
|
|
|
if ((1 << le32_to_cpu(di->id2.i_super.s_blocksize_bits)) != blksz) {
|
|
|
mlog(ML_ERROR, "found superblock with incorrect block "
|
|
@@ -2030,6 +2040,7 @@ static int ocfs2_verify_volume(struct ocfs2_dinode *di,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+out:
|
|
|
mlog_exit(status);
|
|
|
return status;
|
|
|
}
|