All of lore.kernel.org
 help / color / mirror / Atom feed
From: heyunlei <heyunlei@huawei.com>
To: Jaegeuk Kim <jaegeuk@kernel.org>
Cc: "Zhangdianfang (Euler)" <zhangdianfang@huawei.com>,
	"linux-f2fs-devel@lists.sourceforge.net"
	<linux-f2fs-devel@lists.sourceforge.net>
Subject: Re: [PATCH] fsck.f2fs: recover nat bits feature default by fsck
Date: Tue, 10 Apr 2018 08:58:19 +0000	[thread overview]
Message-ID: <42B685BFA705F94C860C6DD0752F056548363C0D@DGGEMA503-MBS.china.huawei.com> (raw)
In-Reply-To: <20180410040047.GD47598@jaegeuk-macbookpro.roam.corp.google.com>



>-----Original Message-----
>From: Jaegeuk Kim [mailto:jaegeuk@kernel.org]
>Sent: Tuesday, April 10, 2018 12:01 PM
>To: heyunlei
>Cc: Yuchao (T); linux-f2fs-devel@lists.sourceforge.net; Wangbintian; Zhangdianfang (Euler)
>Subject: Re: [f2fs-dev][PATCH] fsck.f2fs: recover nat bits feature default by fsck
>
>On 04/09, Yunlei He wrote:
>> Now, nat bits feature is enabled by default, we will
>> meet with the following scenarios:
>>
>> i.   disabled, without CP_NAT_BITS_FLAG, if fsck find some
>>      fs errors, fix or write new checkpoint will then enable it.
>> ii.  enabled, with CP_NAT_BITS_FLAG, in the case of sudden
>>      power off, bitmap will get lost but CP_NAT_BITS_FLAG
>>      still exist, fsck will recover bitmap in f2fs_do_mount.
>> iii. enabled, with CP_NAT_BITS_FLAG, both of bitmap and
>>      CP_NAT_BITS_FLAG will get lost if not enough space for
>>      nat bits or nat bits check failed during mounting.
>>      SBI_NEED_FSCK is set, fsck will recover flag and bitmap
>>      before next mount.
>>
>> SBI_NEED_FSCK means fs is corrupted, is not suitable for
>> nat bits disabled. This patch try to recover nat bits all
>> by fsck, no need set SBI_NEED_FSCK flag in kernel.
>>
>> Signed-off-by: Yunlei He <heyunlei@huawei.com>
>> ---
>>  fsck/mount.c | 15 ++++++++++-----
>>  1 file changed, 10 insertions(+), 5 deletions(-)
>>
>> diff --git a/fsck/mount.c b/fsck/mount.c
>> index e5574c5..2361ee0 100644
>> --- a/fsck/mount.c
>> +++ b/fsck/mount.c
>> @@ -2389,7 +2389,7 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi)
>>  	}
>>
>>  	/* Check nat_bits */
>> -	if (c.func != DUMP && is_set_ckpt_flags(cp, CP_NAT_BITS_FLAG)) {
>> +	if (c.func != DUMP) {
>>  		u_int32_t nat_bits_bytes, nat_bits_blocks;
>>  		__le64 *kaddr;
>>  		u_int32_t blk;
>> @@ -2406,10 +2406,15 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi)
>>  		kaddr = malloc(PAGE_SIZE);
>>  		ret = dev_read_block(kaddr, blk);
>>  		ASSERT(ret >= 0);
>> -		if (*kaddr != get_cp_crc(cp))
>> -			write_nat_bits(sbi, sb, cp, sbi->cur_cp);
>> -		else
>> -			MSG(0, "Info: Found valid nat_bits in checkpoint\n");
>> +		if(is_set_ckpt_flags(cp, CP_NAT_BITS_FLAG)) {
>> +			if (*kaddr != get_cp_crc(cp))
>> +				write_nat_bits(sbi, sb, cp, sbi->cur_cp);
>> +			else
>> +				MSG(0, "Info: Found valid nat_bits in checkpoint\n");
>> +		} else if (c.func == FSCK){
>> +			ASSERT_MSG("Need to recover nat_bits.");
>> +			c.fix_on = 1;
>
>What if kernel doesn't support this?

How about patch as below:

@@ -1055,6 +1055,7 @@ enum {
        SBI_POR_DOING,                          /* recovery is doing or not */
        SBI_NEED_SB_WRITE,                      /* need to recover superblock */
        SBI_NEED_CP,                            /* need to checkpoint */
+       SBI_DISABLE_NAT_BITS,                   /* disable nat bits temporay */
 };

 enum {
@@ -1517,11 +1518,10 @@ static inline void disable_nat_bits(struct f2fs_sb_info *sbi, bool lock)
 {
        unsigned long flags;

-       set_sbi_flag(sbi, SBI_NEED_FSCK);
+       set_sbi_flag(sbi, SBI_DISABLE_NAT_BITS);

        if (lock)
                spin_lock_irqsave(&sbi->cp_lock, flags);
-       __clear_ckpt_flags(F2FS_CKPT(sbi), CP_NAT_BITS_FLAG);
        kfree(NM_I(sbi)->nat_bits);
        NM_I(sbi)->nat_bits = NULL;
        if (lock)
@@ -1531,7 +1531,8 @@ static inline void disable_nat_bits(struct f2fs_sb_info *sbi, bool lock)
 static inline bool enabled_nat_bits(struct f2fs_sb_info *sbi,
                                        struct cp_control *cpc)
 {
-       bool set = is_set_ckpt_flags(sbi, CP_NAT_BITS_FLAG);
+       bool set = is_set_ckpt_flags(sbi, CP_NAT_BITS_FLAG) &&
+                       !is_sbi_flag_set(sbi, SBI_DISABLE_NAT_BITS);

        return (cpc) ? (cpc->reason & CP_UMOUNT) && set : set;
 }

Thanks.

>
>> +		}
>>  		free(kaddr);
>>  	}
>>  	return 0;
>> --
>> 1.9.1

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

      parent reply	other threads:[~2018-04-10  8:58 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-09  3:34 [PATCH] fsck.f2fs: recover nat bits feature default by fsck Yunlei He
2018-04-09 10:59 ` Chao Yu
2018-04-10  4:00 ` Jaegeuk Kim
2018-04-10  4:26   ` heyunlei
2018-04-13  0:37     ` Jaegeuk Kim
2018-04-13  1:20       ` Chao Yu
2018-04-13  3:59         ` Jaegeuk Kim
2018-04-13  7:37           ` Chao Yu
2018-04-10  8:58   ` heyunlei [this message]

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=42B685BFA705F94C860C6DD0752F056548363C0D@DGGEMA503-MBS.china.huawei.com \
    --to=heyunlei@huawei.com \
    --cc=jaegeuk@kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=zhangdianfang@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.