|
@@ -78,12 +78,16 @@
|
|
|
((((blk_addr) == NULL_ADDR) || ((blk_addr) == NEW_ADDR)) ? \
|
|
|
NULL_SEGNO : GET_L2R_SEGNO(FREE_I(sbi), \
|
|
|
GET_SEGNO_FROM_SEG0(sbi, blk_addr)))
|
|
|
-#define GET_SECNO(sbi, segno) \
|
|
|
+#define BLKS_PER_SEC(sbi) \
|
|
|
+ ((sbi)->segs_per_sec * (sbi)->blocks_per_seg)
|
|
|
+#define GET_SEC_FROM_SEG(sbi, segno) \
|
|
|
((segno) / (sbi)->segs_per_sec)
|
|
|
-#define GET_SEGNO_FROM_SECNO(sbi, secno) \
|
|
|
+#define GET_SEG_FROM_SEC(sbi, secno) \
|
|
|
((secno) * (sbi)->segs_per_sec)
|
|
|
-#define GET_ZONENO_FROM_SEGNO(sbi, segno) \
|
|
|
- (((segno) / (sbi)->segs_per_sec) / (sbi)->secs_per_zone)
|
|
|
+#define GET_ZONE_FROM_SEC(sbi, secno) \
|
|
|
+ ((secno) / (sbi)->secs_per_zone)
|
|
|
+#define GET_ZONE_FROM_SEG(sbi, segno) \
|
|
|
+ GET_ZONE_FROM_SEC(sbi, GET_SEC_FROM_SEG(sbi, segno))
|
|
|
|
|
|
#define GET_SUM_BLOCK(sbi, segno) \
|
|
|
((sbi)->sm_info->ssa_blkaddr + (segno))
|
|
@@ -305,7 +309,7 @@ static inline struct sec_entry *get_sec_entry(struct f2fs_sb_info *sbi,
|
|
|
unsigned int segno)
|
|
|
{
|
|
|
struct sit_info *sit_i = SIT_I(sbi);
|
|
|
- return &sit_i->sec_entries[GET_SECNO(sbi, segno)];
|
|
|
+ return &sit_i->sec_entries[GET_SEC_FROM_SEG(sbi, segno)];
|
|
|
}
|
|
|
|
|
|
static inline unsigned int get_valid_blocks(struct f2fs_sb_info *sbi,
|
|
@@ -360,8 +364,8 @@ static inline unsigned int find_next_inuse(struct free_segmap_info *free_i,
|
|
|
static inline void __set_free(struct f2fs_sb_info *sbi, unsigned int segno)
|
|
|
{
|
|
|
struct free_segmap_info *free_i = FREE_I(sbi);
|
|
|
- unsigned int secno = segno / sbi->segs_per_sec;
|
|
|
- unsigned int start_segno = secno * sbi->segs_per_sec;
|
|
|
+ unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
|
|
|
+ unsigned int start_segno = GET_SEG_FROM_SEC(sbi, secno);
|
|
|
unsigned int next;
|
|
|
|
|
|
spin_lock(&free_i->segmap_lock);
|
|
@@ -381,7 +385,8 @@ static inline void __set_inuse(struct f2fs_sb_info *sbi,
|
|
|
unsigned int segno)
|
|
|
{
|
|
|
struct free_segmap_info *free_i = FREE_I(sbi);
|
|
|
- unsigned int secno = segno / sbi->segs_per_sec;
|
|
|
+ unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
|
|
|
+
|
|
|
set_bit(segno, free_i->free_segmap);
|
|
|
free_i->free_segments--;
|
|
|
if (!test_and_set_bit(secno, free_i->free_secmap))
|
|
@@ -392,8 +397,8 @@ static inline void __set_test_and_free(struct f2fs_sb_info *sbi,
|
|
|
unsigned int segno)
|
|
|
{
|
|
|
struct free_segmap_info *free_i = FREE_I(sbi);
|
|
|
- unsigned int secno = segno / sbi->segs_per_sec;
|
|
|
- unsigned int start_segno = secno * sbi->segs_per_sec;
|
|
|
+ unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
|
|
|
+ unsigned int start_segno = GET_SEG_FROM_SEC(sbi, secno);
|
|
|
unsigned int next;
|
|
|
|
|
|
spin_lock(&free_i->segmap_lock);
|
|
@@ -414,7 +419,8 @@ static inline void __set_test_and_inuse(struct f2fs_sb_info *sbi,
|
|
|
unsigned int segno)
|
|
|
{
|
|
|
struct free_segmap_info *free_i = FREE_I(sbi);
|
|
|
- unsigned int secno = segno / sbi->segs_per_sec;
|
|
|
+ unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
|
|
|
+
|
|
|
spin_lock(&free_i->segmap_lock);
|
|
|
if (!test_and_set_bit(segno, free_i->free_segmap)) {
|
|
|
free_i->free_segments--;
|
|
@@ -479,12 +485,12 @@ static inline int overprovision_segments(struct f2fs_sb_info *sbi)
|
|
|
|
|
|
static inline int overprovision_sections(struct f2fs_sb_info *sbi)
|
|
|
{
|
|
|
- return ((unsigned int) overprovision_segments(sbi)) / sbi->segs_per_sec;
|
|
|
+ return GET_SEC_FROM_SEG(sbi, (unsigned int)overprovision_segments(sbi));
|
|
|
}
|
|
|
|
|
|
static inline int reserved_sections(struct f2fs_sb_info *sbi)
|
|
|
{
|
|
|
- return ((unsigned int) reserved_segments(sbi)) / sbi->segs_per_sec;
|
|
|
+ return GET_SEC_FROM_SEG(sbi, (unsigned int)reserved_segments(sbi));
|
|
|
}
|
|
|
|
|
|
static inline bool need_SSR(struct f2fs_sb_info *sbi)
|
|
@@ -722,7 +728,7 @@ static inline block_t sum_blk_addr(struct f2fs_sb_info *sbi, int base, int type)
|
|
|
static inline bool no_fggc_candidate(struct f2fs_sb_info *sbi,
|
|
|
unsigned int secno)
|
|
|
{
|
|
|
- if (get_valid_blocks(sbi, GET_SEGNO_FROM_SECNO(sbi, secno), true) >=
|
|
|
+ if (get_valid_blocks(sbi, GET_SEG_FROM_SEC(sbi, secno), true) >=
|
|
|
sbi->fggc_threshold)
|
|
|
return true;
|
|
|
return false;
|