1 /* 2 * fs/f2fs/gc.c 3 * 4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 5 * http://www.samsung.com/ 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 */ 11 #include <linux/fs.h> 12 #include <linux/module.h> 13 #include <linux/backing-dev.h> 14 #include <linux/init.h> 15 #include <linux/f2fs_fs.h> 16 #include <linux/kthread.h> 17 #include <linux/delay.h> 18 #include <linux/freezer.h> 19 #include <linux/blkdev.h> 20 21 #include "f2fs.h" 22 #include "node.h" 23 #include "segment.h" 24 #include "gc.h" 25 #include <trace/events/f2fs.h> 26 27 static struct kmem_cache *winode_slab; 28 29 static int gc_thread_func(void *data) 30 { 31 struct f2fs_sb_info *sbi = data; 32 struct f2fs_gc_kthread *gc_th = sbi->gc_thread; 33 wait_queue_head_t *wq = &sbi->gc_thread->gc_wait_queue_head; 34 long wait_ms; 35 36 wait_ms = gc_th->min_sleep_time; 37 38 do { 39 if (try_to_freeze()) 40 continue; 41 else 42 wait_event_interruptible_timeout(*wq, 43 kthread_should_stop(), 44 msecs_to_jiffies(wait_ms)); 45 if (kthread_should_stop()) 46 break; 47 48 if (sbi->sb->s_writers.frozen >= SB_FREEZE_WRITE) { 49 wait_ms = increase_sleep_time(gc_th, wait_ms); 50 continue; 51 } 52 53 /* 54 * [GC triggering condition] 55 * 0. GC is not conducted currently. 56 * 1. There are enough dirty segments. 57 * 2. IO subsystem is idle by checking the # of writeback pages. 58 * 3. IO subsystem is idle by checking the # of requests in 59 * bdev's request list. 60 * 61 * Note) We have to avoid triggering GCs frequently. 62 * Because it is possible that some segments can be 63 * invalidated soon after by user update or deletion. 64 * So, I'd like to wait some time to collect dirty segments. 65 */ 66 if (!mutex_trylock(&sbi->gc_mutex)) 67 continue; 68 69 if (!is_idle(sbi)) { 70 wait_ms = increase_sleep_time(gc_th, wait_ms); 71 mutex_unlock(&sbi->gc_mutex); 72 continue; 73 } 74 75 if (has_enough_invalid_blocks(sbi)) 76 wait_ms = decrease_sleep_time(gc_th, wait_ms); 77 else 78 wait_ms = increase_sleep_time(gc_th, wait_ms); 79 80 stat_inc_bggc_count(sbi); 81 82 /* if return value is not zero, no victim was selected */ 83 if (f2fs_gc(sbi)) 84 wait_ms = gc_th->no_gc_sleep_time; 85 86 /* balancing f2fs's metadata periodically */ 87 f2fs_balance_fs_bg(sbi); 88 89 } while (!kthread_should_stop()); 90 return 0; 91 } 92 93 int start_gc_thread(struct f2fs_sb_info *sbi) 94 { 95 struct f2fs_gc_kthread *gc_th; 96 dev_t dev = sbi->sb->s_bdev->bd_dev; 97 int err = 0; 98 99 gc_th = kmalloc(sizeof(struct f2fs_gc_kthread), GFP_KERNEL); 100 if (!gc_th) { 101 err = -ENOMEM; 102 goto out; 103 } 104 105 gc_th->min_sleep_time = DEF_GC_THREAD_MIN_SLEEP_TIME; 106 gc_th->max_sleep_time = DEF_GC_THREAD_MAX_SLEEP_TIME; 107 gc_th->no_gc_sleep_time = DEF_GC_THREAD_NOGC_SLEEP_TIME; 108 109 gc_th->gc_idle = 0; 110 111 sbi->gc_thread = gc_th; 112 init_waitqueue_head(&sbi->gc_thread->gc_wait_queue_head); 113 sbi->gc_thread->f2fs_gc_task = kthread_run(gc_thread_func, sbi, 114 "f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev)); 115 if (IS_ERR(gc_th->f2fs_gc_task)) { 116 err = PTR_ERR(gc_th->f2fs_gc_task); 117 kfree(gc_th); 118 sbi->gc_thread = NULL; 119 } 120 out: 121 return err; 122 } 123 124 void stop_gc_thread(struct f2fs_sb_info *sbi) 125 { 126 struct f2fs_gc_kthread *gc_th = sbi->gc_thread; 127 if (!gc_th) 128 return; 129 kthread_stop(gc_th->f2fs_gc_task); 130 kfree(gc_th); 131 sbi->gc_thread = NULL; 132 } 133 134 static int select_gc_type(struct f2fs_gc_kthread *gc_th, int gc_type) 135 { 136 int gc_mode = (gc_type == BG_GC) ? GC_CB : GC_GREEDY; 137 138 if (gc_th && gc_th->gc_idle) { 139 if (gc_th->gc_idle == 1) 140 gc_mode = GC_CB; 141 else if (gc_th->gc_idle == 2) 142 gc_mode = GC_GREEDY; 143 } 144 return gc_mode; 145 } 146 147 static void select_policy(struct f2fs_sb_info *sbi, int gc_type, 148 int type, struct victim_sel_policy *p) 149 { 150 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 151 152 if (p->alloc_mode == SSR) { 153 p->gc_mode = GC_GREEDY; 154 p->dirty_segmap = dirty_i->dirty_segmap[type]; 155 p->max_search = dirty_i->nr_dirty[type]; 156 p->ofs_unit = 1; 157 } else { 158 p->gc_mode = select_gc_type(sbi->gc_thread, gc_type); 159 p->dirty_segmap = dirty_i->dirty_segmap[DIRTY]; 160 p->max_search = dirty_i->nr_dirty[DIRTY]; 161 p->ofs_unit = sbi->segs_per_sec; 162 } 163 164 if (p->max_search > sbi->max_victim_search) 165 p->max_search = sbi->max_victim_search; 166 167 p->offset = sbi->last_victim[p->gc_mode]; 168 } 169 170 static unsigned int get_max_cost(struct f2fs_sb_info *sbi, 171 struct victim_sel_policy *p) 172 { 173 /* SSR allocates in a segment unit */ 174 if (p->alloc_mode == SSR) 175 return 1 << sbi->log_blocks_per_seg; 176 if (p->gc_mode == GC_GREEDY) 177 return (1 << sbi->log_blocks_per_seg) * p->ofs_unit; 178 else if (p->gc_mode == GC_CB) 179 return UINT_MAX; 180 else /* No other gc_mode */ 181 return 0; 182 } 183 184 static unsigned int check_bg_victims(struct f2fs_sb_info *sbi) 185 { 186 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 187 unsigned int secno; 188 189 /* 190 * If the gc_type is FG_GC, we can select victim segments 191 * selected by background GC before. 192 * Those segments guarantee they have small valid blocks. 193 */ 194 for_each_set_bit(secno, dirty_i->victim_secmap, MAIN_SECS(sbi)) { 195 if (sec_usage_check(sbi, secno)) 196 continue; 197 clear_bit(secno, dirty_i->victim_secmap); 198 return secno * sbi->segs_per_sec; 199 } 200 return NULL_SEGNO; 201 } 202 203 static unsigned int get_cb_cost(struct f2fs_sb_info *sbi, unsigned int segno) 204 { 205 struct sit_info *sit_i = SIT_I(sbi); 206 unsigned int secno = GET_SECNO(sbi, segno); 207 unsigned int start = secno * sbi->segs_per_sec; 208 unsigned long long mtime = 0; 209 unsigned int vblocks; 210 unsigned char age = 0; 211 unsigned char u; 212 unsigned int i; 213 214 for (i = 0; i < sbi->segs_per_sec; i++) 215 mtime += get_seg_entry(sbi, start + i)->mtime; 216 vblocks = get_valid_blocks(sbi, segno, sbi->segs_per_sec); 217 218 mtime = div_u64(mtime, sbi->segs_per_sec); 219 vblocks = div_u64(vblocks, sbi->segs_per_sec); 220 221 u = (vblocks * 100) >> sbi->log_blocks_per_seg; 222 223 /* Handle if the system time has changed by the user */ 224 if (mtime < sit_i->min_mtime) 225 sit_i->min_mtime = mtime; 226 if (mtime > sit_i->max_mtime) 227 sit_i->max_mtime = mtime; 228 if (sit_i->max_mtime != sit_i->min_mtime) 229 age = 100 - div64_u64(100 * (mtime - sit_i->min_mtime), 230 sit_i->max_mtime - sit_i->min_mtime); 231 232 return UINT_MAX - ((100 * (100 - u) * age) / (100 + u)); 233 } 234 235 static inline unsigned int get_gc_cost(struct f2fs_sb_info *sbi, 236 unsigned int segno, struct victim_sel_policy *p) 237 { 238 if (p->alloc_mode == SSR) 239 return get_seg_entry(sbi, segno)->ckpt_valid_blocks; 240 241 /* alloc_mode == LFS */ 242 if (p->gc_mode == GC_GREEDY) 243 return get_valid_blocks(sbi, segno, sbi->segs_per_sec); 244 else 245 return get_cb_cost(sbi, segno); 246 } 247 248 /* 249 * This function is called from two paths. 250 * One is garbage collection and the other is SSR segment selection. 251 * When it is called during GC, it just gets a victim segment 252 * and it does not remove it from dirty seglist. 253 * When it is called from SSR segment selection, it finds a segment 254 * which has minimum valid blocks and removes it from dirty seglist. 255 */ 256 static int get_victim_by_default(struct f2fs_sb_info *sbi, 257 unsigned int *result, int gc_type, int type, char alloc_mode) 258 { 259 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 260 struct victim_sel_policy p; 261 unsigned int secno, max_cost; 262 int nsearched = 0; 263 264 mutex_lock(&dirty_i->seglist_lock); 265 266 p.alloc_mode = alloc_mode; 267 select_policy(sbi, gc_type, type, &p); 268 269 p.min_segno = NULL_SEGNO; 270 p.min_cost = max_cost = get_max_cost(sbi, &p); 271 272 if (p.alloc_mode == LFS && gc_type == FG_GC) { 273 p.min_segno = check_bg_victims(sbi); 274 if (p.min_segno != NULL_SEGNO) 275 goto got_it; 276 } 277 278 while (1) { 279 unsigned long cost; 280 unsigned int segno; 281 282 segno = find_next_bit(p.dirty_segmap, MAIN_SEGS(sbi), p.offset); 283 if (segno >= MAIN_SEGS(sbi)) { 284 if (sbi->last_victim[p.gc_mode]) { 285 sbi->last_victim[p.gc_mode] = 0; 286 p.offset = 0; 287 continue; 288 } 289 break; 290 } 291 292 p.offset = segno + p.ofs_unit; 293 if (p.ofs_unit > 1) 294 p.offset -= segno % p.ofs_unit; 295 296 secno = GET_SECNO(sbi, segno); 297 298 if (sec_usage_check(sbi, secno)) 299 continue; 300 if (gc_type == BG_GC && test_bit(secno, dirty_i->victim_secmap)) 301 continue; 302 303 cost = get_gc_cost(sbi, segno, &p); 304 305 if (p.min_cost > cost) { 306 p.min_segno = segno; 307 p.min_cost = cost; 308 } else if (unlikely(cost == max_cost)) { 309 continue; 310 } 311 312 if (nsearched++ >= p.max_search) { 313 sbi->last_victim[p.gc_mode] = segno; 314 break; 315 } 316 } 317 if (p.min_segno != NULL_SEGNO) { 318 got_it: 319 if (p.alloc_mode == LFS) { 320 secno = GET_SECNO(sbi, p.min_segno); 321 if (gc_type == FG_GC) 322 sbi->cur_victim_sec = secno; 323 else 324 set_bit(secno, dirty_i->victim_secmap); 325 } 326 *result = (p.min_segno / p.ofs_unit) * p.ofs_unit; 327 328 trace_f2fs_get_victim(sbi->sb, type, gc_type, &p, 329 sbi->cur_victim_sec, 330 prefree_segments(sbi), free_segments(sbi)); 331 } 332 mutex_unlock(&dirty_i->seglist_lock); 333 334 return (p.min_segno == NULL_SEGNO) ? 0 : 1; 335 } 336 337 static const struct victim_selection default_v_ops = { 338 .get_victim = get_victim_by_default, 339 }; 340 341 static struct inode *find_gc_inode(struct gc_inode_list *gc_list, nid_t ino) 342 { 343 struct inode_entry *ie; 344 345 ie = radix_tree_lookup(&gc_list->iroot, ino); 346 if (ie) 347 return ie->inode; 348 return NULL; 349 } 350 351 static void add_gc_inode(struct gc_inode_list *gc_list, struct inode *inode) 352 { 353 struct inode_entry *new_ie; 354 355 if (inode == find_gc_inode(gc_list, inode->i_ino)) { 356 iput(inode); 357 return; 358 } 359 retry: 360 new_ie = f2fs_kmem_cache_alloc(winode_slab, GFP_NOFS); 361 new_ie->inode = inode; 362 363 if (radix_tree_insert(&gc_list->iroot, inode->i_ino, new_ie)) { 364 kmem_cache_free(winode_slab, new_ie); 365 goto retry; 366 } 367 list_add_tail(&new_ie->list, &gc_list->ilist); 368 } 369 370 static void put_gc_inode(struct gc_inode_list *gc_list) 371 { 372 struct inode_entry *ie, *next_ie; 373 list_for_each_entry_safe(ie, next_ie, &gc_list->ilist, list) { 374 radix_tree_delete(&gc_list->iroot, ie->inode->i_ino); 375 iput(ie->inode); 376 list_del(&ie->list); 377 kmem_cache_free(winode_slab, ie); 378 } 379 } 380 381 static int check_valid_map(struct f2fs_sb_info *sbi, 382 unsigned int segno, int offset) 383 { 384 struct sit_info *sit_i = SIT_I(sbi); 385 struct seg_entry *sentry; 386 int ret; 387 388 mutex_lock(&sit_i->sentry_lock); 389 sentry = get_seg_entry(sbi, segno); 390 ret = f2fs_test_bit(offset, sentry->cur_valid_map); 391 mutex_unlock(&sit_i->sentry_lock); 392 return ret; 393 } 394 395 /* 396 * This function compares node address got in summary with that in NAT. 397 * On validity, copy that node with cold status, otherwise (invalid node) 398 * ignore that. 399 */ 400 static void gc_node_segment(struct f2fs_sb_info *sbi, 401 struct f2fs_summary *sum, unsigned int segno, int gc_type) 402 { 403 bool initial = true; 404 struct f2fs_summary *entry; 405 int off; 406 407 next_step: 408 entry = sum; 409 410 for (off = 0; off < sbi->blocks_per_seg; off++, entry++) { 411 nid_t nid = le32_to_cpu(entry->nid); 412 struct page *node_page; 413 414 /* stop BG_GC if there is not enough free sections. */ 415 if (gc_type == BG_GC && has_not_enough_free_secs(sbi, 0)) 416 return; 417 418 if (check_valid_map(sbi, segno, off) == 0) 419 continue; 420 421 if (initial) { 422 ra_node_page(sbi, nid); 423 continue; 424 } 425 node_page = get_node_page(sbi, nid); 426 if (IS_ERR(node_page)) 427 continue; 428 429 /* block may become invalid during get_node_page */ 430 if (check_valid_map(sbi, segno, off) == 0) { 431 f2fs_put_page(node_page, 1); 432 continue; 433 } 434 435 /* set page dirty and write it */ 436 if (gc_type == FG_GC) { 437 f2fs_wait_on_page_writeback(node_page, NODE); 438 set_page_dirty(node_page); 439 } else { 440 if (!PageWriteback(node_page)) 441 set_page_dirty(node_page); 442 } 443 f2fs_put_page(node_page, 1); 444 stat_inc_node_blk_count(sbi, 1); 445 } 446 447 if (initial) { 448 initial = false; 449 goto next_step; 450 } 451 452 if (gc_type == FG_GC) { 453 struct writeback_control wbc = { 454 .sync_mode = WB_SYNC_ALL, 455 .nr_to_write = LONG_MAX, 456 .for_reclaim = 0, 457 }; 458 sync_node_pages(sbi, 0, &wbc); 459 460 /* 461 * In the case of FG_GC, it'd be better to reclaim this victim 462 * completely. 463 */ 464 if (get_valid_blocks(sbi, segno, 1) != 0) 465 goto next_step; 466 } 467 } 468 469 /* 470 * Calculate start block index indicating the given node offset. 471 * Be careful, caller should give this node offset only indicating direct node 472 * blocks. If any node offsets, which point the other types of node blocks such 473 * as indirect or double indirect node blocks, are given, it must be a caller's 474 * bug. 475 */ 476 block_t start_bidx_of_node(unsigned int node_ofs, struct f2fs_inode_info *fi) 477 { 478 unsigned int indirect_blks = 2 * NIDS_PER_BLOCK + 4; 479 unsigned int bidx; 480 481 if (node_ofs == 0) 482 return 0; 483 484 if (node_ofs <= 2) { 485 bidx = node_ofs - 1; 486 } else if (node_ofs <= indirect_blks) { 487 int dec = (node_ofs - 4) / (NIDS_PER_BLOCK + 1); 488 bidx = node_ofs - 2 - dec; 489 } else { 490 int dec = (node_ofs - indirect_blks - 3) / (NIDS_PER_BLOCK + 1); 491 bidx = node_ofs - 5 - dec; 492 } 493 return bidx * ADDRS_PER_BLOCK + ADDRS_PER_INODE(fi); 494 } 495 496 static int check_dnode(struct f2fs_sb_info *sbi, struct f2fs_summary *sum, 497 struct node_info *dni, block_t blkaddr, unsigned int *nofs) 498 { 499 struct page *node_page; 500 nid_t nid; 501 unsigned int ofs_in_node; 502 block_t source_blkaddr; 503 504 nid = le32_to_cpu(sum->nid); 505 ofs_in_node = le16_to_cpu(sum->ofs_in_node); 506 507 node_page = get_node_page(sbi, nid); 508 if (IS_ERR(node_page)) 509 return 0; 510 511 get_node_info(sbi, nid, dni); 512 513 if (sum->version != dni->version) { 514 f2fs_put_page(node_page, 1); 515 return 0; 516 } 517 518 *nofs = ofs_of_node(node_page); 519 source_blkaddr = datablock_addr(node_page, ofs_in_node); 520 f2fs_put_page(node_page, 1); 521 522 if (source_blkaddr != blkaddr) 523 return 0; 524 return 1; 525 } 526 527 static void move_data_page(struct inode *inode, struct page *page, int gc_type) 528 { 529 struct f2fs_io_info fio = { 530 .type = DATA, 531 .rw = WRITE_SYNC, 532 }; 533 534 if (gc_type == BG_GC) { 535 if (PageWriteback(page)) 536 goto out; 537 set_page_dirty(page); 538 set_cold_data(page); 539 } else { 540 f2fs_wait_on_page_writeback(page, DATA); 541 542 if (clear_page_dirty_for_io(page)) 543 inode_dec_dirty_pages(inode); 544 set_cold_data(page); 545 do_write_data_page(page, &fio); 546 clear_cold_data(page); 547 } 548 out: 549 f2fs_put_page(page, 1); 550 } 551 552 /* 553 * This function tries to get parent node of victim data block, and identifies 554 * data block validity. If the block is valid, copy that with cold status and 555 * modify parent node. 556 * If the parent node is not valid or the data block address is different, 557 * the victim data block is ignored. 558 */ 559 static void gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum, 560 struct gc_inode_list *gc_list, unsigned int segno, int gc_type) 561 { 562 struct super_block *sb = sbi->sb; 563 struct f2fs_summary *entry; 564 block_t start_addr; 565 int off; 566 int phase = 0; 567 568 start_addr = START_BLOCK(sbi, segno); 569 570 next_step: 571 entry = sum; 572 573 for (off = 0; off < sbi->blocks_per_seg; off++, entry++) { 574 struct page *data_page; 575 struct inode *inode; 576 struct node_info dni; /* dnode info for the data */ 577 unsigned int ofs_in_node, nofs; 578 block_t start_bidx; 579 580 /* stop BG_GC if there is not enough free sections. */ 581 if (gc_type == BG_GC && has_not_enough_free_secs(sbi, 0)) 582 return; 583 584 if (check_valid_map(sbi, segno, off) == 0) 585 continue; 586 587 if (phase == 0) { 588 ra_node_page(sbi, le32_to_cpu(entry->nid)); 589 continue; 590 } 591 592 /* Get an inode by ino with checking validity */ 593 if (check_dnode(sbi, entry, &dni, start_addr + off, &nofs) == 0) 594 continue; 595 596 if (phase == 1) { 597 ra_node_page(sbi, dni.ino); 598 continue; 599 } 600 601 ofs_in_node = le16_to_cpu(entry->ofs_in_node); 602 603 if (phase == 2) { 604 inode = f2fs_iget(sb, dni.ino); 605 if (IS_ERR(inode) || is_bad_inode(inode)) 606 continue; 607 608 start_bidx = start_bidx_of_node(nofs, F2FS_I(inode)); 609 610 data_page = find_data_page(inode, 611 start_bidx + ofs_in_node, false); 612 if (IS_ERR(data_page)) { 613 iput(inode); 614 continue; 615 } 616 617 f2fs_put_page(data_page, 0); 618 add_gc_inode(gc_list, inode); 619 continue; 620 } 621 622 /* phase 3 */ 623 inode = find_gc_inode(gc_list, dni.ino); 624 if (inode) { 625 start_bidx = start_bidx_of_node(nofs, F2FS_I(inode)); 626 data_page = get_lock_data_page(inode, 627 start_bidx + ofs_in_node); 628 if (IS_ERR(data_page)) 629 continue; 630 move_data_page(inode, data_page, gc_type); 631 stat_inc_data_blk_count(sbi, 1); 632 } 633 } 634 635 if (++phase < 4) 636 goto next_step; 637 638 if (gc_type == FG_GC) { 639 f2fs_submit_merged_bio(sbi, DATA, WRITE); 640 641 /* 642 * In the case of FG_GC, it'd be better to reclaim this victim 643 * completely. 644 */ 645 if (get_valid_blocks(sbi, segno, 1) != 0) { 646 phase = 2; 647 goto next_step; 648 } 649 } 650 } 651 652 static int __get_victim(struct f2fs_sb_info *sbi, unsigned int *victim, 653 int gc_type) 654 { 655 struct sit_info *sit_i = SIT_I(sbi); 656 int ret; 657 658 mutex_lock(&sit_i->sentry_lock); 659 ret = DIRTY_I(sbi)->v_ops->get_victim(sbi, victim, gc_type, 660 NO_CHECK_TYPE, LFS); 661 mutex_unlock(&sit_i->sentry_lock); 662 return ret; 663 } 664 665 static void do_garbage_collect(struct f2fs_sb_info *sbi, unsigned int segno, 666 struct gc_inode_list *gc_list, int gc_type) 667 { 668 struct page *sum_page; 669 struct f2fs_summary_block *sum; 670 struct blk_plug plug; 671 672 /* read segment summary of victim */ 673 sum_page = get_sum_page(sbi, segno); 674 675 blk_start_plug(&plug); 676 677 sum = page_address(sum_page); 678 679 switch (GET_SUM_TYPE((&sum->footer))) { 680 case SUM_TYPE_NODE: 681 gc_node_segment(sbi, sum->entries, segno, gc_type); 682 break; 683 case SUM_TYPE_DATA: 684 gc_data_segment(sbi, sum->entries, gc_list, segno, gc_type); 685 break; 686 } 687 blk_finish_plug(&plug); 688 689 stat_inc_seg_count(sbi, GET_SUM_TYPE((&sum->footer))); 690 stat_inc_call_count(sbi->stat_info); 691 692 f2fs_put_page(sum_page, 1); 693 } 694 695 int f2fs_gc(struct f2fs_sb_info *sbi) 696 { 697 unsigned int segno, i; 698 int gc_type = BG_GC; 699 int nfree = 0; 700 int ret = -1; 701 struct cp_control cpc; 702 struct gc_inode_list gc_list = { 703 .ilist = LIST_HEAD_INIT(gc_list.ilist), 704 .iroot = RADIX_TREE_INIT(GFP_NOFS), 705 }; 706 707 cpc.reason = test_opt(sbi, FASTBOOT) ? CP_UMOUNT : CP_SYNC; 708 709 gc_more: 710 if (unlikely(!(sbi->sb->s_flags & MS_ACTIVE))) 711 goto stop; 712 if (unlikely(f2fs_cp_error(sbi))) 713 goto stop; 714 715 if (gc_type == BG_GC && has_not_enough_free_secs(sbi, nfree)) { 716 gc_type = FG_GC; 717 write_checkpoint(sbi, &cpc); 718 } 719 720 if (!__get_victim(sbi, &segno, gc_type)) 721 goto stop; 722 ret = 0; 723 724 /* readahead multi ssa blocks those have contiguous address */ 725 if (sbi->segs_per_sec > 1) 726 ra_meta_pages(sbi, GET_SUM_BLOCK(sbi, segno), sbi->segs_per_sec, 727 META_SSA); 728 729 for (i = 0; i < sbi->segs_per_sec; i++) 730 do_garbage_collect(sbi, segno + i, &gc_list, gc_type); 731 732 if (gc_type == FG_GC) { 733 sbi->cur_victim_sec = NULL_SEGNO; 734 nfree++; 735 WARN_ON(get_valid_blocks(sbi, segno, sbi->segs_per_sec)); 736 } 737 738 if (has_not_enough_free_secs(sbi, nfree)) 739 goto gc_more; 740 741 if (gc_type == FG_GC) 742 write_checkpoint(sbi, &cpc); 743 stop: 744 mutex_unlock(&sbi->gc_mutex); 745 746 put_gc_inode(&gc_list); 747 return ret; 748 } 749 750 void build_gc_manager(struct f2fs_sb_info *sbi) 751 { 752 DIRTY_I(sbi)->v_ops = &default_v_ops; 753 } 754 755 int __init create_gc_caches(void) 756 { 757 winode_slab = f2fs_kmem_cache_create("f2fs_gc_inodes", 758 sizeof(struct inode_entry)); 759 if (!winode_slab) 760 return -ENOMEM; 761 return 0; 762 } 763 764 void destroy_gc_caches(void) 765 { 766 kmem_cache_destroy(winode_slab); 767 } 768