|
@@ -1452,6 +1452,7 @@ int sanity_check_ckpt(struct f2fs_sb_info *sbi)
|
|
unsigned int total, fsmeta;
|
|
unsigned int total, fsmeta;
|
|
struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
|
|
struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
|
|
struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
|
|
struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
|
|
|
|
+ unsigned int ovp_segments, reserved_segments;
|
|
|
|
|
|
total = le32_to_cpu(raw_super->segment_count);
|
|
total = le32_to_cpu(raw_super->segment_count);
|
|
fsmeta = le32_to_cpu(raw_super->segment_count_ckpt);
|
|
fsmeta = le32_to_cpu(raw_super->segment_count_ckpt);
|
|
@@ -1463,6 +1464,16 @@ int sanity_check_ckpt(struct f2fs_sb_info *sbi)
|
|
if (unlikely(fsmeta >= total))
|
|
if (unlikely(fsmeta >= total))
|
|
return 1;
|
|
return 1;
|
|
|
|
|
|
|
|
+ ovp_segments = le32_to_cpu(ckpt->overprov_segment_count);
|
|
|
|
+ reserved_segments = le32_to_cpu(ckpt->rsvd_segment_count);
|
|
|
|
+
|
|
|
|
+ if (unlikely(fsmeta < F2FS_MIN_SEGMENTS ||
|
|
|
|
+ ovp_segments == 0 || reserved_segments == 0)) {
|
|
|
|
+ f2fs_msg(sbi->sb, KERN_ERR,
|
|
|
|
+ "Wrong layout: check mkfs.f2fs version");
|
|
|
|
+ return 1;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (unlikely(f2fs_cp_error(sbi))) {
|
|
if (unlikely(f2fs_cp_error(sbi))) {
|
|
f2fs_msg(sbi->sb, KERN_ERR, "A bug case: need to run fsck");
|
|
f2fs_msg(sbi->sb, KERN_ERR, "A bug case: need to run fsck");
|
|
return 1;
|
|
return 1;
|