flush_curseg_sit_entries(sbi);
}
fix_checkpoint(sbi);
- } else if (is_set_ckpt_flags(cp, CP_FSCK_FLAG)) {
+ } else if (is_set_ckpt_flags(cp, CP_FSCK_FLAG) ||
+ is_set_ckpt_flags(cp, CP_QUOTA_NEED_FSCK_FLAG)) {
write_checkpoint(sbi);
}
}
void print_cp_state(u32 flag)
{
MSG(0, "Info: checkpoint state = %x : ", flag);
+ if (flag & CP_QUOTA_NEED_FSCK_FLAG)
+ MSG(0, "%s", " quota_need_fsck");
if (flag & CP_LARGE_NAT_BITMAP_FLAG)
MSG(0, "%s", " large_nat_bitmap");
if (flag & CP_NOCRC_RECOVERY_FLAG)
print_ckpt_info(sbi);
+ if (c.quota_fix) {
+ if (get_cp(ckpt_flags) & CP_QUOTA_NEED_FSCK_FLAG)
+ c.fix_on = 1;
+ }
+
if (c.auto_fix || c.preen_mode) {
u32 flag = get_cp(ckpt_flags);
if (flag & CP_FSCK_FLAG ||
- (exist_qf_ino(sb) && (!(flag & CP_UMOUNT_FLAG) ||
- flag & CP_ERROR_FLAG))) {
+ flag & CP_QUOTA_NEED_FSCK_FLAG ||
+ (exist_qf_ino(sb) && (flag & CP_ERROR_FLAG))) {
c.fix_on = 1;
} else if (!c.preen_mode) {
print_cp_state(flag);
int defset;
int bug_on;
int auto_fix;
+ int quota_fix;
int preen_mode;
int ro;
int preserve_limits; /* preserve quota limits */
* For checkpoint
*/
#define CP_DISABLED_FLAG 0x00001000
+#define CP_QUOTA_NEED_FSCK_FLAG 0x00000800
#define CP_LARGE_NAT_BITMAP_FLAG 0x00000400
#define CP_NOCRC_RECOVERY_FLAG 0x00000200
#define CP_TRIMMED_FLAG 0x00000100