f2fs: fix to recover quota data correctly
authorChao Yu <chao@kernel.org>
Sun, 2 Apr 2023 11:27:06 +0000 (19:27 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 13 Apr 2023 03:00:36 +0000 (20:00 -0700)
commite1bb7d3d9cbf3ddcb8367d87b2f70757ec55f951
tree3db9e05a07765d76836d3ccb441d6b1d5ff24818
parentd78dfefcde9d311284434560d69c0478c55a657e
f2fs: fix to recover quota data correctly

With -O quota mkfs option, xfstests generic/417 fails due to fsck detects
data corruption on quota inodes.

[ASSERT] (fsck_chk_quota_files:2051)  --> Quota file is missing or invalid quota file content found.

The root cause is there is a hole f2fs doesn't hold quota inodes,
so all recovered quota data will be dropped due to SBI_POR_DOING
flag was set.
- f2fs_fill_super
 - f2fs_recover_orphan_inodes
  - f2fs_enable_quota_files
  - f2fs_quota_off_umount
<--- quota inodes were dropped --->
 - f2fs_recover_fsync_data
  - f2fs_enable_quota_files
  - f2fs_quota_off_umount

This patch tries to eliminate the hole by holding quota inodes
during entire recovery flow as below:
- f2fs_fill_super
 - f2fs_recover_quota_begin
 - f2fs_recover_orphan_inodes
 - f2fs_recover_fsync_data
 - f2fs_recover_quota_end

Then, recovered quota data can be persisted after SBI_POR_DOING
is cleared.

Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/checkpoint.c
fs/f2fs/debug.c
fs/f2fs/f2fs.h
fs/f2fs/recovery.c
fs/f2fs/super.c