All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sheng Yong <shengyong1@huawei.com>
To: Chao Yu <yuchao0@huawei.com>, jaegeuk@kernel.org
Cc: linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [PATCH] fsck.f2fs: detect and recover corrupted quota file
Date: Wed, 29 Aug 2018 23:06:52 +0800	[thread overview]
Message-ID: <30b6c1a6-bacd-8fbb-58b1-c22f3446f41f@huawei.com> (raw)
In-Reply-To: <20180829120923.61173-1-yuchao0@huawei.com>

Hi, Chao

On 2018/8/29 20:09, Chao Yu wrote:
> Once quota file is corrupted, kernel will set CP_QUOTA_NEED_FSCK_FLAG
> into checkpoint pack, this patch makes fsck supporting to detect the flag
> and try to rebuild corrupted quota file.
> 
Do we need to drop recovery data? Recovery data is never checked by fsck,
if fsck tries to rebuild quota, it needs to allocate blocks from cursegs,
this may overwrite data blocks which may be recovered latter.

thanks
> Signed-off-by: Chao Yu <yuchao0@huawei.com>
> ---
>   fsck/fsck.c       | 3 ++-
>   fsck/mount.c      | 6 ++++--
>   include/f2fs_fs.h | 2 ++
>   lib/libf2fs.c     | 2 ++
>   4 files changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/fsck/fsck.c b/fsck/fsck.c
> index f080d3c8741c..10b69ef403ef 100644
> --- a/fsck/fsck.c
> +++ b/fsck/fsck.c
> @@ -2668,7 +2668,8 @@ int fsck_verify(struct f2fs_sb_info *sbi)
>   				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);
>   		}
>   	}
> diff --git a/fsck/mount.c b/fsck/mount.c
> index a2448e370c0b..168cf387991f 100644
> --- a/fsck/mount.c
> +++ b/fsck/mount.c
> @@ -405,6 +405,8 @@ void print_ckpt_info(struct f2fs_sb_info *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)
> @@ -2532,8 +2534,8 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi)
>   		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);
> diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h
> index 9396c785a254..160eaf72f0b6 100644
> --- a/include/f2fs_fs.h
> +++ b/include/f2fs_fs.h
> @@ -372,6 +372,7 @@ struct f2fs_configuration {
>   	int defset;
>   	int bug_on;
>   	int auto_fix;
> +	int quota_fix;
>   	int preen_mode;
>   	int ro;
>   	int preserve_limits;		/* preserve quota limits */
> @@ -641,6 +642,7 @@ struct f2fs_super_block {
>   /*
>    * For checkpoint
>    */
> +#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
> diff --git a/lib/libf2fs.c b/lib/libf2fs.c
> index a1f8beb1f78d..192b8125de36 100644
> --- a/lib/libf2fs.c
> +++ b/lib/libf2fs.c
> @@ -619,6 +619,8 @@ void f2fs_init_configuration(void)
>   	/* default root owner */
>   	c.root_uid = getuid();
>   	c.root_gid = getgid();
> +
> +	c.quota_fix = 1;
>   }
>   
>   #ifdef HAVE_SETMNTENT
> 


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

  reply	other threads:[~2018-08-29 15:07 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-29 12:09 [PATCH] fsck.f2fs: detect and recover corrupted quota file Chao Yu
2018-08-29 15:06 ` Sheng Yong [this message]
2018-08-29 15:38   ` Chao Yu
2018-09-19  1:28 Chao Yu
2018-09-19  1:28 ` Chao Yu
2018-09-19  1:48 ` Sheng Yong
2018-09-19  9:25   ` Chao Yu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=30b6c1a6-bacd-8fbb-58b1-c22f3446f41f@huawei.com \
    --to=shengyong1@huawei.com \
    --cc=jaegeuk@kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=yuchao0@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.