]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
f2fs: new helper cur_cp_crc() getting crc in f2fs_checkpoint
authorKinglong Mee <kinglongmee@gmail.com>
Sat, 25 Feb 2017 11:53:39 +0000 (19:53 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 27 Feb 2017 18:07:47 +0000 (10:07 -0800)
There are four places that getting the crc value in f2fs_checkpoint,
just add a new helper cur_cp_crc for them.

Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/checkpoint.c
fs/f2fs/f2fs.h
fs/f2fs/node.c
fs/f2fs/node.h

index 04d7c244c0f04acabf87006c4a327cf9277fee6d..0339daf4ca02fac4090fc59783bbfa745bccc9eb 100644 (file)
@@ -683,8 +683,7 @@ static int get_checkpoint_version(struct f2fs_sb_info *sbi, block_t cp_addr,
                return -EINVAL;
        }
 
-       crc = le32_to_cpu(*((__le32 *)((unsigned char *)*cp_block
-                                                       + crc_offset)));
+       crc = cur_cp_crc(*cp_block);
        if (!f2fs_crc_valid(sbi, crc, *cp_block, crc_offset)) {
                f2fs_msg(sbi->sb, KERN_WARNING, "invalid crc value");
                return -EINVAL;
index 633f2efc8c170641bc9801fdc8ab1f2b88e31672..4d332b39638437ce0463996b022af12e76d44a44 100644 (file)
@@ -1126,6 +1126,12 @@ static inline unsigned long long cur_cp_version(struct f2fs_checkpoint *cp)
        return le64_to_cpu(cp->checkpoint_ver);
 }
 
+static inline __u64 cur_cp_crc(struct f2fs_checkpoint *cp)
+{
+       size_t crc_offset = le32_to_cpu(cp->checksum_offset);
+       return le32_to_cpu(*((__le32 *)((unsigned char *)cp + crc_offset)));
+}
+
 static inline bool __is_set_ckpt_flags(struct f2fs_checkpoint *cp, unsigned int f)
 {
        unsigned int ckpt_flags = le32_to_cpu(cp->ckpt_flags);
index 24ea49f988917889b8d00d608626e7646ebdb815..8e53181d5db1a84cbd5c1a8cb0f16f9eb48a99bd 100644 (file)
@@ -2462,9 +2462,6 @@ static int __get_nat_bitmaps(struct f2fs_sb_info *sbi)
        unsigned int nat_bits_bytes = nm_i->nat_blocks / BITS_PER_BYTE;
        unsigned int i;
        __u64 cp_ver = cur_cp_version(ckpt);
-       size_t crc_offset = le32_to_cpu(ckpt->checksum_offset);
-       __u64 crc = le32_to_cpu(*((__le32 *)
-                               ((unsigned char *)ckpt + crc_offset)));
        block_t nat_bits_addr;
 
        if (!enabled_nat_bits(sbi, NULL))
@@ -2487,7 +2484,7 @@ static int __get_nat_bitmaps(struct f2fs_sb_info *sbi)
                f2fs_put_page(page, 1);
        }
 
-       cp_ver |= (crc << 32);
+       cp_ver |= (cur_cp_crc(ckpt) << 32);
        if (cpu_to_le64(cp_ver) != *(__le64 *)nm_i->nat_bits) {
                disable_nat_bits(sbi, true);
                return 0;
index 3fc9c4b1dce937f47abf89f2b4f24a0b39bb53fb..2f9603fa85a59842281b3443e4984351b2692af8 100644 (file)
@@ -300,14 +300,11 @@ static inline void fill_node_footer_blkaddr(struct page *page, block_t blkaddr)
 {
        struct f2fs_checkpoint *ckpt = F2FS_CKPT(F2FS_P_SB(page));
        struct f2fs_node *rn = F2FS_NODE(page);
-       size_t crc_offset = le32_to_cpu(ckpt->checksum_offset);
-       __u64 cp_ver = le64_to_cpu(ckpt->checkpoint_ver);
+       __u64 cp_ver = cur_cp_version(ckpt);
+
+       if (__is_set_ckpt_flags(ckpt, CP_CRC_RECOVERY_FLAG))
+               cp_ver |= (cur_cp_crc(ckpt) << 32);
 
-       if (__is_set_ckpt_flags(ckpt, CP_CRC_RECOVERY_FLAG)) {
-               __u64 crc = le32_to_cpu(*((__le32 *)
-                               ((unsigned char *)ckpt + crc_offset)));
-               cp_ver |= (crc << 32);
-       }
        rn->footer.cp_ver = cpu_to_le64(cp_ver);
        rn->footer.next_blkaddr = cpu_to_le32(blkaddr);
 }
@@ -315,14 +312,11 @@ static inline void fill_node_footer_blkaddr(struct page *page, block_t blkaddr)
 static inline bool is_recoverable_dnode(struct page *page)
 {
        struct f2fs_checkpoint *ckpt = F2FS_CKPT(F2FS_P_SB(page));
-       size_t crc_offset = le32_to_cpu(ckpt->checksum_offset);
        __u64 cp_ver = cur_cp_version(ckpt);
 
-       if (__is_set_ckpt_flags(ckpt, CP_CRC_RECOVERY_FLAG)) {
-               __u64 crc = le32_to_cpu(*((__le32 *)
-                               ((unsigned char *)ckpt + crc_offset)));
-               cp_ver |= (crc << 32);
-       }
+       if (__is_set_ckpt_flags(ckpt, CP_CRC_RECOVERY_FLAG))
+               cp_ver |= (cur_cp_crc(ckpt) << 32);
+
        return cp_ver == cpver_of_node(page);
 }