From: Sheng Yong <shengyong1@huawei.com>
To: k@vodka.home.kg, linux-f2fs-devel@lists.sourceforge.net,
"jaegeuk@kernel.org >> Jaegeuk Kim" <jaegeuk@kernel.org>
Subject: Re: [RFT PATCH 2/2] fsck.f2fs: correct endianness
Date: Sat, 26 Nov 2016 09:10:42 +0800 [thread overview]
Message-ID: <5838E112.9050703@huawei.com> (raw)
In-Reply-To: <1222953746.20161125185556@vodka.home.kg>
On 11/25/2016 11:55 PM, k@vodka.home.kg wrote:
>
> The only thing I changed in your patch is :
>
> - if (addr >= F2FS_RAW_SUPER(sbi)->block_count ||
> + if (le64_to_cpu(addr >= F2FS_RAW_SUPER(sbi)->block_count) ||
> addr < SM_I(sbi)->main_blkaddr) {
>
> You're passing boolean to le64_to_cpu which is obviously error.
> I changed that to :
>
> if (addr >= le64_to_cpu(F2FS_RAW_SUPER(sbi)->block_count) ||
Right. My bad. I'll fix this and send a version 2 :)
thanks,
Sheng
>
> And it worked without errors first on empty fs in a file,
> second on real sda partition with files.
> I havent tested what happens if filesystem is damaged.
>
> Info: Segments per section = 1
> Info: Sections per zone = 1
> Info: sector size = 512
> Info: total sectors = 204800 (100 MB)
> Info: MKFS version
> "Linux version 4.4.30 (vasya@nowhere) (gcc version 5.4.0 (LEDE GCC 5.4.0 r2084) ) #0 PREEMPT Thu Nov 3 07:34:38 2016"
> Info: FSCK version
> from "Linux version 4.4.30 (vasya@nowhere) (gcc version 5.4.0 (LEDE GCC 5.4.0 r2084) ) #0 PREEMPT Thu Nov 3 07:34:38 2016"
> to "Linux version 4.4.30 (vasya@nowhere) (gcc version 5.4.0 (LEDE GCC 5.4.0 r2084) ) #0 PREEMPT Thu Nov 3 07:34:38 2016"
> Info: superblock features = 0 :
> Info: superblock encrypt level = 0, salt = 00000000000000000000000000000000
> Info: total FS sectors = 204800 (100 MB)
> Info: CKPT version = 1
> Info: checkpoint state = 5 : compacted_summary unmount
>
> [FSCK] Unreachable nat entries [Ok..] [0x0]
> [FSCK] SIT valid block bitmap checking [Ok..]
> [FSCK] Hard link checking for regular file [Ok..] [0x0]
> [FSCK] valid_block_count matching with CP [Ok..] [0x2]
> [FSCK] valid_node_count matcing with CP (de lookup) [Ok..] [0x1]
> [FSCK] valid_node_count matcing with CP (nat lookup) [Ok..] [0x1]
> [FSCK] valid_inode_count matched with CP [Ok..] [0x1]
> [FSCK] free segment_count matched with CP [Ok..] [0x24]
> [FSCK] next block offset is free [Ok..]
> [FSCK] fixing SIT types
> [FSCK] other corrupted bugs [Ok..]
>
> Done.
>
>> Reported-by: <k@vodka.home.kg>
>> Signed-off-by: Sheng Yong <shengyong1@huawei.com>
>> ---
>> Hi, k
>
>> Could you please try this? I think I've correct all endianness issue.
>> And can I have your reported-by and test-by?
>
>> thanks,
>> Sheng
>> ---
>> fsck/dir.c | 6 +++---
>> fsck/dump.c | 10 +++++-----
>> fsck/f2fs.h | 4 ++--
>> fsck/mount.c | 12 ++++++------
>> fsck/node.c | 2 +-
>> fsck/segment.c | 3 ++-
>> include/f2fs_fs.h | 8 +++++---
>> 7 files changed, 24 insertions(+), 21 deletions(-)
>
>> diff --git a/fsck/dir.c b/fsck/dir.c
>> index 2009855..d817d27 100644
>> --- a/fsck/dir.c
>> +++ b/fsck/dir.c
>> @@ -134,7 +134,7 @@ static int find_in_level(struct f2fs_sb_info *sbi,struct f2fs_node *dir,
>> struct dnode_of_data dn = {0};
>> void *dentry_blk;
>> int max_slots = 214;
>> - nid_t ino = dir->footer.ino;
>> + nid_t ino = le32_to_cpu(dir->footer.ino);
>> f2fs_hash_t namehash;
>> int ret = 0;
>
>> @@ -191,7 +191,7 @@ static int f2fs_find_entry(struct f2fs_sb_info *sbi,
>> return 0;
>> }
>
>> - max_depth = dir->i.i_current_depth;
>> + max_depth = le32_to_cpu(dir->i.i_current_depth);
>> for (level = 0; level < max_depth; level ++) {
>> if (find_in_level(sbi, dir, level, de))
>> return 1;
>> @@ -209,7 +209,7 @@ static void f2fs_update_dentry(nid_t ino, umode_t mode,
>> int i;
>
>> de = &d->dentry[bit_pos];
> - de->>name_len = len;
> + de->>name_len = cpu_to_le16(len);
>> de->hash_code = name_hash;
>> memcpy(d->filename[bit_pos], name, len);
>> d->filename[bit_pos][len] = 0;
>> diff --git a/fsck/dump.c b/fsck/dump.c
>> index 8e7c85c..e9d442f 100644
>> --- a/fsck/dump.c
>> +++ b/fsck/dump.c
>> @@ -81,7 +81,7 @@ void nat_dump(struct f2fs_sb_info *sbi)
>> "nid:%5u\tino:%5u\toffset:%5u"
>> "\tblkaddr:%10u\tpack:%d\n",
>> ni.nid, ni.ino,
>> - node_block->footer.flag >>
>> +
>> le32_to_cpu(node_block->footer.flag) >>
>> OFFSET_BIT_SHIFT,
>> ni.blk_addr, pack);
>> ret = write(fd, buf, strlen(buf));
>> @@ -100,7 +100,7 @@ void nat_dump(struct f2fs_sb_info *sbi)
>> "nid:%5u\tino:%5u\toffset:%5u"
>> "\tblkaddr:%10u\tpack:%d\n",
>> ni.nid, ni.ino,
>> - node_block->footer.flag >>
>> +
>> le32_to_cpu(node_block->footer.flag) >>
>> OFFSET_BIT_SHIFT,
>> ni.blk_addr, pack);
>> ret = write(fd, buf, strlen(buf));
>> @@ -335,13 +335,13 @@ static void dump_inode_blk(struct f2fs_sb_info *sbi, u32 nid,
>> for (i = 0; i < 5; i++) {
>> if (i == 0 || i == 1)
>> dump_node_blk(sbi, TYPE_DIRECT_NODE,
>> - node_blk->i.i_nid[i], &ofs);
>> +
>> le32_to_cpu(node_blk->i.i_nid[i]), &ofs);
>> else if (i == 2 || i == 3)
>> dump_node_blk(sbi, TYPE_INDIRECT_NODE,
>> - node_blk->i.i_nid[i], &ofs);
>> +
>> le32_to_cpu(node_blk->i.i_nid[i]), &ofs);
>> else if (i == 4)
>> dump_node_blk(sbi, TYPE_DOUBLE_INDIRECT_NODE,
>> - node_blk->i.i_nid[i], &ofs);
>> +
>> le32_to_cpu(node_blk->i.i_nid[i]), &ofs);
>> else
>> ASSERT(0);
>> }
>> diff --git a/fsck/f2fs.h b/fsck/f2fs.h
>> index 1a0723c..0650d10 100644
>> --- a/fsck/f2fs.h
>> +++ b/fsck/f2fs.h
>> @@ -359,7 +359,7 @@ static inline block_t sum_blk_addr(struct
>> f2fs_sb_info *sbi, int base, int type)
>> static inline bool IS_VALID_NID(struct f2fs_sb_info *sbi, u32 nid)
>> {
>> return (nid <= (NAT_ENTRY_PER_BLOCK *
>> - F2FS_RAW_SUPER(sbi)->segment_count_nat
>> +
>> le32_to_cpu(F2FS_RAW_SUPER(sbi)->segment_count_nat)
>> << (sbi->log_blocks_per_seg - 1)));
>> }
>
>> @@ -367,7 +367,7 @@ static inline bool IS_VALID_BLK_ADDR(struct f2fs_sb_info *sbi, u32 addr)
>> {
>> int i;
>
> - if (addr >>= F2FS_RAW_SUPER(sbi)->block_count ||
>> + if (le64_to_cpu(addr >= F2FS_RAW_SUPER(sbi)->block_count) ||
>> addr < SM_I(sbi)->main_blkaddr) {
>> DBG(1, "block addr [0x%x]\n", addr);
>> return 0;
>> diff --git a/fsck/mount.c b/fsck/mount.c
>> index 21a96a7..d5a91a5 100644
>> --- a/fsck/mount.c
>> +++ b/fsck/mount.c
>> @@ -1375,12 +1375,12 @@ void build_sit_area_bitmap(struct f2fs_sb_info *sbi)
>> ptr += SIT_VBLOCK_MAP_SIZE;
>
>> if (se->valid_blocks == 0x0) {
>> - if (sbi->ckpt->cur_node_segno[0] == segno ||
>> -
>> sbi->ckpt->cur_data_segno[0] == segno ||
>> -
>> sbi->ckpt->cur_node_segno[1] == segno ||
>> -
>> sbi->ckpt->cur_data_segno[1] == segno ||
>> -
>> sbi->ckpt->cur_node_segno[2] == segno ||
>> -
>> sbi->ckpt->cur_data_segno[2] == segno) {
>> + if
>> (le32_to_cpu(sbi->ckpt->cur_node_segno[0]) == segno ||
>> +
>> le32_to_cpu(sbi->ckpt->cur_data_segno[0]) == segno ||
>> +
>> le32_to_cpu(sbi->ckpt->cur_node_segno[1]) == segno ||
>> +
>> le32_to_cpu(sbi->ckpt->cur_data_segno[1]) == segno ||
>> +
>> le32_to_cpu(sbi->ckpt->cur_node_segno[2]) == segno ||
>> +
>> le32_to_cpu(sbi->ckpt->cur_data_segno[2]) == segno) {
>> continue;
>> } else {
>> free_segs++;
>> diff --git a/fsck/node.c b/fsck/node.c
>> index c2f83b8..fe923e5 100644
>> --- a/fsck/node.c
>> +++ b/fsck/node.c
>> @@ -78,7 +78,7 @@ block_t new_node_block(struct f2fs_sb_info *sbi,
>
>> type = CURSEG_COLD_NODE;
>> if (IS_DNODE(node_blk)) {
>> - if (S_ISDIR(f2fs_inode->i.i_mode))
>> + if (S_ISDIR(le16_to_cpu(f2fs_inode->i.i_mode)))
>> type = CURSEG_HOT_NODE;
>> else
>> type = CURSEG_WARM_NODE;
>> diff --git a/fsck/segment.c b/fsck/segment.c
>> index 9ce8bf5..6b2f6c1 100644
>> --- a/fsck/segment.c
>> +++ b/fsck/segment.c
>> @@ -80,7 +80,8 @@ static void f2fs_write_block(struct f2fs_sb_info *sbi, nid_t ino, void *buffer,
>> ret = dev_read_block(inode, ni.blk_addr);
>> ASSERT(ret >= 0);
>
>> - if (S_ISDIR(inode->i.i_mode) || S_ISLNK(inode->i.i_mode))
>> + if (S_ISDIR(le16_to_cpu(inode->i.i_mode)) ||
>> + S_ISLNK(le16_to_cpu(inode->i.i_mode)))
>> ASSERT(0);
>
>> off_in_block = offset & ((1 << F2FS_BLKSIZE_BITS) - 1);
>> diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h
>> index 78ea939..ef34ca2 100644
>> --- a/include/f2fs_fs.h
>> +++ b/include/f2fs_fs.h
>> @@ -170,15 +170,17 @@ static inline uint64_t bswap_64(uint64_t val)
>> #define DISP_u32(ptr, member)
>> do {
>> assert(sizeof((ptr)->member) <= 4);
>> - printf("%-30s" "\t\t[0x%8x : %u]\n", \
>> - #member, ((ptr)->member), ((ptr)->member));
>> + printf("%-30s" "\t\t[0x%8x : %u]\n",
>> + #member, le32_to_cpu(((ptr)->member)),
>> + le32_to_cpu(((ptr)->member)));
>> } while (0)
>
>> #define DISP_u64(ptr, member)
>> do {
>> assert(sizeof((ptr)->member) == 8);
>> printf("%-30s" "\t\t[0x%8llx : %llu]\n",
>> - #member, ((ptr)->member), ((ptr)->member));
>> + #member, le64_to_cpu(((ptr)->member)),
>> + le64_to_cpu(((ptr)->member)));
>> } while (0)
>
>> #define DISP_utf(ptr, member)
>
>
>
------------------------------------------------------------------------------
prev parent reply other threads:[~2016-11-26 1:11 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-24 22:30 fsck is broken on mips32 platform k
2016-11-25 1:23 ` Sheng Yong
2016-11-25 8:51 ` k
2016-11-25 14:49 ` [RFT PATCH 1/2] fsck.f2fs: remove duplicated header files Sheng Yong
2016-11-25 14:53 ` [RFT PATCH 2/2] fsck.f2fs: correct endianness Sheng Yong
2016-11-25 15:55 ` k
2016-11-26 1:10 ` Sheng Yong [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=5838E112.9050703@huawei.com \
--to=shengyong1@huawei.com \
--cc=jaegeuk@kernel.org \
--cc=k@vodka.home.kg \
--cc=linux-f2fs-devel@lists.sourceforge.net \
/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.