1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * fs/f2fs/segment.h 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 */ 8 #include <linux/blkdev.h> 9 #include <linux/backing-dev.h> 10 11 /* constant macro */ 12 #define NULL_SEGNO ((unsigned int)(~0)) 13 #define NULL_SECNO ((unsigned int)(~0)) 14 15 #define DEF_RECLAIM_PREFREE_SEGMENTS 5 /* 5% over total segments */ 16 #define DEF_MAX_RECLAIM_PREFREE_SEGMENTS 4096 /* 8GB in maximum */ 17 18 #define F2FS_MIN_SEGMENTS 9 /* SB + 2 (CP + SIT + NAT) + SSA + MAIN */ 19 20 /* L: Logical segment # in volume, R: Relative segment # in main area */ 21 #define GET_L2R_SEGNO(free_i, segno) ((segno) - (free_i)->start_segno) 22 #define GET_R2L_SEGNO(free_i, segno) ((segno) + (free_i)->start_segno) 23 24 #define IS_DATASEG(t) ((t) <= CURSEG_COLD_DATA) 25 #define IS_NODESEG(t) ((t) >= CURSEG_HOT_NODE) 26 27 #define IS_HOT(t) ((t) == CURSEG_HOT_NODE || (t) == CURSEG_HOT_DATA) 28 #define IS_WARM(t) ((t) == CURSEG_WARM_NODE || (t) == CURSEG_WARM_DATA) 29 #define IS_COLD(t) ((t) == CURSEG_COLD_NODE || (t) == CURSEG_COLD_DATA) 30 31 #define IS_CURSEG(sbi, seg) \ 32 (((seg) == CURSEG_I(sbi, CURSEG_HOT_DATA)->segno) || \ 33 ((seg) == CURSEG_I(sbi, CURSEG_WARM_DATA)->segno) || \ 34 ((seg) == CURSEG_I(sbi, CURSEG_COLD_DATA)->segno) || \ 35 ((seg) == CURSEG_I(sbi, CURSEG_HOT_NODE)->segno) || \ 36 ((seg) == CURSEG_I(sbi, CURSEG_WARM_NODE)->segno) || \ 37 ((seg) == CURSEG_I(sbi, CURSEG_COLD_NODE)->segno)) 38 39 #define IS_CURSEC(sbi, secno) \ 40 (((secno) == CURSEG_I(sbi, CURSEG_HOT_DATA)->segno / \ 41 (sbi)->segs_per_sec) || \ 42 ((secno) == CURSEG_I(sbi, CURSEG_WARM_DATA)->segno / \ 43 (sbi)->segs_per_sec) || \ 44 ((secno) == CURSEG_I(sbi, CURSEG_COLD_DATA)->segno / \ 45 (sbi)->segs_per_sec) || \ 46 ((secno) == CURSEG_I(sbi, CURSEG_HOT_NODE)->segno / \ 47 (sbi)->segs_per_sec) || \ 48 ((secno) == CURSEG_I(sbi, CURSEG_WARM_NODE)->segno / \ 49 (sbi)->segs_per_sec) || \ 50 ((secno) == CURSEG_I(sbi, CURSEG_COLD_NODE)->segno / \ 51 (sbi)->segs_per_sec)) \ 52 53 #define MAIN_BLKADDR(sbi) \ 54 (SM_I(sbi) ? SM_I(sbi)->main_blkaddr : \ 55 le32_to_cpu(F2FS_RAW_SUPER(sbi)->main_blkaddr)) 56 #define SEG0_BLKADDR(sbi) \ 57 (SM_I(sbi) ? SM_I(sbi)->seg0_blkaddr : \ 58 le32_to_cpu(F2FS_RAW_SUPER(sbi)->segment0_blkaddr)) 59 60 #define MAIN_SEGS(sbi) (SM_I(sbi)->main_segments) 61 #define MAIN_SECS(sbi) ((sbi)->total_sections) 62 63 #define TOTAL_SEGS(sbi) \ 64 (SM_I(sbi) ? SM_I(sbi)->segment_count : \ 65 le32_to_cpu(F2FS_RAW_SUPER(sbi)->segment_count)) 66 #define TOTAL_BLKS(sbi) (TOTAL_SEGS(sbi) << (sbi)->log_blocks_per_seg) 67 68 #define MAX_BLKADDR(sbi) (SEG0_BLKADDR(sbi) + TOTAL_BLKS(sbi)) 69 #define SEGMENT_SIZE(sbi) (1ULL << ((sbi)->log_blocksize + \ 70 (sbi)->log_blocks_per_seg)) 71 72 #define START_BLOCK(sbi, segno) (SEG0_BLKADDR(sbi) + \ 73 (GET_R2L_SEGNO(FREE_I(sbi), segno) << (sbi)->log_blocks_per_seg)) 74 75 #define NEXT_FREE_BLKADDR(sbi, curseg) \ 76 (START_BLOCK(sbi, (curseg)->segno) + (curseg)->next_blkoff) 77 78 #define GET_SEGOFF_FROM_SEG0(sbi, blk_addr) ((blk_addr) - SEG0_BLKADDR(sbi)) 79 #define GET_SEGNO_FROM_SEG0(sbi, blk_addr) \ 80 (GET_SEGOFF_FROM_SEG0(sbi, blk_addr) >> (sbi)->log_blocks_per_seg) 81 #define GET_BLKOFF_FROM_SEG0(sbi, blk_addr) \ 82 (GET_SEGOFF_FROM_SEG0(sbi, blk_addr) & ((sbi)->blocks_per_seg - 1)) 83 84 #define GET_SEGNO(sbi, blk_addr) \ 85 ((!__is_valid_data_blkaddr(blk_addr)) ? \ 86 NULL_SEGNO : GET_L2R_SEGNO(FREE_I(sbi), \ 87 GET_SEGNO_FROM_SEG0(sbi, blk_addr))) 88 #define BLKS_PER_SEC(sbi) \ 89 ((sbi)->segs_per_sec * (sbi)->blocks_per_seg) 90 #define GET_SEC_FROM_SEG(sbi, segno) \ 91 ((segno) / (sbi)->segs_per_sec) 92 #define GET_SEG_FROM_SEC(sbi, secno) \ 93 ((secno) * (sbi)->segs_per_sec) 94 #define GET_ZONE_FROM_SEC(sbi, secno) \ 95 ((secno) / (sbi)->secs_per_zone) 96 #define GET_ZONE_FROM_SEG(sbi, segno) \ 97 GET_ZONE_FROM_SEC(sbi, GET_SEC_FROM_SEG(sbi, segno)) 98 99 #define GET_SUM_BLOCK(sbi, segno) \ 100 ((sbi)->sm_info->ssa_blkaddr + (segno)) 101 102 #define GET_SUM_TYPE(footer) ((footer)->entry_type) 103 #define SET_SUM_TYPE(footer, type) ((footer)->entry_type = (type)) 104 105 #define SIT_ENTRY_OFFSET(sit_i, segno) \ 106 ((segno) % (sit_i)->sents_per_block) 107 #define SIT_BLOCK_OFFSET(segno) \ 108 ((segno) / SIT_ENTRY_PER_BLOCK) 109 #define START_SEGNO(segno) \ 110 (SIT_BLOCK_OFFSET(segno) * SIT_ENTRY_PER_BLOCK) 111 #define SIT_BLK_CNT(sbi) \ 112 DIV_ROUND_UP(MAIN_SEGS(sbi), SIT_ENTRY_PER_BLOCK) 113 #define f2fs_bitmap_size(nr) \ 114 (BITS_TO_LONGS(nr) * sizeof(unsigned long)) 115 116 #define SECTOR_FROM_BLOCK(blk_addr) \ 117 (((sector_t)blk_addr) << F2FS_LOG_SECTORS_PER_BLOCK) 118 #define SECTOR_TO_BLOCK(sectors) \ 119 ((sectors) >> F2FS_LOG_SECTORS_PER_BLOCK) 120 121 /* 122 * indicate a block allocation direction: RIGHT and LEFT. 123 * RIGHT means allocating new sections towards the end of volume. 124 * LEFT means the opposite direction. 125 */ 126 enum { 127 ALLOC_RIGHT = 0, 128 ALLOC_LEFT 129 }; 130 131 /* 132 * In the victim_sel_policy->alloc_mode, there are two block allocation modes. 133 * LFS writes data sequentially with cleaning operations. 134 * SSR (Slack Space Recycle) reuses obsolete space without cleaning operations. 135 */ 136 enum { 137 LFS = 0, 138 SSR 139 }; 140 141 /* 142 * In the victim_sel_policy->gc_mode, there are two gc, aka cleaning, modes. 143 * GC_CB is based on cost-benefit algorithm. 144 * GC_GREEDY is based on greedy algorithm. 145 */ 146 enum { 147 GC_CB = 0, 148 GC_GREEDY, 149 ALLOC_NEXT, 150 FLUSH_DEVICE, 151 MAX_GC_POLICY, 152 }; 153 154 /* 155 * BG_GC means the background cleaning job. 156 * FG_GC means the on-demand cleaning job. 157 * FORCE_FG_GC means on-demand cleaning job in background. 158 */ 159 enum { 160 BG_GC = 0, 161 FG_GC, 162 FORCE_FG_GC, 163 }; 164 165 /* for a function parameter to select a victim segment */ 166 struct victim_sel_policy { 167 int alloc_mode; /* LFS or SSR */ 168 int gc_mode; /* GC_CB or GC_GREEDY */ 169 unsigned long *dirty_segmap; /* dirty segment bitmap */ 170 unsigned int max_search; /* maximum # of segments to search */ 171 unsigned int offset; /* last scanned bitmap offset */ 172 unsigned int ofs_unit; /* bitmap search unit */ 173 unsigned int min_cost; /* minimum cost */ 174 unsigned int min_segno; /* segment # having min. cost */ 175 }; 176 177 struct seg_entry { 178 unsigned int type:6; /* segment type like CURSEG_XXX_TYPE */ 179 unsigned int valid_blocks:10; /* # of valid blocks */ 180 unsigned int ckpt_valid_blocks:10; /* # of valid blocks last cp */ 181 unsigned int padding:6; /* padding */ 182 unsigned char *cur_valid_map; /* validity bitmap of blocks */ 183 #ifdef CONFIG_F2FS_CHECK_FS 184 unsigned char *cur_valid_map_mir; /* mirror of current valid bitmap */ 185 #endif 186 /* 187 * # of valid blocks and the validity bitmap stored in the the last 188 * checkpoint pack. This information is used by the SSR mode. 189 */ 190 unsigned char *ckpt_valid_map; /* validity bitmap of blocks last cp */ 191 unsigned char *discard_map; 192 unsigned long long mtime; /* modification time of the segment */ 193 }; 194 195 struct sec_entry { 196 unsigned int valid_blocks; /* # of valid blocks in a section */ 197 }; 198 199 struct segment_allocation { 200 void (*allocate_segment)(struct f2fs_sb_info *, int, bool); 201 }; 202 203 /* 204 * this value is set in page as a private data which indicate that 205 * the page is atomically written, and it is in inmem_pages list. 206 */ 207 #define ATOMIC_WRITTEN_PAGE ((unsigned long)-1) 208 #define DUMMY_WRITTEN_PAGE ((unsigned long)-2) 209 210 #define IS_ATOMIC_WRITTEN_PAGE(page) \ 211 (page_private(page) == (unsigned long)ATOMIC_WRITTEN_PAGE) 212 #define IS_DUMMY_WRITTEN_PAGE(page) \ 213 (page_private(page) == (unsigned long)DUMMY_WRITTEN_PAGE) 214 215 #define MAX_SKIP_GC_COUNT 16 216 217 struct inmem_pages { 218 struct list_head list; 219 struct page *page; 220 block_t old_addr; /* for revoking when fail to commit */ 221 }; 222 223 struct sit_info { 224 const struct segment_allocation *s_ops; 225 226 block_t sit_base_addr; /* start block address of SIT area */ 227 block_t sit_blocks; /* # of blocks used by SIT area */ 228 block_t written_valid_blocks; /* # of valid blocks in main area */ 229 char *sit_bitmap; /* SIT bitmap pointer */ 230 #ifdef CONFIG_F2FS_CHECK_FS 231 char *sit_bitmap_mir; /* SIT bitmap mirror */ 232 #endif 233 unsigned int bitmap_size; /* SIT bitmap size */ 234 235 unsigned long *tmp_map; /* bitmap for temporal use */ 236 unsigned long *dirty_sentries_bitmap; /* bitmap for dirty sentries */ 237 unsigned int dirty_sentries; /* # of dirty sentries */ 238 unsigned int sents_per_block; /* # of SIT entries per block */ 239 struct rw_semaphore sentry_lock; /* to protect SIT cache */ 240 struct seg_entry *sentries; /* SIT segment-level cache */ 241 struct sec_entry *sec_entries; /* SIT section-level cache */ 242 243 /* for cost-benefit algorithm in cleaning procedure */ 244 unsigned long long elapsed_time; /* elapsed time after mount */ 245 unsigned long long mounted_time; /* mount time */ 246 unsigned long long min_mtime; /* min. modification time */ 247 unsigned long long max_mtime; /* max. modification time */ 248 249 unsigned int last_victim[MAX_GC_POLICY]; /* last victim segment # */ 250 }; 251 252 struct free_segmap_info { 253 unsigned int start_segno; /* start segment number logically */ 254 unsigned int free_segments; /* # of free segments */ 255 unsigned int free_sections; /* # of free sections */ 256 spinlock_t segmap_lock; /* free segmap lock */ 257 unsigned long *free_segmap; /* free segment bitmap */ 258 unsigned long *free_secmap; /* free section bitmap */ 259 }; 260 261 /* Notice: The order of dirty type is same with CURSEG_XXX in f2fs.h */ 262 enum dirty_type { 263 DIRTY_HOT_DATA, /* dirty segments assigned as hot data logs */ 264 DIRTY_WARM_DATA, /* dirty segments assigned as warm data logs */ 265 DIRTY_COLD_DATA, /* dirty segments assigned as cold data logs */ 266 DIRTY_HOT_NODE, /* dirty segments assigned as hot node logs */ 267 DIRTY_WARM_NODE, /* dirty segments assigned as warm node logs */ 268 DIRTY_COLD_NODE, /* dirty segments assigned as cold node logs */ 269 DIRTY, /* to count # of dirty segments */ 270 PRE, /* to count # of entirely obsolete segments */ 271 NR_DIRTY_TYPE 272 }; 273 274 struct dirty_seglist_info { 275 const struct victim_selection *v_ops; /* victim selction operation */ 276 unsigned long *dirty_segmap[NR_DIRTY_TYPE]; 277 struct mutex seglist_lock; /* lock for segment bitmaps */ 278 int nr_dirty[NR_DIRTY_TYPE]; /* # of dirty segments */ 279 unsigned long *victim_secmap; /* background GC victims */ 280 }; 281 282 /* victim selection function for cleaning and SSR */ 283 struct victim_selection { 284 int (*get_victim)(struct f2fs_sb_info *, unsigned int *, 285 int, int, char); 286 }; 287 288 /* for active log information */ 289 struct curseg_info { 290 struct mutex curseg_mutex; /* lock for consistency */ 291 struct f2fs_summary_block *sum_blk; /* cached summary block */ 292 struct rw_semaphore journal_rwsem; /* protect journal area */ 293 struct f2fs_journal *journal; /* cached journal info */ 294 unsigned char alloc_type; /* current allocation type */ 295 unsigned int segno; /* current segment number */ 296 unsigned short next_blkoff; /* next block offset to write */ 297 unsigned int zone; /* current zone number */ 298 unsigned int next_segno; /* preallocated segment */ 299 }; 300 301 struct sit_entry_set { 302 struct list_head set_list; /* link with all sit sets */ 303 unsigned int start_segno; /* start segno of sits in set */ 304 unsigned int entry_cnt; /* the # of sit entries in set */ 305 }; 306 307 /* 308 * inline functions 309 */ 310 static inline struct curseg_info *CURSEG_I(struct f2fs_sb_info *sbi, int type) 311 { 312 return (struct curseg_info *)(SM_I(sbi)->curseg_array + type); 313 } 314 315 static inline struct seg_entry *get_seg_entry(struct f2fs_sb_info *sbi, 316 unsigned int segno) 317 { 318 struct sit_info *sit_i = SIT_I(sbi); 319 return &sit_i->sentries[segno]; 320 } 321 322 static inline struct sec_entry *get_sec_entry(struct f2fs_sb_info *sbi, 323 unsigned int segno) 324 { 325 struct sit_info *sit_i = SIT_I(sbi); 326 return &sit_i->sec_entries[GET_SEC_FROM_SEG(sbi, segno)]; 327 } 328 329 static inline unsigned int get_valid_blocks(struct f2fs_sb_info *sbi, 330 unsigned int segno, bool use_section) 331 { 332 /* 333 * In order to get # of valid blocks in a section instantly from many 334 * segments, f2fs manages two counting structures separately. 335 */ 336 if (use_section && __is_large_section(sbi)) 337 return get_sec_entry(sbi, segno)->valid_blocks; 338 else 339 return get_seg_entry(sbi, segno)->valid_blocks; 340 } 341 342 static inline unsigned int get_ckpt_valid_blocks(struct f2fs_sb_info *sbi, 343 unsigned int segno) 344 { 345 return get_seg_entry(sbi, segno)->ckpt_valid_blocks; 346 } 347 348 static inline void seg_info_from_raw_sit(struct seg_entry *se, 349 struct f2fs_sit_entry *rs) 350 { 351 se->valid_blocks = GET_SIT_VBLOCKS(rs); 352 se->ckpt_valid_blocks = GET_SIT_VBLOCKS(rs); 353 memcpy(se->cur_valid_map, rs->valid_map, SIT_VBLOCK_MAP_SIZE); 354 memcpy(se->ckpt_valid_map, rs->valid_map, SIT_VBLOCK_MAP_SIZE); 355 #ifdef CONFIG_F2FS_CHECK_FS 356 memcpy(se->cur_valid_map_mir, rs->valid_map, SIT_VBLOCK_MAP_SIZE); 357 #endif 358 se->type = GET_SIT_TYPE(rs); 359 se->mtime = le64_to_cpu(rs->mtime); 360 } 361 362 static inline void __seg_info_to_raw_sit(struct seg_entry *se, 363 struct f2fs_sit_entry *rs) 364 { 365 unsigned short raw_vblocks = (se->type << SIT_VBLOCKS_SHIFT) | 366 se->valid_blocks; 367 rs->vblocks = cpu_to_le16(raw_vblocks); 368 memcpy(rs->valid_map, se->cur_valid_map, SIT_VBLOCK_MAP_SIZE); 369 rs->mtime = cpu_to_le64(se->mtime); 370 } 371 372 static inline void seg_info_to_sit_page(struct f2fs_sb_info *sbi, 373 struct page *page, unsigned int start) 374 { 375 struct f2fs_sit_block *raw_sit; 376 struct seg_entry *se; 377 struct f2fs_sit_entry *rs; 378 unsigned int end = min(start + SIT_ENTRY_PER_BLOCK, 379 (unsigned long)MAIN_SEGS(sbi)); 380 int i; 381 382 raw_sit = (struct f2fs_sit_block *)page_address(page); 383 memset(raw_sit, 0, PAGE_SIZE); 384 for (i = 0; i < end - start; i++) { 385 rs = &raw_sit->entries[i]; 386 se = get_seg_entry(sbi, start + i); 387 __seg_info_to_raw_sit(se, rs); 388 } 389 } 390 391 static inline void seg_info_to_raw_sit(struct seg_entry *se, 392 struct f2fs_sit_entry *rs) 393 { 394 __seg_info_to_raw_sit(se, rs); 395 396 memcpy(se->ckpt_valid_map, rs->valid_map, SIT_VBLOCK_MAP_SIZE); 397 se->ckpt_valid_blocks = se->valid_blocks; 398 } 399 400 static inline unsigned int find_next_inuse(struct free_segmap_info *free_i, 401 unsigned int max, unsigned int segno) 402 { 403 unsigned int ret; 404 spin_lock(&free_i->segmap_lock); 405 ret = find_next_bit(free_i->free_segmap, max, segno); 406 spin_unlock(&free_i->segmap_lock); 407 return ret; 408 } 409 410 static inline void __set_free(struct f2fs_sb_info *sbi, unsigned int segno) 411 { 412 struct free_segmap_info *free_i = FREE_I(sbi); 413 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno); 414 unsigned int start_segno = GET_SEG_FROM_SEC(sbi, secno); 415 unsigned int next; 416 417 spin_lock(&free_i->segmap_lock); 418 clear_bit(segno, free_i->free_segmap); 419 free_i->free_segments++; 420 421 next = find_next_bit(free_i->free_segmap, 422 start_segno + sbi->segs_per_sec, start_segno); 423 if (next >= start_segno + sbi->segs_per_sec) { 424 clear_bit(secno, free_i->free_secmap); 425 free_i->free_sections++; 426 } 427 spin_unlock(&free_i->segmap_lock); 428 } 429 430 static inline void __set_inuse(struct f2fs_sb_info *sbi, 431 unsigned int segno) 432 { 433 struct free_segmap_info *free_i = FREE_I(sbi); 434 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno); 435 436 set_bit(segno, free_i->free_segmap); 437 free_i->free_segments--; 438 if (!test_and_set_bit(secno, free_i->free_secmap)) 439 free_i->free_sections--; 440 } 441 442 static inline void __set_test_and_free(struct f2fs_sb_info *sbi, 443 unsigned int segno) 444 { 445 struct free_segmap_info *free_i = FREE_I(sbi); 446 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno); 447 unsigned int start_segno = GET_SEG_FROM_SEC(sbi, secno); 448 unsigned int next; 449 450 spin_lock(&free_i->segmap_lock); 451 if (test_and_clear_bit(segno, free_i->free_segmap)) { 452 free_i->free_segments++; 453 454 if (IS_CURSEC(sbi, secno)) 455 goto skip_free; 456 next = find_next_bit(free_i->free_segmap, 457 start_segno + sbi->segs_per_sec, start_segno); 458 if (next >= start_segno + sbi->segs_per_sec) { 459 if (test_and_clear_bit(secno, free_i->free_secmap)) 460 free_i->free_sections++; 461 } 462 } 463 skip_free: 464 spin_unlock(&free_i->segmap_lock); 465 } 466 467 static inline void __set_test_and_inuse(struct f2fs_sb_info *sbi, 468 unsigned int segno) 469 { 470 struct free_segmap_info *free_i = FREE_I(sbi); 471 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno); 472 473 spin_lock(&free_i->segmap_lock); 474 if (!test_and_set_bit(segno, free_i->free_segmap)) { 475 free_i->free_segments--; 476 if (!test_and_set_bit(secno, free_i->free_secmap)) 477 free_i->free_sections--; 478 } 479 spin_unlock(&free_i->segmap_lock); 480 } 481 482 static inline void get_sit_bitmap(struct f2fs_sb_info *sbi, 483 void *dst_addr) 484 { 485 struct sit_info *sit_i = SIT_I(sbi); 486 487 #ifdef CONFIG_F2FS_CHECK_FS 488 if (memcmp(sit_i->sit_bitmap, sit_i->sit_bitmap_mir, 489 sit_i->bitmap_size)) 490 f2fs_bug_on(sbi, 1); 491 #endif 492 memcpy(dst_addr, sit_i->sit_bitmap, sit_i->bitmap_size); 493 } 494 495 static inline block_t written_block_count(struct f2fs_sb_info *sbi) 496 { 497 return SIT_I(sbi)->written_valid_blocks; 498 } 499 500 static inline unsigned int free_segments(struct f2fs_sb_info *sbi) 501 { 502 return FREE_I(sbi)->free_segments; 503 } 504 505 static inline int reserved_segments(struct f2fs_sb_info *sbi) 506 { 507 return SM_I(sbi)->reserved_segments; 508 } 509 510 static inline unsigned int free_sections(struct f2fs_sb_info *sbi) 511 { 512 return FREE_I(sbi)->free_sections; 513 } 514 515 static inline unsigned int prefree_segments(struct f2fs_sb_info *sbi) 516 { 517 return DIRTY_I(sbi)->nr_dirty[PRE]; 518 } 519 520 static inline unsigned int dirty_segments(struct f2fs_sb_info *sbi) 521 { 522 return DIRTY_I(sbi)->nr_dirty[DIRTY_HOT_DATA] + 523 DIRTY_I(sbi)->nr_dirty[DIRTY_WARM_DATA] + 524 DIRTY_I(sbi)->nr_dirty[DIRTY_COLD_DATA] + 525 DIRTY_I(sbi)->nr_dirty[DIRTY_HOT_NODE] + 526 DIRTY_I(sbi)->nr_dirty[DIRTY_WARM_NODE] + 527 DIRTY_I(sbi)->nr_dirty[DIRTY_COLD_NODE]; 528 } 529 530 static inline int overprovision_segments(struct f2fs_sb_info *sbi) 531 { 532 return SM_I(sbi)->ovp_segments; 533 } 534 535 static inline int reserved_sections(struct f2fs_sb_info *sbi) 536 { 537 return GET_SEC_FROM_SEG(sbi, (unsigned int)reserved_segments(sbi)); 538 } 539 540 static inline bool has_curseg_enough_space(struct f2fs_sb_info *sbi) 541 { 542 unsigned int node_blocks = get_pages(sbi, F2FS_DIRTY_NODES) + 543 get_pages(sbi, F2FS_DIRTY_DENTS); 544 unsigned int dent_blocks = get_pages(sbi, F2FS_DIRTY_DENTS); 545 unsigned int segno, left_blocks; 546 int i; 547 548 /* check current node segment */ 549 for (i = CURSEG_HOT_NODE; i <= CURSEG_COLD_NODE; i++) { 550 segno = CURSEG_I(sbi, i)->segno; 551 left_blocks = sbi->blocks_per_seg - 552 get_seg_entry(sbi, segno)->ckpt_valid_blocks; 553 554 if (node_blocks > left_blocks) 555 return false; 556 } 557 558 /* check current data segment */ 559 segno = CURSEG_I(sbi, CURSEG_HOT_DATA)->segno; 560 left_blocks = sbi->blocks_per_seg - 561 get_seg_entry(sbi, segno)->ckpt_valid_blocks; 562 if (dent_blocks > left_blocks) 563 return false; 564 return true; 565 } 566 567 static inline bool has_not_enough_free_secs(struct f2fs_sb_info *sbi, 568 int freed, int needed) 569 { 570 int node_secs = get_blocktype_secs(sbi, F2FS_DIRTY_NODES); 571 int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS); 572 int imeta_secs = get_blocktype_secs(sbi, F2FS_DIRTY_IMETA); 573 574 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) 575 return false; 576 577 if (free_sections(sbi) + freed == reserved_sections(sbi) + needed && 578 has_curseg_enough_space(sbi)) 579 return false; 580 return (free_sections(sbi) + freed) <= 581 (node_secs + 2 * dent_secs + imeta_secs + 582 reserved_sections(sbi) + needed); 583 } 584 585 static inline int f2fs_is_checkpoint_ready(struct f2fs_sb_info *sbi) 586 { 587 if (likely(!is_sbi_flag_set(sbi, SBI_CP_DISABLED))) 588 return 0; 589 if (likely(!has_not_enough_free_secs(sbi, 0, 0))) 590 return 0; 591 return -ENOSPC; 592 } 593 594 static inline bool excess_prefree_segs(struct f2fs_sb_info *sbi) 595 { 596 return prefree_segments(sbi) > SM_I(sbi)->rec_prefree_segments; 597 } 598 599 static inline int utilization(struct f2fs_sb_info *sbi) 600 { 601 return div_u64((u64)valid_user_blocks(sbi) * 100, 602 sbi->user_block_count); 603 } 604 605 /* 606 * Sometimes f2fs may be better to drop out-of-place update policy. 607 * And, users can control the policy through sysfs entries. 608 * There are five policies with triggering conditions as follows. 609 * F2FS_IPU_FORCE - all the time, 610 * F2FS_IPU_SSR - if SSR mode is activated, 611 * F2FS_IPU_UTIL - if FS utilization is over threashold, 612 * F2FS_IPU_SSR_UTIL - if SSR mode is activated and FS utilization is over 613 * threashold, 614 * F2FS_IPU_FSYNC - activated in fsync path only for high performance flash 615 * storages. IPU will be triggered only if the # of dirty 616 * pages over min_fsync_blocks. 617 * F2FS_IPUT_DISABLE - disable IPU. (=default option) 618 */ 619 #define DEF_MIN_IPU_UTIL 70 620 #define DEF_MIN_FSYNC_BLOCKS 8 621 #define DEF_MIN_HOT_BLOCKS 16 622 623 #define SMALL_VOLUME_SEGMENTS (16 * 512) /* 16GB */ 624 625 enum { 626 F2FS_IPU_FORCE, 627 F2FS_IPU_SSR, 628 F2FS_IPU_UTIL, 629 F2FS_IPU_SSR_UTIL, 630 F2FS_IPU_FSYNC, 631 F2FS_IPU_ASYNC, 632 }; 633 634 static inline unsigned int curseg_segno(struct f2fs_sb_info *sbi, 635 int type) 636 { 637 struct curseg_info *curseg = CURSEG_I(sbi, type); 638 return curseg->segno; 639 } 640 641 static inline unsigned char curseg_alloc_type(struct f2fs_sb_info *sbi, 642 int type) 643 { 644 struct curseg_info *curseg = CURSEG_I(sbi, type); 645 return curseg->alloc_type; 646 } 647 648 static inline unsigned short curseg_blkoff(struct f2fs_sb_info *sbi, int type) 649 { 650 struct curseg_info *curseg = CURSEG_I(sbi, type); 651 return curseg->next_blkoff; 652 } 653 654 static inline void check_seg_range(struct f2fs_sb_info *sbi, unsigned int segno) 655 { 656 f2fs_bug_on(sbi, segno > TOTAL_SEGS(sbi) - 1); 657 } 658 659 static inline void verify_fio_blkaddr(struct f2fs_io_info *fio) 660 { 661 struct f2fs_sb_info *sbi = fio->sbi; 662 663 if (__is_valid_data_blkaddr(fio->old_blkaddr)) 664 verify_blkaddr(sbi, fio->old_blkaddr, __is_meta_io(fio) ? 665 META_GENERIC : DATA_GENERIC); 666 verify_blkaddr(sbi, fio->new_blkaddr, __is_meta_io(fio) ? 667 META_GENERIC : DATA_GENERIC_ENHANCE); 668 } 669 670 /* 671 * Summary block is always treated as an invalid block 672 */ 673 static inline int check_block_count(struct f2fs_sb_info *sbi, 674 int segno, struct f2fs_sit_entry *raw_sit) 675 { 676 bool is_valid = test_bit_le(0, raw_sit->valid_map) ? true : false; 677 int valid_blocks = 0; 678 int cur_pos = 0, next_pos; 679 680 /* check bitmap with valid block count */ 681 do { 682 if (is_valid) { 683 next_pos = find_next_zero_bit_le(&raw_sit->valid_map, 684 sbi->blocks_per_seg, 685 cur_pos); 686 valid_blocks += next_pos - cur_pos; 687 } else 688 next_pos = find_next_bit_le(&raw_sit->valid_map, 689 sbi->blocks_per_seg, 690 cur_pos); 691 cur_pos = next_pos; 692 is_valid = !is_valid; 693 } while (cur_pos < sbi->blocks_per_seg); 694 695 if (unlikely(GET_SIT_VBLOCKS(raw_sit) != valid_blocks)) { 696 f2fs_err(sbi, "Mismatch valid blocks %d vs. %d", 697 GET_SIT_VBLOCKS(raw_sit), valid_blocks); 698 set_sbi_flag(sbi, SBI_NEED_FSCK); 699 return -EFSCORRUPTED; 700 } 701 702 /* check segment usage, and check boundary of a given segment number */ 703 if (unlikely(GET_SIT_VBLOCKS(raw_sit) > sbi->blocks_per_seg 704 || segno > TOTAL_SEGS(sbi) - 1)) { 705 f2fs_err(sbi, "Wrong valid blocks %d or segno %u", 706 GET_SIT_VBLOCKS(raw_sit), segno); 707 set_sbi_flag(sbi, SBI_NEED_FSCK); 708 return -EFSCORRUPTED; 709 } 710 return 0; 711 } 712 713 static inline pgoff_t current_sit_addr(struct f2fs_sb_info *sbi, 714 unsigned int start) 715 { 716 struct sit_info *sit_i = SIT_I(sbi); 717 unsigned int offset = SIT_BLOCK_OFFSET(start); 718 block_t blk_addr = sit_i->sit_base_addr + offset; 719 720 check_seg_range(sbi, start); 721 722 #ifdef CONFIG_F2FS_CHECK_FS 723 if (f2fs_test_bit(offset, sit_i->sit_bitmap) != 724 f2fs_test_bit(offset, sit_i->sit_bitmap_mir)) 725 f2fs_bug_on(sbi, 1); 726 #endif 727 728 /* calculate sit block address */ 729 if (f2fs_test_bit(offset, sit_i->sit_bitmap)) 730 blk_addr += sit_i->sit_blocks; 731 732 return blk_addr; 733 } 734 735 static inline pgoff_t next_sit_addr(struct f2fs_sb_info *sbi, 736 pgoff_t block_addr) 737 { 738 struct sit_info *sit_i = SIT_I(sbi); 739 block_addr -= sit_i->sit_base_addr; 740 if (block_addr < sit_i->sit_blocks) 741 block_addr += sit_i->sit_blocks; 742 else 743 block_addr -= sit_i->sit_blocks; 744 745 return block_addr + sit_i->sit_base_addr; 746 } 747 748 static inline void set_to_next_sit(struct sit_info *sit_i, unsigned int start) 749 { 750 unsigned int block_off = SIT_BLOCK_OFFSET(start); 751 752 f2fs_change_bit(block_off, sit_i->sit_bitmap); 753 #ifdef CONFIG_F2FS_CHECK_FS 754 f2fs_change_bit(block_off, sit_i->sit_bitmap_mir); 755 #endif 756 } 757 758 static inline unsigned long long get_mtime(struct f2fs_sb_info *sbi, 759 bool base_time) 760 { 761 struct sit_info *sit_i = SIT_I(sbi); 762 time64_t diff, now = ktime_get_real_seconds(); 763 764 if (now >= sit_i->mounted_time) 765 return sit_i->elapsed_time + now - sit_i->mounted_time; 766 767 /* system time is set to the past */ 768 if (!base_time) { 769 diff = sit_i->mounted_time - now; 770 if (sit_i->elapsed_time >= diff) 771 return sit_i->elapsed_time - diff; 772 return 0; 773 } 774 return sit_i->elapsed_time; 775 } 776 777 static inline void set_summary(struct f2fs_summary *sum, nid_t nid, 778 unsigned int ofs_in_node, unsigned char version) 779 { 780 sum->nid = cpu_to_le32(nid); 781 sum->ofs_in_node = cpu_to_le16(ofs_in_node); 782 sum->version = version; 783 } 784 785 static inline block_t start_sum_block(struct f2fs_sb_info *sbi) 786 { 787 return __start_cp_addr(sbi) + 788 le32_to_cpu(F2FS_CKPT(sbi)->cp_pack_start_sum); 789 } 790 791 static inline block_t sum_blk_addr(struct f2fs_sb_info *sbi, int base, int type) 792 { 793 return __start_cp_addr(sbi) + 794 le32_to_cpu(F2FS_CKPT(sbi)->cp_pack_total_block_count) 795 - (base + 1) + type; 796 } 797 798 static inline bool sec_usage_check(struct f2fs_sb_info *sbi, unsigned int secno) 799 { 800 if (IS_CURSEC(sbi, secno) || (sbi->cur_victim_sec == secno)) 801 return true; 802 return false; 803 } 804 805 /* 806 * It is very important to gather dirty pages and write at once, so that we can 807 * submit a big bio without interfering other data writes. 808 * By default, 512 pages for directory data, 809 * 512 pages (2MB) * 8 for nodes, and 810 * 256 pages * 8 for meta are set. 811 */ 812 static inline int nr_pages_to_skip(struct f2fs_sb_info *sbi, int type) 813 { 814 if (sbi->sb->s_bdi->wb.dirty_exceeded) 815 return 0; 816 817 if (type == DATA) 818 return sbi->blocks_per_seg; 819 else if (type == NODE) 820 return 8 * sbi->blocks_per_seg; 821 else if (type == META) 822 return 8 * BIO_MAX_PAGES; 823 else 824 return 0; 825 } 826 827 /* 828 * When writing pages, it'd better align nr_to_write for segment size. 829 */ 830 static inline long nr_pages_to_write(struct f2fs_sb_info *sbi, int type, 831 struct writeback_control *wbc) 832 { 833 long nr_to_write, desired; 834 835 if (wbc->sync_mode != WB_SYNC_NONE) 836 return 0; 837 838 nr_to_write = wbc->nr_to_write; 839 desired = BIO_MAX_PAGES; 840 if (type == NODE) 841 desired <<= 1; 842 843 wbc->nr_to_write = desired; 844 return desired - nr_to_write; 845 } 846 847 static inline void wake_up_discard_thread(struct f2fs_sb_info *sbi, bool force) 848 { 849 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; 850 bool wakeup = false; 851 int i; 852 853 if (force) 854 goto wake_up; 855 856 mutex_lock(&dcc->cmd_lock); 857 for (i = MAX_PLIST_NUM - 1; i >= 0; i--) { 858 if (i + 1 < dcc->discard_granularity) 859 break; 860 if (!list_empty(&dcc->pend_list[i])) { 861 wakeup = true; 862 break; 863 } 864 } 865 mutex_unlock(&dcc->cmd_lock); 866 if (!wakeup || !is_idle(sbi, DISCARD_TIME)) 867 return; 868 wake_up: 869 dcc->discard_wake = 1; 870 wake_up_interruptible_all(&dcc->discard_wait_queue); 871 } 872