All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chao Yu <yuchao0@huawei.com>
To: Junling Zheng <zhengjunling@huawei.com>,
	Chao Yu <chao@kernel.org>,
	jaegeuk@kernel.org
Cc: miaoxie@huawei.com, linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [RFC PATCH 4/4] f2fs-tools: introduce sb checksum
Date: Tue, 14 Aug 2018 13:54:33 +0800	[thread overview]
Message-ID: <bbf15a63-4090-bbc6-0bd5-533ffb84ac35@huawei.com> (raw)
In-Reply-To: <d2804e71-2d50-d9b6-3788-1af04d880ec2@huawei.com>

On 2018/8/14 10:03, Junling Zheng wrote:
> Hi, Chao
> 
> On 2018/8/13 22:33, Chao Yu wrote:
>> On 2018/8/13 21:32, Junling Zheng wrote:
>>> This patch introduced crc for superblock.
>>>
>>> Signed-off-by: Junling Zheng <zhengjunling@huawei.com>
>>> ---
>>>  fsck/mount.c       | 23 +++++++++++++++++++++++
>>>  fsck/resize.c      | 12 ++++++------
>>>  include/f2fs_fs.h  | 16 +++++++++++++++-
>>>  mkfs/f2fs_format.c |  3 +++
>>>  4 files changed, 47 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/fsck/mount.c b/fsck/mount.c
>>> index e7ceb8d..af9b219 100644
>>> --- a/fsck/mount.c
>>> +++ b/fsck/mount.c
>>> @@ -340,6 +340,7 @@ void print_raw_sb_info(struct f2fs_super_block *sb)
>>>  	DISP_u32(sb, node_ino);
>>>  	DISP_u32(sb, meta_ino);
>>>  	DISP_u32(sb, cp_payload);
>>> +	DISP_u32(sb, crc);
>>
>> if (feature is on) {
>> 	DISP_u32(sb, checksum_offset);
>> 	DISP_u32(sb, crc);
>> }
>>
> 
> sb->checksum_offset had been printed before without any conditions.
> So I think it's better to print them always :)

Alright, since it's trivial. :)

Thanks,

