@@ -28,7 +28,7 @@ struct kmem_cache *inode_entry_slab;
28
28
29
29
void f2fs_stop_checkpoint (struct f2fs_sb_info * sbi , bool end_io )
30
30
{
31
- set_ckpt_flags (sbi -> ckpt , CP_ERROR_FLAG );
31
+ set_ckpt_flags (sbi , CP_ERROR_FLAG );
32
32
sbi -> sb -> s_flags |= MS_RDONLY ;
33
33
if (!end_io )
34
34
f2fs_flush_merged_bios (sbi );
@@ -571,7 +571,7 @@ int recover_orphan_inodes(struct f2fs_sb_info *sbi)
571
571
block_t start_blk , orphan_blocks , i , j ;
572
572
int err ;
573
573
574
- if (!is_set_ckpt_flags (F2FS_CKPT ( sbi ) , CP_ORPHAN_PRESENT_FLAG ))
574
+ if (!is_set_ckpt_flags (sbi , CP_ORPHAN_PRESENT_FLAG ))
575
575
return 0 ;
576
576
577
577
start_blk = __start_cp_addr (sbi ) + 1 + __cp_payload (sbi );
@@ -595,7 +595,7 @@ int recover_orphan_inodes(struct f2fs_sb_info *sbi)
595
595
f2fs_put_page (page , 1 );
596
596
}
597
597
/* clear Orphan Flag */
598
- clear_ckpt_flags (F2FS_CKPT ( sbi ) , CP_ORPHAN_PRESENT_FLAG );
598
+ clear_ckpt_flags (sbi , CP_ORPHAN_PRESENT_FLAG );
599
599
return 0 ;
600
600
}
601
601
@@ -1043,10 +1043,12 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
1043
1043
1044
1044
/* 2 cp + n data seg summary + orphan inode blocks */
1045
1045
data_sum_blocks = npages_for_summary_flush (sbi , false);
1046
+ spin_lock (& sbi -> cp_lock );
1046
1047
if (data_sum_blocks < NR_CURSEG_DATA_TYPE )
1047
- set_ckpt_flags (ckpt , CP_COMPACT_SUM_FLAG );
1048
+ __set_ckpt_flags (ckpt , CP_COMPACT_SUM_FLAG );
1048
1049
else
1049
- clear_ckpt_flags (ckpt , CP_COMPACT_SUM_FLAG );
1050
+ __clear_ckpt_flags (ckpt , CP_COMPACT_SUM_FLAG );
1051
+ spin_unlock (& sbi -> cp_lock );
1050
1052
1051
1053
orphan_blocks = GET_ORPHAN_BLOCKS (orphan_num );
1052
1054
ckpt -> cp_pack_start_sum = cpu_to_le32 (1 + cp_payload_blks +
@@ -1061,26 +1063,29 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
1061
1063
cp_payload_blks + data_sum_blocks +
1062
1064
orphan_blocks );
1063
1065
1066
+ spin_lock (& sbi -> cp_lock );
1064
1067
if (cpc -> reason == CP_UMOUNT )
1065
- set_ckpt_flags (ckpt , CP_UMOUNT_FLAG );
1068
+ __set_ckpt_flags (ckpt , CP_UMOUNT_FLAG );
1066
1069
else
1067
- clear_ckpt_flags (ckpt , CP_UMOUNT_FLAG );
1070
+ __clear_ckpt_flags (ckpt , CP_UMOUNT_FLAG );
1068
1071
1069
1072
if (cpc -> reason == CP_FASTBOOT )
1070
- set_ckpt_flags (ckpt , CP_FASTBOOT_FLAG );
1073
+ __set_ckpt_flags (ckpt , CP_FASTBOOT_FLAG );
1071
1074
else
1072
- clear_ckpt_flags (ckpt , CP_FASTBOOT_FLAG );
1075
+ __clear_ckpt_flags (ckpt , CP_FASTBOOT_FLAG );
1073
1076
1074
1077
if (orphan_num )
1075
- set_ckpt_flags (ckpt , CP_ORPHAN_PRESENT_FLAG );
1078
+ __set_ckpt_flags (ckpt , CP_ORPHAN_PRESENT_FLAG );
1076
1079
else
1077
- clear_ckpt_flags (ckpt , CP_ORPHAN_PRESENT_FLAG );
1080
+ __clear_ckpt_flags (ckpt , CP_ORPHAN_PRESENT_FLAG );
1078
1081
1079
1082
if (is_sbi_flag_set (sbi , SBI_NEED_FSCK ))
1080
- set_ckpt_flags (ckpt , CP_FSCK_FLAG );
1083
+ __set_ckpt_flags (ckpt , CP_FSCK_FLAG );
1081
1084
1082
1085
/* set this flag to activate crc|cp_ver for recovery */
1083
- set_ckpt_flags (ckpt , CP_CRC_RECOVERY_FLAG );
1086
+ __set_ckpt_flags (ckpt , CP_CRC_RECOVERY_FLAG );
1087
+
1088
+ spin_unlock (& sbi -> cp_lock );
1084
1089
1085
1090
/* update SIT/NAT bitmap */
1086
1091
get_sit_bitmap (sbi , __bitmap_ptr (sbi , SIT_BITMAP ));
0 commit comments