1 /* SPDX-License-Identifier: GPL-2.0 */
5 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6 * http://www.samsung.com/
8 #include <linux/blkdev.h>
9 #include <linux/backing-dev.h>
12 #define NULL_SEGNO ((unsigned int)(~0))
13 #define NULL_SECNO ((unsigned int)(~0))
15 #define DEF_RECLAIM_PREFREE_SEGMENTS 5 /* 5% over total segments */
16 #define DEF_MAX_RECLAIM_PREFREE_SEGMENTS 4096 /* 8GB in maximum */
18 #define F2FS_MIN_SEGMENTS 9 /* SB + 2 (CP + SIT + NAT) + SSA + MAIN */
19 #define F2FS_MIN_META_SEGMENTS 8 /* SB + 2 (CP + SIT + NAT) + SSA */
21 /* L: Logical segment # in volume, R: Relative segment # in main area */
22 #define GET_L2R_SEGNO(free_i, segno) ((segno) - (free_i)->start_segno)
23 #define GET_R2L_SEGNO(free_i, segno) ((segno) + (free_i)->start_segno)
25 #define IS_DATASEG(t) ((t) <= CURSEG_COLD_DATA)
26 #define IS_NODESEG(t) ((t) >= CURSEG_HOT_NODE && (t) <= CURSEG_COLD_NODE)
28 static inline void sanity_check_seg_type(struct f2fs_sb_info
*sbi
,
29 unsigned short seg_type
)
31 f2fs_bug_on(sbi
, seg_type
>= NR_PERSISTENT_LOG
);
34 #define IS_HOT(t) ((t) == CURSEG_HOT_NODE || (t) == CURSEG_HOT_DATA)
35 #define IS_WARM(t) ((t) == CURSEG_WARM_NODE || (t) == CURSEG_WARM_DATA)
36 #define IS_COLD(t) ((t) == CURSEG_COLD_NODE || (t) == CURSEG_COLD_DATA)
38 #define IS_CURSEG(sbi, seg) \
39 (((seg) == CURSEG_I(sbi, CURSEG_HOT_DATA)->segno) || \
40 ((seg) == CURSEG_I(sbi, CURSEG_WARM_DATA)->segno) || \
41 ((seg) == CURSEG_I(sbi, CURSEG_COLD_DATA)->segno) || \
42 ((seg) == CURSEG_I(sbi, CURSEG_HOT_NODE)->segno) || \
43 ((seg) == CURSEG_I(sbi, CURSEG_WARM_NODE)->segno) || \
44 ((seg) == CURSEG_I(sbi, CURSEG_COLD_NODE)->segno) || \
45 ((seg) == CURSEG_I(sbi, CURSEG_COLD_DATA_PINNED)->segno) || \
46 ((seg) == CURSEG_I(sbi, CURSEG_ALL_DATA_ATGC)->segno))
48 #define IS_CURSEC(sbi, secno) \
49 (((secno) == CURSEG_I(sbi, CURSEG_HOT_DATA)->segno / \
50 (sbi)->segs_per_sec) || \
51 ((secno) == CURSEG_I(sbi, CURSEG_WARM_DATA)->segno / \
52 (sbi)->segs_per_sec) || \
53 ((secno) == CURSEG_I(sbi, CURSEG_COLD_DATA)->segno / \
54 (sbi)->segs_per_sec) || \
55 ((secno) == CURSEG_I(sbi, CURSEG_HOT_NODE)->segno / \
56 (sbi)->segs_per_sec) || \
57 ((secno) == CURSEG_I(sbi, CURSEG_WARM_NODE)->segno / \
58 (sbi)->segs_per_sec) || \
59 ((secno) == CURSEG_I(sbi, CURSEG_COLD_NODE)->segno / \
60 (sbi)->segs_per_sec) || \
61 ((secno) == CURSEG_I(sbi, CURSEG_COLD_DATA_PINNED)->segno / \
62 (sbi)->segs_per_sec) || \
63 ((secno) == CURSEG_I(sbi, CURSEG_ALL_DATA_ATGC)->segno / \
66 #define MAIN_BLKADDR(sbi) \
67 (SM_I(sbi) ? SM_I(sbi)->main_blkaddr : \
68 le32_to_cpu(F2FS_RAW_SUPER(sbi)->main_blkaddr))
69 #define SEG0_BLKADDR(sbi) \
70 (SM_I(sbi) ? SM_I(sbi)->seg0_blkaddr : \
71 le32_to_cpu(F2FS_RAW_SUPER(sbi)->segment0_blkaddr))
73 #define MAIN_SEGS(sbi) (SM_I(sbi)->main_segments)
74 #define MAIN_SECS(sbi) ((sbi)->total_sections)
76 #define TOTAL_SEGS(sbi) \
77 (SM_I(sbi) ? SM_I(sbi)->segment_count : \
78 le32_to_cpu(F2FS_RAW_SUPER(sbi)->segment_count))
79 #define TOTAL_BLKS(sbi) (TOTAL_SEGS(sbi) << (sbi)->log_blocks_per_seg)
81 #define MAX_BLKADDR(sbi) (SEG0_BLKADDR(sbi) + TOTAL_BLKS(sbi))
82 #define SEGMENT_SIZE(sbi) (1ULL << ((sbi)->log_blocksize + \
83 (sbi)->log_blocks_per_seg))
85 #define START_BLOCK(sbi, segno) (SEG0_BLKADDR(sbi) + \
86 (GET_R2L_SEGNO(FREE_I(sbi), segno) << (sbi)->log_blocks_per_seg))
88 #define NEXT_FREE_BLKADDR(sbi, curseg) \
89 (START_BLOCK(sbi, (curseg)->segno) + (curseg)->next_blkoff)
91 #define GET_SEGOFF_FROM_SEG0(sbi, blk_addr) ((blk_addr) - SEG0_BLKADDR(sbi))
92 #define GET_SEGNO_FROM_SEG0(sbi, blk_addr) \
93 (GET_SEGOFF_FROM_SEG0(sbi, blk_addr) >> (sbi)->log_blocks_per_seg)
94 #define GET_BLKOFF_FROM_SEG0(sbi, blk_addr) \
95 (GET_SEGOFF_FROM_SEG0(sbi, blk_addr) & ((sbi)->blocks_per_seg - 1))
97 #define GET_SEGNO(sbi, blk_addr) \
98 ((!__is_valid_data_blkaddr(blk_addr)) ? \
99 NULL_SEGNO : GET_L2R_SEGNO(FREE_I(sbi), \
100 GET_SEGNO_FROM_SEG0(sbi, blk_addr)))
101 #define BLKS_PER_SEC(sbi) \
102 ((sbi)->segs_per_sec * (sbi)->blocks_per_seg)
103 #define GET_SEC_FROM_SEG(sbi, segno) \
104 ((segno) / (sbi)->segs_per_sec)
105 #define GET_SEG_FROM_SEC(sbi, secno) \
106 ((secno) * (sbi)->segs_per_sec)
107 #define GET_ZONE_FROM_SEC(sbi, secno) \
108 ((secno) / (sbi)->secs_per_zone)
109 #define GET_ZONE_FROM_SEG(sbi, segno) \
110 GET_ZONE_FROM_SEC(sbi, GET_SEC_FROM_SEG(sbi, segno))
112 #define GET_SUM_BLOCK(sbi, segno) \
113 ((sbi)->sm_info->ssa_blkaddr + (segno))
115 #define GET_SUM_TYPE(footer) ((footer)->entry_type)
116 #define SET_SUM_TYPE(footer, type) ((footer)->entry_type = (type))
118 #define SIT_ENTRY_OFFSET(sit_i, segno) \
119 ((segno) % (sit_i)->sents_per_block)
120 #define SIT_BLOCK_OFFSET(segno) \
121 ((segno) / SIT_ENTRY_PER_BLOCK)
122 #define START_SEGNO(segno) \
123 (SIT_BLOCK_OFFSET(segno) * SIT_ENTRY_PER_BLOCK)
124 #define SIT_BLK_CNT(sbi) \
125 DIV_ROUND_UP(MAIN_SEGS(sbi), SIT_ENTRY_PER_BLOCK)
126 #define f2fs_bitmap_size(nr) \
127 (BITS_TO_LONGS(nr) * sizeof(unsigned long))
129 #define SECTOR_FROM_BLOCK(blk_addr) \
130 (((sector_t)blk_addr) << F2FS_LOG_SECTORS_PER_BLOCK)
131 #define SECTOR_TO_BLOCK(sectors) \
132 ((sectors) >> F2FS_LOG_SECTORS_PER_BLOCK)
135 * indicate a block allocation direction: RIGHT and LEFT.
136 * RIGHT means allocating new sections towards the end of volume.
137 * LEFT means the opposite direction.
145 * In the victim_sel_policy->alloc_mode, there are two block allocation modes.
146 * LFS writes data sequentially with cleaning operations.
147 * SSR (Slack Space Recycle) reuses obsolete space without cleaning operations.
148 * AT_SSR (Age Threshold based Slack Space Recycle) merges fragments into
149 * fragmented segment which has similar aging degree.
158 * In the victim_sel_policy->gc_mode, there are two gc, aka cleaning, modes.
159 * GC_CB is based on cost-benefit algorithm.
160 * GC_GREEDY is based on greedy algorithm.
161 * GC_AT is based on age-threshold algorithm.
173 * BG_GC means the background cleaning job.
174 * FG_GC means the on-demand cleaning job.
175 * FORCE_FG_GC means on-demand cleaning job in background.
183 /* for a function parameter to select a victim segment */
184 struct victim_sel_policy
{
185 int alloc_mode
; /* LFS or SSR */
186 int gc_mode
; /* GC_CB or GC_GREEDY */
187 unsigned long *dirty_bitmap
; /* dirty segment/section bitmap */
188 unsigned int max_search
; /*
189 * maximum # of segments/sections
192 unsigned int offset
; /* last scanned bitmap offset */
193 unsigned int ofs_unit
; /* bitmap search unit */
194 unsigned int min_cost
; /* minimum cost */
195 unsigned long long oldest_age
; /* oldest age of segments having the same min cost */
196 unsigned int min_segno
; /* segment # having min. cost */
197 unsigned long long age
; /* mtime of GCed section*/
198 unsigned long long age_threshold
;/* age threshold */
202 unsigned int type
:6; /* segment type like CURSEG_XXX_TYPE */
203 unsigned int valid_blocks
:10; /* # of valid blocks */
204 unsigned int ckpt_valid_blocks
:10; /* # of valid blocks last cp */
205 unsigned int padding
:6; /* padding */
206 unsigned char *cur_valid_map
; /* validity bitmap of blocks */
207 #ifdef CONFIG_F2FS_CHECK_FS
208 unsigned char *cur_valid_map_mir
; /* mirror of current valid bitmap */
211 * # of valid blocks and the validity bitmap stored in the last
212 * checkpoint pack. This information is used by the SSR mode.
214 unsigned char *ckpt_valid_map
; /* validity bitmap of blocks last cp */
215 unsigned char *discard_map
;
216 unsigned long long mtime
; /* modification time of the segment */
220 unsigned int valid_blocks
; /* # of valid blocks in a section */
223 struct segment_allocation
{
224 void (*allocate_segment
)(struct f2fs_sb_info
*, int, bool);
227 #define MAX_SKIP_GC_COUNT 16
230 struct list_head list
;
232 block_t old_addr
; /* for revoking when fail to commit */
236 const struct segment_allocation
*s_ops
;
238 block_t sit_base_addr
; /* start block address of SIT area */
239 block_t sit_blocks
; /* # of blocks used by SIT area */
240 block_t written_valid_blocks
; /* # of valid blocks in main area */
241 char *bitmap
; /* all bitmaps pointer */
242 char *sit_bitmap
; /* SIT bitmap pointer */
243 #ifdef CONFIG_F2FS_CHECK_FS
244 char *sit_bitmap_mir
; /* SIT bitmap mirror */
246 /* bitmap of segments to be ignored by GC in case of errors */
247 unsigned long *invalid_segmap
;
249 unsigned int bitmap_size
; /* SIT bitmap size */
251 unsigned long *tmp_map
; /* bitmap for temporal use */
252 unsigned long *dirty_sentries_bitmap
; /* bitmap for dirty sentries */
253 unsigned int dirty_sentries
; /* # of dirty sentries */
254 unsigned int sents_per_block
; /* # of SIT entries per block */
255 struct rw_semaphore sentry_lock
; /* to protect SIT cache */
256 struct seg_entry
*sentries
; /* SIT segment-level cache */
257 struct sec_entry
*sec_entries
; /* SIT section-level cache */
259 /* for cost-benefit algorithm in cleaning procedure */
260 unsigned long long elapsed_time
; /* elapsed time after mount */
261 unsigned long long mounted_time
; /* mount time */
262 unsigned long long min_mtime
; /* min. modification time */
263 unsigned long long max_mtime
; /* max. modification time */
264 unsigned long long dirty_min_mtime
; /* rerange candidates in GC_AT */
265 unsigned long long dirty_max_mtime
; /* rerange candidates in GC_AT */
267 unsigned int last_victim
[MAX_GC_POLICY
]; /* last victim segment # */
270 struct free_segmap_info
{
271 unsigned int start_segno
; /* start segment number logically */
272 unsigned int free_segments
; /* # of free segments */
273 unsigned int free_sections
; /* # of free sections */
274 spinlock_t segmap_lock
; /* free segmap lock */
275 unsigned long *free_segmap
; /* free segment bitmap */
276 unsigned long *free_secmap
; /* free section bitmap */
279 /* Notice: The order of dirty type is same with CURSEG_XXX in f2fs.h */
281 DIRTY_HOT_DATA
, /* dirty segments assigned as hot data logs */
282 DIRTY_WARM_DATA
, /* dirty segments assigned as warm data logs */
283 DIRTY_COLD_DATA
, /* dirty segments assigned as cold data logs */
284 DIRTY_HOT_NODE
, /* dirty segments assigned as hot node logs */
285 DIRTY_WARM_NODE
, /* dirty segments assigned as warm node logs */
286 DIRTY_COLD_NODE
, /* dirty segments assigned as cold node logs */
287 DIRTY
, /* to count # of dirty segments */
288 PRE
, /* to count # of entirely obsolete segments */
292 struct dirty_seglist_info
{
293 const struct victim_selection
*v_ops
; /* victim selction operation */
294 unsigned long *dirty_segmap
[NR_DIRTY_TYPE
];
295 unsigned long *dirty_secmap
;
296 struct mutex seglist_lock
; /* lock for segment bitmaps */
297 int nr_dirty
[NR_DIRTY_TYPE
]; /* # of dirty segments */
298 unsigned long *victim_secmap
; /* background GC victims */
301 /* victim selection function for cleaning and SSR */
302 struct victim_selection
{
303 int (*get_victim
)(struct f2fs_sb_info
*, unsigned int *,
304 int, int, char, unsigned long long);
307 /* for active log information */
309 struct mutex curseg_mutex
; /* lock for consistency */
310 struct f2fs_summary_block
*sum_blk
; /* cached summary block */
311 struct rw_semaphore journal_rwsem
; /* protect journal area */
312 struct f2fs_journal
*journal
; /* cached journal info */
313 unsigned char alloc_type
; /* current allocation type */
314 unsigned short seg_type
; /* segment type like CURSEG_XXX_TYPE */
315 unsigned int segno
; /* current segment number */
316 unsigned short next_blkoff
; /* next block offset to write */
317 unsigned int zone
; /* current zone number */
318 unsigned int next_segno
; /* preallocated segment */
319 bool inited
; /* indicate inmem log is inited */
322 struct sit_entry_set
{
323 struct list_head set_list
; /* link with all sit sets */
324 unsigned int start_segno
; /* start segno of sits in set */
325 unsigned int entry_cnt
; /* the # of sit entries in set */
331 static inline struct curseg_info
*CURSEG_I(struct f2fs_sb_info
*sbi
, int type
)
333 return (struct curseg_info
*)(SM_I(sbi
)->curseg_array
+ type
);
336 static inline struct seg_entry
*get_seg_entry(struct f2fs_sb_info
*sbi
,
339 struct sit_info
*sit_i
= SIT_I(sbi
);
340 return &sit_i
->sentries
[segno
];
343 static inline struct sec_entry
*get_sec_entry(struct f2fs_sb_info
*sbi
,
346 struct sit_info
*sit_i
= SIT_I(sbi
);
347 return &sit_i
->sec_entries
[GET_SEC_FROM_SEG(sbi
, segno
)];
350 static inline unsigned int get_valid_blocks(struct f2fs_sb_info
*sbi
,
351 unsigned int segno
, bool use_section
)
354 * In order to get # of valid blocks in a section instantly from many
355 * segments, f2fs manages two counting structures separately.
357 if (use_section
&& __is_large_section(sbi
))
358 return get_sec_entry(sbi
, segno
)->valid_blocks
;
360 return get_seg_entry(sbi
, segno
)->valid_blocks
;
363 static inline unsigned int get_ckpt_valid_blocks(struct f2fs_sb_info
*sbi
,
366 return get_seg_entry(sbi
, segno
)->ckpt_valid_blocks
;
369 static inline void seg_info_from_raw_sit(struct seg_entry
*se
,
370 struct f2fs_sit_entry
*rs
)
372 se
->valid_blocks
= GET_SIT_VBLOCKS(rs
);
373 se
->ckpt_valid_blocks
= GET_SIT_VBLOCKS(rs
);
374 memcpy(se
->cur_valid_map
, rs
->valid_map
, SIT_VBLOCK_MAP_SIZE
);
375 memcpy(se
->ckpt_valid_map
, rs
->valid_map
, SIT_VBLOCK_MAP_SIZE
);
376 #ifdef CONFIG_F2FS_CHECK_FS
377 memcpy(se
->cur_valid_map_mir
, rs
->valid_map
, SIT_VBLOCK_MAP_SIZE
);
379 se
->type
= GET_SIT_TYPE(rs
);
380 se
->mtime
= le64_to_cpu(rs
->mtime
);
383 static inline void __seg_info_to_raw_sit(struct seg_entry
*se
,
384 struct f2fs_sit_entry
*rs
)
386 unsigned short raw_vblocks
= (se
->type
<< SIT_VBLOCKS_SHIFT
) |
388 rs
->vblocks
= cpu_to_le16(raw_vblocks
);
389 memcpy(rs
->valid_map
, se
->cur_valid_map
, SIT_VBLOCK_MAP_SIZE
);
390 rs
->mtime
= cpu_to_le64(se
->mtime
);
393 static inline void seg_info_to_sit_page(struct f2fs_sb_info
*sbi
,
394 struct page
*page
, unsigned int start
)
396 struct f2fs_sit_block
*raw_sit
;
397 struct seg_entry
*se
;
398 struct f2fs_sit_entry
*rs
;
399 unsigned int end
= min(start
+ SIT_ENTRY_PER_BLOCK
,
400 (unsigned long)MAIN_SEGS(sbi
));
403 raw_sit
= (struct f2fs_sit_block
*)page_address(page
);
404 memset(raw_sit
, 0, PAGE_SIZE
);
405 for (i
= 0; i
< end
- start
; i
++) {
406 rs
= &raw_sit
->entries
[i
];
407 se
= get_seg_entry(sbi
, start
+ i
);
408 __seg_info_to_raw_sit(se
, rs
);
412 static inline void seg_info_to_raw_sit(struct seg_entry
*se
,
413 struct f2fs_sit_entry
*rs
)
415 __seg_info_to_raw_sit(se
, rs
);
417 memcpy(se
->ckpt_valid_map
, rs
->valid_map
, SIT_VBLOCK_MAP_SIZE
);
418 se
->ckpt_valid_blocks
= se
->valid_blocks
;
421 static inline unsigned int find_next_inuse(struct free_segmap_info
*free_i
,
422 unsigned int max
, unsigned int segno
)
425 spin_lock(&free_i
->segmap_lock
);
426 ret
= find_next_bit(free_i
->free_segmap
, max
, segno
);
427 spin_unlock(&free_i
->segmap_lock
);
431 static inline void __set_free(struct f2fs_sb_info
*sbi
, unsigned int segno
)
433 struct free_segmap_info
*free_i
= FREE_I(sbi
);
434 unsigned int secno
= GET_SEC_FROM_SEG(sbi
, segno
);
435 unsigned int start_segno
= GET_SEG_FROM_SEC(sbi
, secno
);
437 unsigned int usable_segs
= f2fs_usable_segs_in_sec(sbi
, segno
);
439 spin_lock(&free_i
->segmap_lock
);
440 clear_bit(segno
, free_i
->free_segmap
);
441 free_i
->free_segments
++;
443 next
= find_next_bit(free_i
->free_segmap
,
444 start_segno
+ sbi
->segs_per_sec
, start_segno
);
445 if (next
>= start_segno
+ usable_segs
) {
446 clear_bit(secno
, free_i
->free_secmap
);
447 free_i
->free_sections
++;
449 spin_unlock(&free_i
->segmap_lock
);
452 static inline void __set_inuse(struct f2fs_sb_info
*sbi
,
455 struct free_segmap_info
*free_i
= FREE_I(sbi
);
456 unsigned int secno
= GET_SEC_FROM_SEG(sbi
, segno
);
458 set_bit(segno
, free_i
->free_segmap
);
459 free_i
->free_segments
--;
460 if (!test_and_set_bit(secno
, free_i
->free_secmap
))
461 free_i
->free_sections
--;
464 static inline void __set_test_and_free(struct f2fs_sb_info
*sbi
,
465 unsigned int segno
, bool inmem
)
467 struct free_segmap_info
*free_i
= FREE_I(sbi
);
468 unsigned int secno
= GET_SEC_FROM_SEG(sbi
, segno
);
469 unsigned int start_segno
= GET_SEG_FROM_SEC(sbi
, secno
);
471 unsigned int usable_segs
= f2fs_usable_segs_in_sec(sbi
, segno
);
473 spin_lock(&free_i
->segmap_lock
);
474 if (test_and_clear_bit(segno
, free_i
->free_segmap
)) {
475 free_i
->free_segments
++;
477 if (!inmem
&& IS_CURSEC(sbi
, secno
))
479 next
= find_next_bit(free_i
->free_segmap
,
480 start_segno
+ sbi
->segs_per_sec
, start_segno
);
481 if (next
>= start_segno
+ usable_segs
) {
482 if (test_and_clear_bit(secno
, free_i
->free_secmap
))
483 free_i
->free_sections
++;
487 spin_unlock(&free_i
->segmap_lock
);
490 static inline void __set_test_and_inuse(struct f2fs_sb_info
*sbi
,
493 struct free_segmap_info
*free_i
= FREE_I(sbi
);
494 unsigned int secno
= GET_SEC_FROM_SEG(sbi
, segno
);
496 spin_lock(&free_i
->segmap_lock
);
497 if (!test_and_set_bit(segno
, free_i
->free_segmap
)) {
498 free_i
->free_segments
--;
499 if (!test_and_set_bit(secno
, free_i
->free_secmap
))
500 free_i
->free_sections
--;
502 spin_unlock(&free_i
->segmap_lock
);
505 static inline void get_sit_bitmap(struct f2fs_sb_info
*sbi
,
508 struct sit_info
*sit_i
= SIT_I(sbi
);
510 #ifdef CONFIG_F2FS_CHECK_FS
511 if (memcmp(sit_i
->sit_bitmap
, sit_i
->sit_bitmap_mir
,
515 memcpy(dst_addr
, sit_i
->sit_bitmap
, sit_i
->bitmap_size
);
518 static inline block_t
written_block_count(struct f2fs_sb_info
*sbi
)
520 return SIT_I(sbi
)->written_valid_blocks
;
523 static inline unsigned int free_segments(struct f2fs_sb_info
*sbi
)
525 return FREE_I(sbi
)->free_segments
;
528 static inline unsigned int reserved_segments(struct f2fs_sb_info
*sbi
)
530 return SM_I(sbi
)->reserved_segments
;
533 static inline unsigned int free_sections(struct f2fs_sb_info
*sbi
)
535 return FREE_I(sbi
)->free_sections
;
538 static inline unsigned int prefree_segments(struct f2fs_sb_info
*sbi
)
540 return DIRTY_I(sbi
)->nr_dirty
[PRE
];
543 static inline unsigned int dirty_segments(struct f2fs_sb_info
*sbi
)
545 return DIRTY_I(sbi
)->nr_dirty
[DIRTY_HOT_DATA
] +
546 DIRTY_I(sbi
)->nr_dirty
[DIRTY_WARM_DATA
] +
547 DIRTY_I(sbi
)->nr_dirty
[DIRTY_COLD_DATA
] +
548 DIRTY_I(sbi
)->nr_dirty
[DIRTY_HOT_NODE
] +
549 DIRTY_I(sbi
)->nr_dirty
[DIRTY_WARM_NODE
] +
550 DIRTY_I(sbi
)->nr_dirty
[DIRTY_COLD_NODE
];
553 static inline int overprovision_segments(struct f2fs_sb_info
*sbi
)
555 return SM_I(sbi
)->ovp_segments
;
558 static inline int reserved_sections(struct f2fs_sb_info
*sbi
)
560 return GET_SEC_FROM_SEG(sbi
, reserved_segments(sbi
));
563 static inline bool has_curseg_enough_space(struct f2fs_sb_info
*sbi
)
565 unsigned int node_blocks
= get_pages(sbi
, F2FS_DIRTY_NODES
) +
566 get_pages(sbi
, F2FS_DIRTY_DENTS
);
567 unsigned int dent_blocks
= get_pages(sbi
, F2FS_DIRTY_DENTS
);
568 unsigned int segno
, left_blocks
;
571 /* check current node segment */
572 for (i
= CURSEG_HOT_NODE
; i
<= CURSEG_COLD_NODE
; i
++) {
573 segno
= CURSEG_I(sbi
, i
)->segno
;
574 left_blocks
= f2fs_usable_blks_in_seg(sbi
, segno
) -
575 get_seg_entry(sbi
, segno
)->ckpt_valid_blocks
;
577 if (node_blocks
> left_blocks
)
581 /* check current data segment */
582 segno
= CURSEG_I(sbi
, CURSEG_HOT_DATA
)->segno
;
583 left_blocks
= f2fs_usable_blks_in_seg(sbi
, segno
) -
584 get_seg_entry(sbi
, segno
)->ckpt_valid_blocks
;
585 if (dent_blocks
> left_blocks
)
590 static inline bool has_not_enough_free_secs(struct f2fs_sb_info
*sbi
,
591 int freed
, int needed
)
593 int node_secs
= get_blocktype_secs(sbi
, F2FS_DIRTY_NODES
);
594 int dent_secs
= get_blocktype_secs(sbi
, F2FS_DIRTY_DENTS
);
595 int imeta_secs
= get_blocktype_secs(sbi
, F2FS_DIRTY_IMETA
);
597 if (unlikely(is_sbi_flag_set(sbi
, SBI_POR_DOING
)))
600 if (free_sections(sbi
) + freed
== reserved_sections(sbi
) + needed
&&
601 has_curseg_enough_space(sbi
))
603 return (free_sections(sbi
) + freed
) <=
604 (node_secs
+ 2 * dent_secs
+ imeta_secs
+
605 reserved_sections(sbi
) + needed
);
608 static inline bool f2fs_is_checkpoint_ready(struct f2fs_sb_info
*sbi
)
610 if (likely(!is_sbi_flag_set(sbi
, SBI_CP_DISABLED
)))
612 if (likely(!has_not_enough_free_secs(sbi
, 0, 0)))
617 static inline bool excess_prefree_segs(struct f2fs_sb_info
*sbi
)
619 return prefree_segments(sbi
) > SM_I(sbi
)->rec_prefree_segments
;
622 static inline int utilization(struct f2fs_sb_info
*sbi
)
624 return div_u64((u64
)valid_user_blocks(sbi
) * 100,
625 sbi
->user_block_count
);
629 * Sometimes f2fs may be better to drop out-of-place update policy.
630 * And, users can control the policy through sysfs entries.
631 * There are five policies with triggering conditions as follows.
632 * F2FS_IPU_FORCE - all the time,
633 * F2FS_IPU_SSR - if SSR mode is activated,
634 * F2FS_IPU_UTIL - if FS utilization is over threashold,
635 * F2FS_IPU_SSR_UTIL - if SSR mode is activated and FS utilization is over
637 * F2FS_IPU_FSYNC - activated in fsync path only for high performance flash
638 * storages. IPU will be triggered only if the # of dirty
639 * pages over min_fsync_blocks. (=default option)
640 * F2FS_IPU_ASYNC - do IPU given by asynchronous write requests.
641 * F2FS_IPU_NOCACHE - disable IPU bio cache.
642 * F2FS_IPUT_DISABLE - disable IPU. (=default option in LFS mode)
644 #define DEF_MIN_IPU_UTIL 70
645 #define DEF_MIN_FSYNC_BLOCKS 8
646 #define DEF_MIN_HOT_BLOCKS 16
648 #define SMALL_VOLUME_SEGMENTS (16 * 512) /* 16GB */
660 static inline unsigned int curseg_segno(struct f2fs_sb_info
*sbi
,
663 struct curseg_info
*curseg
= CURSEG_I(sbi
, type
);
664 return curseg
->segno
;
667 static inline unsigned char curseg_alloc_type(struct f2fs_sb_info
*sbi
,
670 struct curseg_info
*curseg
= CURSEG_I(sbi
, type
);
671 return curseg
->alloc_type
;
674 static inline unsigned short curseg_blkoff(struct f2fs_sb_info
*sbi
, int type
)
676 struct curseg_info
*curseg
= CURSEG_I(sbi
, type
);
677 return curseg
->next_blkoff
;
680 static inline void check_seg_range(struct f2fs_sb_info
*sbi
, unsigned int segno
)
682 f2fs_bug_on(sbi
, segno
> TOTAL_SEGS(sbi
) - 1);
685 static inline void verify_fio_blkaddr(struct f2fs_io_info
*fio
)
687 struct f2fs_sb_info
*sbi
= fio
->sbi
;
689 if (__is_valid_data_blkaddr(fio
->old_blkaddr
))
690 verify_blkaddr(sbi
, fio
->old_blkaddr
, __is_meta_io(fio
) ?
691 META_GENERIC
: DATA_GENERIC
);
692 verify_blkaddr(sbi
, fio
->new_blkaddr
, __is_meta_io(fio
) ?
693 META_GENERIC
: DATA_GENERIC_ENHANCE
);
697 * Summary block is always treated as an invalid block
699 static inline int check_block_count(struct f2fs_sb_info
*sbi
,
700 int segno
, struct f2fs_sit_entry
*raw_sit
)
702 bool is_valid
= test_bit_le(0, raw_sit
->valid_map
) ? true : false;
703 int valid_blocks
= 0;
704 int cur_pos
= 0, next_pos
;
705 unsigned int usable_blks_per_seg
= f2fs_usable_blks_in_seg(sbi
, segno
);
707 /* check bitmap with valid block count */
710 next_pos
= find_next_zero_bit_le(&raw_sit
->valid_map
,
713 valid_blocks
+= next_pos
- cur_pos
;
715 next_pos
= find_next_bit_le(&raw_sit
->valid_map
,
719 is_valid
= !is_valid
;
720 } while (cur_pos
< usable_blks_per_seg
);
722 if (unlikely(GET_SIT_VBLOCKS(raw_sit
) != valid_blocks
)) {
723 f2fs_err(sbi
, "Mismatch valid blocks %d vs. %d",
724 GET_SIT_VBLOCKS(raw_sit
), valid_blocks
);
725 set_sbi_flag(sbi
, SBI_NEED_FSCK
);
726 return -EFSCORRUPTED
;
729 if (usable_blks_per_seg
< sbi
->blocks_per_seg
)
730 f2fs_bug_on(sbi
, find_next_bit_le(&raw_sit
->valid_map
,
732 usable_blks_per_seg
) != sbi
->blocks_per_seg
);
734 /* check segment usage, and check boundary of a given segment number */
735 if (unlikely(GET_SIT_VBLOCKS(raw_sit
) > usable_blks_per_seg
736 || segno
> TOTAL_SEGS(sbi
) - 1)) {
737 f2fs_err(sbi
, "Wrong valid blocks %d or segno %u",
738 GET_SIT_VBLOCKS(raw_sit
), segno
);
739 set_sbi_flag(sbi
, SBI_NEED_FSCK
);
740 return -EFSCORRUPTED
;
745 static inline pgoff_t
current_sit_addr(struct f2fs_sb_info
*sbi
,
748 struct sit_info
*sit_i
= SIT_I(sbi
);
749 unsigned int offset
= SIT_BLOCK_OFFSET(start
);
750 block_t blk_addr
= sit_i
->sit_base_addr
+ offset
;
752 check_seg_range(sbi
, start
);
754 #ifdef CONFIG_F2FS_CHECK_FS
755 if (f2fs_test_bit(offset
, sit_i
->sit_bitmap
) !=
756 f2fs_test_bit(offset
, sit_i
->sit_bitmap_mir
))
760 /* calculate sit block address */
761 if (f2fs_test_bit(offset
, sit_i
->sit_bitmap
))
762 blk_addr
+= sit_i
->sit_blocks
;
767 static inline pgoff_t
next_sit_addr(struct f2fs_sb_info
*sbi
,
770 struct sit_info
*sit_i
= SIT_I(sbi
);
771 block_addr
-= sit_i
->sit_base_addr
;
772 if (block_addr
< sit_i
->sit_blocks
)
773 block_addr
+= sit_i
->sit_blocks
;
775 block_addr
-= sit_i
->sit_blocks
;
777 return block_addr
+ sit_i
->sit_base_addr
;
780 static inline void set_to_next_sit(struct sit_info
*sit_i
, unsigned int start
)
782 unsigned int block_off
= SIT_BLOCK_OFFSET(start
);
784 f2fs_change_bit(block_off
, sit_i
->sit_bitmap
);
785 #ifdef CONFIG_F2FS_CHECK_FS
786 f2fs_change_bit(block_off
, sit_i
->sit_bitmap_mir
);
790 static inline unsigned long long get_mtime(struct f2fs_sb_info
*sbi
,
793 struct sit_info
*sit_i
= SIT_I(sbi
);
794 time64_t diff
, now
= ktime_get_boottime_seconds();
796 if (now
>= sit_i
->mounted_time
)
797 return sit_i
->elapsed_time
+ now
- sit_i
->mounted_time
;
799 /* system time is set to the past */
801 diff
= sit_i
->mounted_time
- now
;
802 if (sit_i
->elapsed_time
>= diff
)
803 return sit_i
->elapsed_time
- diff
;
806 return sit_i
->elapsed_time
;
809 static inline void set_summary(struct f2fs_summary
*sum
, nid_t nid
,
810 unsigned int ofs_in_node
, unsigned char version
)
812 sum
->nid
= cpu_to_le32(nid
);
813 sum
->ofs_in_node
= cpu_to_le16(ofs_in_node
);
814 sum
->version
= version
;
817 static inline block_t
start_sum_block(struct f2fs_sb_info
*sbi
)
819 return __start_cp_addr(sbi
) +
820 le32_to_cpu(F2FS_CKPT(sbi
)->cp_pack_start_sum
);
823 static inline block_t
sum_blk_addr(struct f2fs_sb_info
*sbi
, int base
, int type
)
825 return __start_cp_addr(sbi
) +
826 le32_to_cpu(F2FS_CKPT(sbi
)->cp_pack_total_block_count
)
830 static inline bool sec_usage_check(struct f2fs_sb_info
*sbi
, unsigned int secno
)
832 if (IS_CURSEC(sbi
, secno
) || (sbi
->cur_victim_sec
== secno
))
838 * It is very important to gather dirty pages and write at once, so that we can
839 * submit a big bio without interfering other data writes.
840 * By default, 512 pages for directory data,
841 * 512 pages (2MB) * 8 for nodes, and
842 * 256 pages * 8 for meta are set.
844 static inline int nr_pages_to_skip(struct f2fs_sb_info
*sbi
, int type
)
846 if (sbi
->sb
->s_bdi
->wb
.dirty_exceeded
)
850 return sbi
->blocks_per_seg
;
851 else if (type
== NODE
)
852 return 8 * sbi
->blocks_per_seg
;
853 else if (type
== META
)
854 return 8 * BIO_MAX_PAGES
;
860 * When writing pages, it'd better align nr_to_write for segment size.
862 static inline long nr_pages_to_write(struct f2fs_sb_info
*sbi
, int type
,
863 struct writeback_control
*wbc
)
865 long nr_to_write
, desired
;
867 if (wbc
->sync_mode
!= WB_SYNC_NONE
)
870 nr_to_write
= wbc
->nr_to_write
;
871 desired
= BIO_MAX_PAGES
;
875 wbc
->nr_to_write
= desired
;
876 return desired
- nr_to_write
;
879 static inline void wake_up_discard_thread(struct f2fs_sb_info
*sbi
, bool force
)
881 struct discard_cmd_control
*dcc
= SM_I(sbi
)->dcc_info
;
888 mutex_lock(&dcc
->cmd_lock
);
889 for (i
= MAX_PLIST_NUM
- 1; i
>= 0; i
--) {
890 if (i
+ 1 < dcc
->discard_granularity
)
892 if (!list_empty(&dcc
->pend_list
[i
])) {
897 mutex_unlock(&dcc
->cmd_lock
);
898 if (!wakeup
|| !is_idle(sbi
, DISCARD_TIME
))
901 dcc
->discard_wake
= 1;
902 wake_up_interruptible_all(&dcc
->discard_wait_queue
);