> 
>> Thanks,
>>
>>>  	DISP("%-.256s", sb, version);
>>>  	printf("\n");
>>>  }
>>> @@ -467,6 +468,9 @@ void print_sb_state(struct f2fs_super_block *sb)
>>>  	if (f & cpu_to_le32(F2FS_FEATURE_LOST_FOUND)) {
>>>  		MSG(0, "%s", " lost_found");
>>>  	}
>>> +	if (f & cpu_to_le32(F2FS_FEATURE_SB_CHKSUM)) {
>>> +		MSG(0, "%s", " sb_checksum");
>>> +	}
>>>  	MSG(0, "\n");
>>>  	MSG(0, "Info: superblock encrypt level = %d, salt = ",
>>>  					sb->encryption_level);
>>> @@ -555,10 +559,29 @@ static inline int sanity_check_area_boundary(struct f2fs_super_block *sb,
>>>  	return 0;
>>>  }
>>>  
>>> +static int verify_sb_chksum(struct f2fs_super_block *sb)
>>> +{
>>> +	if (SB_CHKSUM_OFFSET != get_sb(checksum_offset)) {
>>> +		MSG(0, "\tInvalid SB CRC offset: %u\n",
>>> +					get_sb(checksum_offset));
>>> +		return -1;
>>> +	}
>>> +	if (f2fs_crc_valid(get_sb(crc), sb,
>>> +			get_sb(checksum_offset))) {
>>> +		MSG(0, "\tInvalid SB CRC: 0x%x\n", get_sb(crc));
>>> +		return -1;
>>> +	}
>>> +	return 0;
>>> +}
>>> +
>>>  int sanity_check_raw_super(struct f2fs_super_block *sb, enum SB_ADDR sb_addr)
>>>  {
>>>  	unsigned int blocksize;
>>>  
>>> +	if ((get_sb(feature) & F2FS_FEATURE_SB_CHKSUM) &&
>>> +					verify_sb_chksum(sb))
>>> +		return -1;
>>> +
>>>  	if (F2FS_SUPER_MAGIC != get_sb(magic))
>>>  		return -1;
>>>  
>>> diff --git a/fsck/resize.c b/fsck/resize.c
>>> index 5161a1f..3462165 100644
>>> --- a/fsck/resize.c
>>> +++ b/fsck/resize.c
>>> @@ -603,9 +603,6 @@ static int f2fs_resize_grow(struct f2fs_sb_info *sbi)
>>>  		}
>>>  	}
>>>  
>>> -	print_raw_sb_info(sb);
>>> -	print_raw_sb_info(new_sb);
>>> -
>>>  	old_main_blkaddr = get_sb(main_blkaddr);
>>>  	new_main_blkaddr = get_newsb(main_blkaddr);
>>>  	offset = new_main_blkaddr - old_main_blkaddr;
>>> @@ -629,6 +626,9 @@ static int f2fs_resize_grow(struct f2fs_sb_info *sbi)
>>>  	migrate_sit(sbi, new_sb, offset_seg);
>>>  	rebuild_checkpoint(sbi, new_sb, offset_seg);
>>>  	update_superblock(new_sb, SB_ALL);
>>> +	print_raw_sb_info(sb);
>>> +	print_raw_sb_info(new_sb);
>>> +
>>>  	return 0;
>>>  }
>>>  
>>> @@ -658,9 +658,6 @@ static int f2fs_resize_shrink(struct f2fs_sb_info *sbi)
>>>  		}
>>>  	}
>>>  
>>> -	print_raw_sb_info(sb);
>>> -	print_raw_sb_info(new_sb);
>>> -
>>>  	old_main_blkaddr = get_sb(main_blkaddr);
>>>  	new_main_blkaddr = get_newsb(main_blkaddr);
>>>  	offset = old_main_blkaddr - new_main_blkaddr;
>>> @@ -690,6 +687,9 @@ static int f2fs_resize_shrink(struct f2fs_sb_info *sbi)
>>>  	/* move whole data region */
>>>  	//if (err)
>>>  	//	migrate_main(sbi, offset);
>>> +	print_raw_sb_info(sb);
>>> +	print_raw_sb_info(new_sb);
>>> +
>>>  	return 0;
>>>  }
>>>  
>>> diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h
>>> index b0d9b9b..556d526 100644
>>> --- a/include/f2fs_fs.h
>>> +++ b/include/f2fs_fs.h
>>> @@ -279,6 +279,7 @@ static inline uint64_t bswap_64(uint64_t val)
>>>  #define BITS_PER_BYTE		8
>>>  #define F2FS_SUPER_MAGIC	0xF2F52010	/* F2FS Magic Number */
>>>  #define CP_CHKSUM_OFFSET	4092
>>> +#define SB_CHKSUM_OFFSET	3068
>>>  #define MAX_PATH_LEN		64
>>>  #define MAX_DEVICES		8
>>>  
>>> @@ -579,6 +580,7 @@ enum {
>>>  #define F2FS_FEATURE_INODE_CRTIME	0x0100
>>>  #define F2FS_FEATURE_LOST_FOUND		0x0200
>>>  #define F2FS_FEATURE_VERITY		0x0400	/* reserved */
>>> +#define F2FS_FEATURE_SB_CHKSUM		0x0800
>>>  
>>>  #define MAX_VOLUME_NAME		512
>>>  
>>> @@ -632,7 +634,8 @@ struct f2fs_super_block {
>>>  	struct f2fs_device devs[MAX_DEVICES];	/* device list */
>>>  	__le32 qf_ino[F2FS_MAX_QUOTAS];	/* quota inode numbers */
>>>  	__u8 hot_ext_count;		/* # of hot file extension */
>>> -	__u8 reserved[314];		/* valid reserved region */
>>> +	__u8 reserved[310];		/* valid reserved region */
>>> +	__le32 crc;			/* checksum of superblock */
>>>  } __attribute__((packed));
>>>  
>>>  /*
>>> @@ -1337,6 +1340,7 @@ struct feature feature_table[] = {					\
>>>  	{ "inode_crtime",		F2FS_FEATURE_INODE_CRTIME },	\
>>>  	{ "lost_found",			F2FS_FEATURE_LOST_FOUND },	\
>>>  	{ "verity",			F2FS_FEATURE_VERITY },	/* reserved */ \
>>> +	{ "sb_checksum",		F2FS_FEATURE_SB_CHKSUM },	\
>>>  	{ NULL,				0x0},				\
>>>  };
>>>  
>>> @@ -1424,10 +1428,20 @@ static inline int __write_superblock(struct f2fs_super_block *sb, int sb_mask)
>>>  {
>>>  	int index, ret;
>>>  	u_int8_t *buf;
>>> +	u32 old_crc, new_crc;
>>>  
>>>  	buf = calloc(F2FS_BLKSIZE, 1);
>>>  	ASSERT(buf);
>>>  
>>> +	if (get_sb(feature) & F2FS_FEATURE_SB_CHKSUM) {
>>> +		old_crc = get_sb(crc);
>>> +		new_crc = f2fs_cal_crc32(F2FS_SUPER_MAGIC, sb,
>>> +						SB_CHKSUM_OFFSET);
>>> +		set_sb(crc, new_crc);
>>> +		MSG(0, "Info: SB CRC is set successfully"
>>> +				"(0x%x -> 0x%x)\n", old_crc, new_crc);
>>> +	}
>>> +
>>>  	memcpy(buf + F2FS_SUPER_OFFSET, sb, sizeof(*sb));
>>>  	for (index = 0; index < SB_ADDR_MAX; index++) {
>>>  		if ((1 << index) & sb_mask) {
>>> diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c
>>> index 7e3846e..87e33da 100644
>>> --- a/mkfs/f2fs_format.c
>>> +++ b/mkfs/f2fs_format.c
>>> @@ -504,6 +504,9 @@ static int f2fs_prepare_super_block(void)
>>>  
>>>  	sb->feature = c.feature;
>>>  
>>> +	if (get_sb(feature) & F2FS_FEATURE_SB_CHKSUM)
>>> +		set_sb(checksum_offset, SB_CHKSUM_OFFSET);
>>> +
>>>  	return 0;
>>>  }
>>>  
>>>
>>
>> .
>>
> 
> 
> 
> .
> 


------------------------------------------------------------------------------
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-14  5:54 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-13 13:32 [RFC PATCH RESEND 1/4] f2fs: support superblock checksum Junling Zheng
2018-08-13 13:32 ` [RFC PATCH RESEND 2/4] f2fs-tools: rename CHECKSUM_OFFSET to CP_CHKSUM_OFFSET Junling Zheng
2018-08-13 13:32 ` [RFC PATCH 3/4] f2fs-tools: unify the writeback of superblock Junling Zheng
2018-08-13 14:25   ` Chao Yu
2018-08-14  2:08     ` Junling Zheng
2018-08-13 13:32 ` [RFC PATCH 4/4] f2fs-tools: introduce sb checksum Junling Zheng
2018-08-13 14:33   ` Chao Yu
2018-08-14  2:03     ` Junling Zheng
2018-08-14  5:54       ` Chao Yu [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=bbf15a63-4090-bbc6-0bd5-533ffb84ac35@huawei.com \
    --to=yuchao0@huawei.com \
    --cc=chao@kernel.org \
    --cc=jaegeuk@kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=miaoxie@huawei.com \
    --cc=zhengjunling@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.