Patch "f2fs: fix to determine start_cp_addr by sbi->cur_cp_pack" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
f2fs: fix to determine start_cp_addr by sbi->cur_cp_pack
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
f2fs-fix-to-determine-start_cp_addr-by-sbi-cur_cp_pack.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
8508e44ae98622f841f5ef29d0bf3d5db4e0c1ccMon Sep 17 00:00:00 2001
From: Jaegeuk Kim <[email protected]>
Date: Thu, 24 Nov 2016 12:45:15 -0800
Subject: f2fs: fix to determine start_cp_addr by sbi->cur_cp_pack
From: Jaegeuk Kim <[email protected]>
commit 8508e44ae98622f841f5ef29d0bf3d5db4e0c1cc upstream.
We don't guarantee cp_addr is fixed by cp_version. This is to sync with f2fs-tools.
--- fs/f2fs/checkpoint.c | 8 +++++++- fs/f2fs/f2fs.h | 26 ++++++++++++++++---------- 2 files changed, 23 insertions(+), 11 deletions(-)
fs/f2fs/checkpoint.c +7 -1
@@ -772,6 +772,11 @@ int get_valid_checkpoint(struct f2fs_sb_if (sanity_check_ckpt (sbi)) goto fail_no_cp; +if (cur_page == cp1) + sbi->cur_cp_pack =1 ; +else + sbi->cur_cp_pack =2 ; +if (cp_blks <=1 ) goto done;
@@ -1123,7 +1128,7 @@ static int do_checkpoint(struct f2fs_sb_ le32_to_cpu(ckpt->checksum_offset))) =cpu_to_le32 (crc32); - start_blk =__start_cp_addr (sbi); + start_blk =__start_cp_next_addr (sbi);/* need to wait for end_io results */ wait_on_all_pages_writeback (sbi);
@@ -1187,6 +1192,7 @@ static int do_checkpoint(struct f2fs_sb_clear_prefree_segments (sbi, cpc);clear_sbi_flag (sbi,SBI_IS_DIRTY );clear_sbi_flag (sbi,SBI_NEED_CP ); +__set_cp_next_pack (sbi);/* * redirty superblock if metadata like node page or inode cache is
fs/f2fs/f2fs.h +16 -10
@@ -764,6 +764,7 @@ struct f2fs_sb_info {/* for checkpoint */ struct f2fs_checkpoint *ckpt;/* raw checkpoint pointer */ +int cur_cp_pack;/* remain current cp pack */ spinlock_t cp_lock;/* for flag in ckpt */ struct inode *meta_inode;/* cache meta blocks */ struct mutex cp_mutex;/* checkpoint procedure lock */
@@ -1329,22 +1330,27 @@ static inline void *__bitmap_ptr(structstatic inline block_t __start_cp_addr (struct f2fs_sb_info *sbi) { -block_t start_addr; -struct f2fs_checkpoint *ckpt =F2FS_CKPT (sbi); -unsigned long long ckpt_version =cur_cp_version (ckpt); - - start_addr =le32_to_cpu (F2FS_RAW_SUPER (sbi)->cp_blkaddr); +block_t start_addr =le32_to_cpu (F2FS_RAW_SUPER (sbi)->cp_blkaddr); -/* -* odd numbered checkpoint should at cp segment 0 -* and even segment must be at cp segment 1 -*/ -if (!(ckpt_version &1 )) +if (sbi->cur_cp_pack ==2 ) start_addr += sbi->blocks_per_seg; +return start_addr; +} +static inline block_t __start_cp_next_addr (struct f2fs_sb_info *sbi) +{ +block_t start_addr =le32_to_cpu (F2FS_RAW_SUPER (sbi)->cp_blkaddr); + +if (sbi->cur_cp_pack ==1 ) + start_addr += sbi->blocks_per_seg;return start_addr; } +static inline void __set_cp_next_pack (struct f2fs_sb_info *sbi) +{ + sbi->cur_cp_pack = (sbi->cur_cp_pack ==1 ) ?2 :1 ; +} +static inline block_t __start_sum_addr (struct f2fs_sb_info *sbi) {return le32_to_cpu (F2FS_CKPT (sbi)->cp_pack_start_sum);
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/f2fs-fix-to-determine-start_cp_addr-by-sbi-cur_cp_pack.patch queue-4.9/f2fs-fix-overflow-due-to-condition-check-order.patch queue-4.9/revert-f2fs-use-percpu_counter-for-of-dirty-pages-in-inode.patch queue-4.9/f2fs-set-owner-for-debugfs-status-file-s-file_operations.patch