1 /* 2 * fs/f2fs/segment.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/f2fs_fs.h> 13 #include <linux/bio.h> 14 #include <linux/blkdev.h> 15 #include <linux/prefetch.h> 16 #include <linux/kthread.h> 17 #include <linux/vmalloc.h> 18 #include <linux/swap.h> 19 20 #include "f2fs.h" 21 #include "segment.h" 22 #include "node.h" 23 #include <trace/events/f2fs.h> 24 25 #define __reverse_ffz(x) __reverse_ffs(~(x)) 26 27 static struct kmem_cache *discard_entry_slab; 28 29 /* 30 * __reverse_ffs is copied from include/asm-generic/bitops/__ffs.h since 31 * MSB and LSB are reversed in a byte by f2fs_set_bit. 32 */ 33 static inline unsigned long __reverse_ffs(unsigned long word) 34 { 35 int num = 0; 36 37 #if BITS_PER_LONG == 64 38 if ((word & 0xffffffff) == 0) { 39 num += 32; 40 word >>= 32; 41 } 42 #endif 43 if ((word & 0xffff) == 0) { 44 num += 16; 45 word >>= 16; 46 } 47 if ((word & 0xff) == 0) { 48 num += 8; 49 word >>= 8; 50 } 51 if ((word & 0xf0) == 0) 52 num += 4; 53 else 54 word >>= 4; 55 if ((word & 0xc) == 0) 56 num += 2; 57 else 58 word >>= 2; 59 if ((word & 0x2) == 0) 60 num += 1; 61 return num; 62 } 63 64 /* 65 * __find_rev_next(_zero)_bit is copied from lib/find_next_bit.c becasue 66 * f2fs_set_bit makes MSB and LSB reversed in a byte. 67 * Example: 68 * LSB <--> MSB 69 * f2fs_set_bit(0, bitmap) => 0000 0001 70 * f2fs_set_bit(7, bitmap) => 1000 0000 71 */ 72 static unsigned long __find_rev_next_bit(const unsigned long *addr, 73 unsigned long size, unsigned long offset) 74 { 75 const unsigned long *p = addr + BIT_WORD(offset); 76 unsigned long result = offset & ~(BITS_PER_LONG - 1); 77 unsigned long tmp; 78 unsigned long mask, submask; 79 unsigned long quot, rest; 80 81 if (offset >= size) 82 return size; 83 84 size -= result; 85 offset %= BITS_PER_LONG; 86 if (!offset) 87 goto aligned; 88 89 tmp = *(p++); 90 quot = (offset >> 3) << 3; 91 rest = offset & 0x7; 92 mask = ~0UL << quot; 93 submask = (unsigned char)(0xff << rest) >> rest; 94 submask <<= quot; 95 mask &= submask; 96 tmp &= mask; 97 if (size < BITS_PER_LONG) 98 goto found_first; 99 if (tmp) 100 goto found_middle; 101 102 size -= BITS_PER_LONG; 103 result += BITS_PER_LONG; 104 aligned: 105 while (size & ~(BITS_PER_LONG-1)) { 106 tmp = *(p++); 107 if (tmp) 108 goto found_middle; 109 result += BITS_PER_LONG; 110 size -= BITS_PER_LONG; 111 } 112 if (!size) 113 return result; 114 tmp = *p; 115 found_first: 116 tmp &= (~0UL >> (BITS_PER_LONG - size)); 117 if (tmp == 0UL) /* Are any bits set? */ 118 return result + size; /* Nope. */ 119 found_middle: 120 return result + __reverse_ffs(tmp); 121 } 122 123 static unsigned long __find_rev_next_zero_bit(const unsigned long *addr, 124 unsigned long size, unsigned long offset) 125 { 126 const unsigned long *p = addr + BIT_WORD(offset); 127 unsigned long result = offset & ~(BITS_PER_LONG - 1); 128 unsigned long tmp; 129 unsigned long mask, submask; 130 unsigned long quot, rest; 131 132 if (offset >= size) 133 return size; 134 135 size -= result; 136 offset %= BITS_PER_LONG; 137 if (!offset) 138 goto aligned; 139 140 tmp = *(p++); 141 quot = (offset >> 3) << 3; 142 rest = offset & 0x7; 143 mask = ~(~0UL << quot); 144 submask = (unsigned char)~((unsigned char)(0xff << rest) >> rest); 145 submask <<= quot; 146 mask += submask; 147 tmp |= mask; 148 if (size < BITS_PER_LONG) 149 goto found_first; 150 if (~tmp) 151 goto found_middle; 152 153 size -= BITS_PER_LONG; 154 result += BITS_PER_LONG; 155 aligned: 156 while (size & ~(BITS_PER_LONG - 1)) { 157 tmp = *(p++); 158 if (~tmp) 159 goto found_middle; 160 result += BITS_PER_LONG; 161 size -= BITS_PER_LONG; 162 } 163 if (!size) 164 return result; 165 tmp = *p; 166 167 found_first: 168 tmp |= ~0UL << size; 169 if (tmp == ~0UL) /* Are any bits zero? */ 170 return result + size; /* Nope. */ 171 found_middle: 172 return result + __reverse_ffz(tmp); 173 } 174 175 /* 176 * This function balances dirty node and dentry pages. 177 * In addition, it controls garbage collection. 178 */ 179 void f2fs_balance_fs(struct f2fs_sb_info *sbi) 180 { 181 /* 182 * We should do GC or end up with checkpoint, if there are so many dirty 183 * dir/node pages without enough free segments. 184 */ 185 if (has_not_enough_free_secs(sbi, 0)) { 186 mutex_lock(&sbi->gc_mutex); 187 f2fs_gc(sbi); 188 } 189 } 190 191 void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi) 192 { 193 /* check the # of cached NAT entries and prefree segments */ 194 if (try_to_free_nats(sbi, NAT_ENTRY_PER_BLOCK) || 195 excess_prefree_segs(sbi)) 196 f2fs_sync_fs(sbi->sb, true); 197 } 198 199 static int issue_flush_thread(void *data) 200 { 201 struct f2fs_sb_info *sbi = data; 202 struct flush_cmd_control *fcc = SM_I(sbi)->cmd_control_info; 203 wait_queue_head_t *q = &fcc->flush_wait_queue; 204 repeat: 205 if (kthread_should_stop()) 206 return 0; 207 208 spin_lock(&fcc->issue_lock); 209 if (fcc->issue_list) { 210 fcc->dispatch_list = fcc->issue_list; 211 fcc->issue_list = fcc->issue_tail = NULL; 212 } 213 spin_unlock(&fcc->issue_lock); 214 215 if (fcc->dispatch_list) { 216 struct bio *bio = bio_alloc(GFP_NOIO, 0); 217 struct flush_cmd *cmd, *next; 218 int ret; 219 220 bio->bi_bdev = sbi->sb->s_bdev; 221 ret = submit_bio_wait(WRITE_FLUSH, bio); 222 223 for (cmd = fcc->dispatch_list; cmd; cmd = next) { 224 cmd->ret = ret; 225 next = cmd->next; 226 complete(&cmd->wait); 227 } 228 bio_put(bio); 229 fcc->dispatch_list = NULL; 230 } 231 232 wait_event_interruptible(*q, 233 kthread_should_stop() || fcc->issue_list); 234 goto repeat; 235 } 236 237 int f2fs_issue_flush(struct f2fs_sb_info *sbi) 238 { 239 struct flush_cmd_control *fcc = SM_I(sbi)->cmd_control_info; 240 struct flush_cmd cmd; 241 242 if (!test_opt(sbi, FLUSH_MERGE)) 243 return blkdev_issue_flush(sbi->sb->s_bdev, GFP_KERNEL, NULL); 244 245 init_completion(&cmd.wait); 246 cmd.next = NULL; 247 248 spin_lock(&fcc->issue_lock); 249 if (fcc->issue_list) 250 fcc->issue_tail->next = &cmd; 251 else 252 fcc->issue_list = &cmd; 253 fcc->issue_tail = &cmd; 254 spin_unlock(&fcc->issue_lock); 255 256 if (!fcc->dispatch_list) 257 wake_up(&fcc->flush_wait_queue); 258 259 wait_for_completion(&cmd.wait); 260 261 return cmd.ret; 262 } 263 264 int create_flush_cmd_control(struct f2fs_sb_info *sbi) 265 { 266 dev_t dev = sbi->sb->s_bdev->bd_dev; 267 struct flush_cmd_control *fcc; 268 int err = 0; 269 270 fcc = kzalloc(sizeof(struct flush_cmd_control), GFP_KERNEL); 271 if (!fcc) 272 return -ENOMEM; 273 spin_lock_init(&fcc->issue_lock); 274 init_waitqueue_head(&fcc->flush_wait_queue); 275 fcc->f2fs_issue_flush = kthread_run(issue_flush_thread, sbi, 276 "f2fs_flush-%u:%u", MAJOR(dev), MINOR(dev)); 277 if (IS_ERR(fcc->f2fs_issue_flush)) { 278 err = PTR_ERR(fcc->f2fs_issue_flush); 279 kfree(fcc); 280 return err; 281 } 282 sbi->sm_info->cmd_control_info = fcc; 283 284 return err; 285 } 286 287 void destroy_flush_cmd_control(struct f2fs_sb_info *sbi) 288 { 289 struct flush_cmd_control *fcc = 290 sbi->sm_info->cmd_control_info; 291 292 if (fcc && fcc->f2fs_issue_flush) 293 kthread_stop(fcc->f2fs_issue_flush); 294 kfree(fcc); 295 sbi->sm_info->cmd_control_info = NULL; 296 } 297 298 static void __locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno, 299 enum dirty_type dirty_type) 300 { 301 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 302 303 /* need not be added */ 304 if (IS_CURSEG(sbi, segno)) 305 return; 306 307 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[dirty_type])) 308 dirty_i->nr_dirty[dirty_type]++; 309 310 if (dirty_type == DIRTY) { 311 struct seg_entry *sentry = get_seg_entry(sbi, segno); 312 enum dirty_type t = sentry->type; 313 314 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[t])) 315 dirty_i->nr_dirty[t]++; 316 } 317 } 318 319 static void __remove_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno, 320 enum dirty_type dirty_type) 321 { 322 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 323 324 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[dirty_type])) 325 dirty_i->nr_dirty[dirty_type]--; 326 327 if (dirty_type == DIRTY) { 328 struct seg_entry *sentry = get_seg_entry(sbi, segno); 329 enum dirty_type t = sentry->type; 330 331 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t])) 332 dirty_i->nr_dirty[t]--; 333 334 if (get_valid_blocks(sbi, segno, sbi->segs_per_sec) == 0) 335 clear_bit(GET_SECNO(sbi, segno), 336 dirty_i->victim_secmap); 337 } 338 } 339 340 /* 341 * Should not occur error such as -ENOMEM. 342 * Adding dirty entry into seglist is not critical operation. 343 * If a given segment is one of current working segments, it won't be added. 344 */ 345 static void locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno) 346 { 347 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 348 unsigned short valid_blocks; 349 350 if (segno == NULL_SEGNO || IS_CURSEG(sbi, segno)) 351 return; 352 353 mutex_lock(&dirty_i->seglist_lock); 354 355 valid_blocks = get_valid_blocks(sbi, segno, 0); 356 357 if (valid_blocks == 0) { 358 __locate_dirty_segment(sbi, segno, PRE); 359 __remove_dirty_segment(sbi, segno, DIRTY); 360 } else if (valid_blocks < sbi->blocks_per_seg) { 361 __locate_dirty_segment(sbi, segno, DIRTY); 362 } else { 363 /* Recovery routine with SSR needs this */ 364 __remove_dirty_segment(sbi, segno, DIRTY); 365 } 366 367 mutex_unlock(&dirty_i->seglist_lock); 368 } 369 370 static int f2fs_issue_discard(struct f2fs_sb_info *sbi, 371 block_t blkstart, block_t blklen) 372 { 373 sector_t start = SECTOR_FROM_BLOCK(sbi, blkstart); 374 sector_t len = SECTOR_FROM_BLOCK(sbi, blklen); 375 trace_f2fs_issue_discard(sbi->sb, blkstart, blklen); 376 return blkdev_issue_discard(sbi->sb->s_bdev, start, len, GFP_NOFS, 0); 377 } 378 379 void discard_next_dnode(struct f2fs_sb_info *sbi) 380 { 381 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_WARM_NODE); 382 block_t blkaddr = NEXT_FREE_BLKADDR(sbi, curseg); 383 384 if (f2fs_issue_discard(sbi, blkaddr, 1)) { 385 struct page *page = grab_meta_page(sbi, blkaddr); 386 /* zero-filled page */ 387 set_page_dirty(page); 388 f2fs_put_page(page, 1); 389 } 390 } 391 392 static void add_discard_addrs(struct f2fs_sb_info *sbi, 393 unsigned int segno, struct seg_entry *se) 394 { 395 struct list_head *head = &SM_I(sbi)->discard_list; 396 struct discard_entry *new; 397 int entries = SIT_VBLOCK_MAP_SIZE / sizeof(unsigned long); 398 int max_blocks = sbi->blocks_per_seg; 399 unsigned long *cur_map = (unsigned long *)se->cur_valid_map; 400 unsigned long *ckpt_map = (unsigned long *)se->ckpt_valid_map; 401 unsigned long dmap[entries]; 402 unsigned int start = 0, end = -1; 403 int i; 404 405 if (!test_opt(sbi, DISCARD)) 406 return; 407 408 /* zero block will be discarded through the prefree list */ 409 if (!se->valid_blocks || se->valid_blocks == max_blocks) 410 return; 411 412 /* SIT_VBLOCK_MAP_SIZE should be multiple of sizeof(unsigned long) */ 413 for (i = 0; i < entries; i++) 414 dmap[i] = (cur_map[i] ^ ckpt_map[i]) & ckpt_map[i]; 415 416 while (SM_I(sbi)->nr_discards <= SM_I(sbi)->max_discards) { 417 start = __find_rev_next_bit(dmap, max_blocks, end + 1); 418 if (start >= max_blocks) 419 break; 420 421 end = __find_rev_next_zero_bit(dmap, max_blocks, start + 1); 422 423 new = f2fs_kmem_cache_alloc(discard_entry_slab, GFP_NOFS); 424 INIT_LIST_HEAD(&new->list); 425 new->blkaddr = START_BLOCK(sbi, segno) + start; 426 new->len = end - start; 427 428 list_add_tail(&new->list, head); 429 SM_I(sbi)->nr_discards += end - start; 430 } 431 } 432 433 /* 434 * Should call clear_prefree_segments after checkpoint is done. 435 */ 436 static void set_prefree_as_free_segments(struct f2fs_sb_info *sbi) 437 { 438 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 439 unsigned int segno = -1; 440 unsigned int total_segs = TOTAL_SEGS(sbi); 441 442 mutex_lock(&dirty_i->seglist_lock); 443 while (1) { 444 segno = find_next_bit(dirty_i->dirty_segmap[PRE], total_segs, 445 segno + 1); 446 if (segno >= total_segs) 447 break; 448 __set_test_and_free(sbi, segno); 449 } 450 mutex_unlock(&dirty_i->seglist_lock); 451 } 452 453 void clear_prefree_segments(struct f2fs_sb_info *sbi) 454 { 455 struct list_head *head = &(SM_I(sbi)->discard_list); 456 struct discard_entry *entry, *this; 457 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 458 unsigned long *prefree_map = dirty_i->dirty_segmap[PRE]; 459 unsigned int total_segs = TOTAL_SEGS(sbi); 460 unsigned int start = 0, end = -1; 461 462 mutex_lock(&dirty_i->seglist_lock); 463 464 while (1) { 465 int i; 466 start = find_next_bit(prefree_map, total_segs, end + 1); 467 if (start >= total_segs) 468 break; 469 end = find_next_zero_bit(prefree_map, total_segs, start + 1); 470 471 for (i = start; i < end; i++) 472 clear_bit(i, prefree_map); 473 474 dirty_i->nr_dirty[PRE] -= end - start; 475 476 if (!test_opt(sbi, DISCARD)) 477 continue; 478 479 f2fs_issue_discard(sbi, START_BLOCK(sbi, start), 480 (end - start) << sbi->log_blocks_per_seg); 481 } 482 mutex_unlock(&dirty_i->seglist_lock); 483 484 /* send small discards */ 485 list_for_each_entry_safe(entry, this, head, list) { 486 f2fs_issue_discard(sbi, entry->blkaddr, entry->len); 487 list_del(&entry->list); 488 SM_I(sbi)->nr_discards -= entry->len; 489 kmem_cache_free(discard_entry_slab, entry); 490 } 491 } 492 493 static void __mark_sit_entry_dirty(struct f2fs_sb_info *sbi, unsigned int segno) 494 { 495 struct sit_info *sit_i = SIT_I(sbi); 496 if (!__test_and_set_bit(segno, sit_i->dirty_sentries_bitmap)) 497 sit_i->dirty_sentries++; 498 } 499 500 static void __set_sit_entry_type(struct f2fs_sb_info *sbi, int type, 501 unsigned int segno, int modified) 502 { 503 struct seg_entry *se = get_seg_entry(sbi, segno); 504 se->type = type; 505 if (modified) 506 __mark_sit_entry_dirty(sbi, segno); 507 } 508 509 static void update_sit_entry(struct f2fs_sb_info *sbi, block_t blkaddr, int del) 510 { 511 struct seg_entry *se; 512 unsigned int segno, offset; 513 long int new_vblocks; 514 515 segno = GET_SEGNO(sbi, blkaddr); 516 517 se = get_seg_entry(sbi, segno); 518 new_vblocks = se->valid_blocks + del; 519 offset = GET_BLKOFF_FROM_SEG0(sbi, blkaddr); 520 521 f2fs_bug_on((new_vblocks >> (sizeof(unsigned short) << 3) || 522 (new_vblocks > sbi->blocks_per_seg))); 523 524 se->valid_blocks = new_vblocks; 525 se->mtime = get_mtime(sbi); 526 SIT_I(sbi)->max_mtime = se->mtime; 527 528 /* Update valid block bitmap */ 529 if (del > 0) { 530 if (f2fs_set_bit(offset, se->cur_valid_map)) 531 BUG(); 532 } else { 533 if (!f2fs_clear_bit(offset, se->cur_valid_map)) 534 BUG(); 535 } 536 if (!f2fs_test_bit(offset, se->ckpt_valid_map)) 537 se->ckpt_valid_blocks += del; 538 539 __mark_sit_entry_dirty(sbi, segno); 540 541 /* update total number of valid blocks to be written in ckpt area */ 542 SIT_I(sbi)->written_valid_blocks += del; 543 544 if (sbi->segs_per_sec > 1) 545 get_sec_entry(sbi, segno)->valid_blocks += del; 546 } 547 548 void refresh_sit_entry(struct f2fs_sb_info *sbi, block_t old, block_t new) 549 { 550 update_sit_entry(sbi, new, 1); 551 if (GET_SEGNO(sbi, old) != NULL_SEGNO) 552 update_sit_entry(sbi, old, -1); 553 554 locate_dirty_segment(sbi, GET_SEGNO(sbi, old)); 555 locate_dirty_segment(sbi, GET_SEGNO(sbi, new)); 556 } 557 558 void invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr) 559 { 560 unsigned int segno = GET_SEGNO(sbi, addr); 561 struct sit_info *sit_i = SIT_I(sbi); 562 563 f2fs_bug_on(addr == NULL_ADDR); 564 if (addr == NEW_ADDR) 565 return; 566 567 /* add it into sit main buffer */ 568 mutex_lock(&sit_i->sentry_lock); 569 570 update_sit_entry(sbi, addr, -1); 571 572 /* add it into dirty seglist */ 573 locate_dirty_segment(sbi, segno); 574 575 mutex_unlock(&sit_i->sentry_lock); 576 } 577 578 /* 579 * This function should be resided under the curseg_mutex lock 580 */ 581 static void __add_sum_entry(struct f2fs_sb_info *sbi, int type, 582 struct f2fs_summary *sum) 583 { 584 struct curseg_info *curseg = CURSEG_I(sbi, type); 585 void *addr = curseg->sum_blk; 586 addr += curseg->next_blkoff * sizeof(struct f2fs_summary); 587 memcpy(addr, sum, sizeof(struct f2fs_summary)); 588 } 589 590 /* 591 * Calculate the number of current summary pages for writing 592 */ 593 int npages_for_summary_flush(struct f2fs_sb_info *sbi) 594 { 595 int valid_sum_count = 0; 596 int i, sum_in_page; 597 598 for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) { 599 if (sbi->ckpt->alloc_type[i] == SSR) 600 valid_sum_count += sbi->blocks_per_seg; 601 else 602 valid_sum_count += curseg_blkoff(sbi, i); 603 } 604 605 sum_in_page = (PAGE_CACHE_SIZE - 2 * SUM_JOURNAL_SIZE - 606 SUM_FOOTER_SIZE) / SUMMARY_SIZE; 607 if (valid_sum_count <= sum_in_page) 608 return 1; 609 else if ((valid_sum_count - sum_in_page) <= 610 (PAGE_CACHE_SIZE - SUM_FOOTER_SIZE) / SUMMARY_SIZE) 611 return 2; 612 return 3; 613 } 614 615 /* 616 * Caller should put this summary page 617 */ 618 struct page *get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno) 619 { 620 return get_meta_page(sbi, GET_SUM_BLOCK(sbi, segno)); 621 } 622 623 static void write_sum_page(struct f2fs_sb_info *sbi, 624 struct f2fs_summary_block *sum_blk, block_t blk_addr) 625 { 626 struct page *page = grab_meta_page(sbi, blk_addr); 627 void *kaddr = page_address(page); 628 memcpy(kaddr, sum_blk, PAGE_CACHE_SIZE); 629 set_page_dirty(page); 630 f2fs_put_page(page, 1); 631 } 632 633 static int is_next_segment_free(struct f2fs_sb_info *sbi, int type) 634 { 635 struct curseg_info *curseg = CURSEG_I(sbi, type); 636 unsigned int segno = curseg->segno + 1; 637 struct free_segmap_info *free_i = FREE_I(sbi); 638 639 if (segno < TOTAL_SEGS(sbi) && segno % sbi->segs_per_sec) 640 return !test_bit(segno, free_i->free_segmap); 641 return 0; 642 } 643 644 /* 645 * Find a new segment from the free segments bitmap to right order 646 * This function should be returned with success, otherwise BUG 647 */ 648 static void get_new_segment(struct f2fs_sb_info *sbi, 649 unsigned int *newseg, bool new_sec, int dir) 650 { 651 struct free_segmap_info *free_i = FREE_I(sbi); 652 unsigned int segno, secno, zoneno; 653 unsigned int total_zones = TOTAL_SECS(sbi) / sbi->secs_per_zone; 654 unsigned int hint = *newseg / sbi->segs_per_sec; 655 unsigned int old_zoneno = GET_ZONENO_FROM_SEGNO(sbi, *newseg); 656 unsigned int left_start = hint; 657 bool init = true; 658 int go_left = 0; 659 int i; 660 661 write_lock(&free_i->segmap_lock); 662 663 if (!new_sec && ((*newseg + 1) % sbi->segs_per_sec)) { 664 segno = find_next_zero_bit(free_i->free_segmap, 665 TOTAL_SEGS(sbi), *newseg + 1); 666 if (segno - *newseg < sbi->segs_per_sec - 667 (*newseg % sbi->segs_per_sec)) 668 goto got_it; 669 } 670 find_other_zone: 671 secno = find_next_zero_bit(free_i->free_secmap, TOTAL_SECS(sbi), hint); 672 if (secno >= TOTAL_SECS(sbi)) { 673 if (dir == ALLOC_RIGHT) { 674 secno = find_next_zero_bit(free_i->free_secmap, 675 TOTAL_SECS(sbi), 0); 676 f2fs_bug_on(secno >= TOTAL_SECS(sbi)); 677 } else { 678 go_left = 1; 679 left_start = hint - 1; 680 } 681 } 682 if (go_left == 0) 683 goto skip_left; 684 685 while (test_bit(left_start, free_i->free_secmap)) { 686 if (left_start > 0) { 687 left_start--; 688 continue; 689 } 690 left_start = find_next_zero_bit(free_i->free_secmap, 691 TOTAL_SECS(sbi), 0); 692 f2fs_bug_on(left_start >= TOTAL_SECS(sbi)); 693 break; 694 } 695 secno = left_start; 696 skip_left: 697 hint = secno; 698 segno = secno * sbi->segs_per_sec; 699 zoneno = secno / sbi->secs_per_zone; 700 701 /* give up on finding another zone */ 702 if (!init) 703 goto got_it; 704 if (sbi->secs_per_zone == 1) 705 goto got_it; 706 if (zoneno == old_zoneno) 707 goto got_it; 708 if (dir == ALLOC_LEFT) { 709 if (!go_left && zoneno + 1 >= total_zones) 710 goto got_it; 711 if (go_left && zoneno == 0) 712 goto got_it; 713 } 714 for (i = 0; i < NR_CURSEG_TYPE; i++) 715 if (CURSEG_I(sbi, i)->zone == zoneno) 716 break; 717 718 if (i < NR_CURSEG_TYPE) { 719 /* zone is in user, try another */ 720 if (go_left) 721 hint = zoneno * sbi->secs_per_zone - 1; 722 else if (zoneno + 1 >= total_zones) 723 hint = 0; 724 else 725 hint = (zoneno + 1) * sbi->secs_per_zone; 726 init = false; 727 goto find_other_zone; 728 } 729 got_it: 730 /* set it as dirty segment in free segmap */ 731 f2fs_bug_on(test_bit(segno, free_i->free_segmap)); 732 __set_inuse(sbi, segno); 733 *newseg = segno; 734 write_unlock(&free_i->segmap_lock); 735 } 736 737 static void reset_curseg(struct f2fs_sb_info *sbi, int type, int modified) 738 { 739 struct curseg_info *curseg = CURSEG_I(sbi, type); 740 struct summary_footer *sum_footer; 741 742 curseg->segno = curseg->next_segno; 743 curseg->zone = GET_ZONENO_FROM_SEGNO(sbi, curseg->segno); 744 curseg->next_blkoff = 0; 745 curseg->next_segno = NULL_SEGNO; 746 747 sum_footer = &(curseg->sum_blk->footer); 748 memset(sum_footer, 0, sizeof(struct summary_footer)); 749 if (IS_DATASEG(type)) 750 SET_SUM_TYPE(sum_footer, SUM_TYPE_DATA); 751 if (IS_NODESEG(type)) 752 SET_SUM_TYPE(sum_footer, SUM_TYPE_NODE); 753 __set_sit_entry_type(sbi, type, curseg->segno, modified); 754 } 755 756 /* 757 * Allocate a current working segment. 758 * This function always allocates a free segment in LFS manner. 759 */ 760 static void new_curseg(struct f2fs_sb_info *sbi, int type, bool new_sec) 761 { 762 struct curseg_info *curseg = CURSEG_I(sbi, type); 763 unsigned int segno = curseg->segno; 764 int dir = ALLOC_LEFT; 765 766 write_sum_page(sbi, curseg->sum_blk, 767 GET_SUM_BLOCK(sbi, segno)); 768 if (type == CURSEG_WARM_DATA || type == CURSEG_COLD_DATA) 769 dir = ALLOC_RIGHT; 770 771 if (test_opt(sbi, NOHEAP)) 772 dir = ALLOC_RIGHT; 773 774 get_new_segment(sbi, &segno, new_sec, dir); 775 curseg->next_segno = segno; 776 reset_curseg(sbi, type, 1); 777 curseg->alloc_type = LFS; 778 } 779 780 static void __next_free_blkoff(struct f2fs_sb_info *sbi, 781 struct curseg_info *seg, block_t start) 782 { 783 struct seg_entry *se = get_seg_entry(sbi, seg->segno); 784 int entries = SIT_VBLOCK_MAP_SIZE / sizeof(unsigned long); 785 unsigned long target_map[entries]; 786 unsigned long *ckpt_map = (unsigned long *)se->ckpt_valid_map; 787 unsigned long *cur_map = (unsigned long *)se->cur_valid_map; 788 int i, pos; 789 790 for (i = 0; i < entries; i++) 791 target_map[i] = ckpt_map[i] | cur_map[i]; 792 793 pos = __find_rev_next_zero_bit(target_map, sbi->blocks_per_seg, start); 794 795 seg->next_blkoff = pos; 796 } 797 798 /* 799 * If a segment is written by LFS manner, next block offset is just obtained 800 * by increasing the current block offset. However, if a segment is written by 801 * SSR manner, next block offset obtained by calling __next_free_blkoff 802 */ 803 static void __refresh_next_blkoff(struct f2fs_sb_info *sbi, 804 struct curseg_info *seg) 805 { 806 if (seg->alloc_type == SSR) 807 __next_free_blkoff(sbi, seg, seg->next_blkoff + 1); 808 else 809 seg->next_blkoff++; 810 } 811 812 /* 813 * This function always allocates a used segment (from dirty seglist) by SSR 814 * manner, so it should recover the existing segment information of valid blocks 815 */ 816 static void change_curseg(struct f2fs_sb_info *sbi, int type, bool reuse) 817 { 818 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 819 struct curseg_info *curseg = CURSEG_I(sbi, type); 820 unsigned int new_segno = curseg->next_segno; 821 struct f2fs_summary_block *sum_node; 822 struct page *sum_page; 823 824 write_sum_page(sbi, curseg->sum_blk, 825 GET_SUM_BLOCK(sbi, curseg->segno)); 826 __set_test_and_inuse(sbi, new_segno); 827 828 mutex_lock(&dirty_i->seglist_lock); 829 __remove_dirty_segment(sbi, new_segno, PRE); 830 __remove_dirty_segment(sbi, new_segno, DIRTY); 831 mutex_unlock(&dirty_i->seglist_lock); 832 833 reset_curseg(sbi, type, 1); 834 curseg->alloc_type = SSR; 835 __next_free_blkoff(sbi, curseg, 0); 836 837 if (reuse) { 838 sum_page = get_sum_page(sbi, new_segno); 839 sum_node = (struct f2fs_summary_block *)page_address(sum_page); 840 memcpy(curseg->sum_blk, sum_node, SUM_ENTRY_SIZE); 841 f2fs_put_page(sum_page, 1); 842 } 843 } 844 845 static int get_ssr_segment(struct f2fs_sb_info *sbi, int type) 846 { 847 struct curseg_info *curseg = CURSEG_I(sbi, type); 848 const struct victim_selection *v_ops = DIRTY_I(sbi)->v_ops; 849 850 if (IS_NODESEG(type) || !has_not_enough_free_secs(sbi, 0)) 851 return v_ops->get_victim(sbi, 852 &(curseg)->next_segno, BG_GC, type, SSR); 853 854 /* For data segments, let's do SSR more intensively */ 855 for (; type >= CURSEG_HOT_DATA; type--) 856 if (v_ops->get_victim(sbi, &(curseg)->next_segno, 857 BG_GC, type, SSR)) 858 return 1; 859 return 0; 860 } 861 862 /* 863 * flush out current segment and replace it with new segment 864 * This function should be returned with success, otherwise BUG 865 */ 866 static void allocate_segment_by_default(struct f2fs_sb_info *sbi, 867 int type, bool force) 868 { 869 struct curseg_info *curseg = CURSEG_I(sbi, type); 870 871 if (force) 872 new_curseg(sbi, type, true); 873 else if (type == CURSEG_WARM_NODE) 874 new_curseg(sbi, type, false); 875 else if (curseg->alloc_type == LFS && is_next_segment_free(sbi, type)) 876 new_curseg(sbi, type, false); 877 else if (need_SSR(sbi) && get_ssr_segment(sbi, type)) 878 change_curseg(sbi, type, true); 879 else 880 new_curseg(sbi, type, false); 881 882 stat_inc_seg_type(sbi, curseg); 883 } 884 885 void allocate_new_segments(struct f2fs_sb_info *sbi) 886 { 887 struct curseg_info *curseg; 888 unsigned int old_curseg; 889 int i; 890 891 for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) { 892 curseg = CURSEG_I(sbi, i); 893 old_curseg = curseg->segno; 894 SIT_I(sbi)->s_ops->allocate_segment(sbi, i, true); 895 locate_dirty_segment(sbi, old_curseg); 896 } 897 } 898 899 static const struct segment_allocation default_salloc_ops = { 900 .allocate_segment = allocate_segment_by_default, 901 }; 902 903 static bool __has_curseg_space(struct f2fs_sb_info *sbi, int type) 904 { 905 struct curseg_info *curseg = CURSEG_I(sbi, type); 906 if (curseg->next_blkoff < sbi->blocks_per_seg) 907 return true; 908 return false; 909 } 910 911 static int __get_segment_type_2(struct page *page, enum page_type p_type) 912 { 913 if (p_type == DATA) 914 return CURSEG_HOT_DATA; 915 else 916 return CURSEG_HOT_NODE; 917 } 918 919 static int __get_segment_type_4(struct page *page, enum page_type p_type) 920 { 921 if (p_type == DATA) { 922 struct inode *inode = page->mapping->host; 923 924 if (S_ISDIR(inode->i_mode)) 925 return CURSEG_HOT_DATA; 926 else 927 return CURSEG_COLD_DATA; 928 } else { 929 if (IS_DNODE(page) && !is_cold_node(page)) 930 return CURSEG_HOT_NODE; 931 else 932 return CURSEG_COLD_NODE; 933 } 934 } 935 936 static int __get_segment_type_6(struct page *page, enum page_type p_type) 937 { 938 if (p_type == DATA) { 939 struct inode *inode = page->mapping->host; 940 941 if (S_ISDIR(inode->i_mode)) 942 return CURSEG_HOT_DATA; 943 else if (is_cold_data(page) || file_is_cold(inode)) 944 return CURSEG_COLD_DATA; 945 else 946 return CURSEG_WARM_DATA; 947 } else { 948 if (IS_DNODE(page)) 949 return is_cold_node(page) ? CURSEG_WARM_NODE : 950 CURSEG_HOT_NODE; 951 else 952 return CURSEG_COLD_NODE; 953 } 954 } 955 956 static int __get_segment_type(struct page *page, enum page_type p_type) 957 { 958 struct f2fs_sb_info *sbi = F2FS_SB(page->mapping->host->i_sb); 959 switch (sbi->active_logs) { 960 case 2: 961 return __get_segment_type_2(page, p_type); 962 case 4: 963 return __get_segment_type_4(page, p_type); 964 } 965 /* NR_CURSEG_TYPE(6) logs by default */ 966 f2fs_bug_on(sbi->active_logs != NR_CURSEG_TYPE); 967 return __get_segment_type_6(page, p_type); 968 } 969 970 void allocate_data_block(struct f2fs_sb_info *sbi, struct page *page, 971 block_t old_blkaddr, block_t *new_blkaddr, 972 struct f2fs_summary *sum, int type) 973 { 974 struct sit_info *sit_i = SIT_I(sbi); 975 struct curseg_info *curseg; 976 unsigned int old_cursegno; 977 978 curseg = CURSEG_I(sbi, type); 979 980 mutex_lock(&curseg->curseg_mutex); 981 982 *new_blkaddr = NEXT_FREE_BLKADDR(sbi, curseg); 983 old_cursegno = curseg->segno; 984 985 /* 986 * __add_sum_entry should be resided under the curseg_mutex 987 * because, this function updates a summary entry in the 988 * current summary block. 989 */ 990 __add_sum_entry(sbi, type, sum); 991 992 mutex_lock(&sit_i->sentry_lock); 993 __refresh_next_blkoff(sbi, curseg); 994 995 stat_inc_block_count(sbi, curseg); 996 997 if (!__has_curseg_space(sbi, type)) 998 sit_i->s_ops->allocate_segment(sbi, type, false); 999 /* 1000 * SIT information should be updated before segment allocation, 1001 * since SSR needs latest valid block information. 1002 */ 1003 refresh_sit_entry(sbi, old_blkaddr, *new_blkaddr); 1004 locate_dirty_segment(sbi, old_cursegno); 1005 1006 mutex_unlock(&sit_i->sentry_lock); 1007 1008 if (page && IS_NODESEG(type)) 1009 fill_node_footer_blkaddr(page, NEXT_FREE_BLKADDR(sbi, curseg)); 1010 1011 mutex_unlock(&curseg->curseg_mutex); 1012 } 1013 1014 static void do_write_page(struct f2fs_sb_info *sbi, struct page *page, 1015 block_t old_blkaddr, block_t *new_blkaddr, 1016 struct f2fs_summary *sum, struct f2fs_io_info *fio) 1017 { 1018 int type = __get_segment_type(page, fio->type); 1019 1020 allocate_data_block(sbi, page, old_blkaddr, new_blkaddr, sum, type); 1021 1022 /* writeout dirty page into bdev */ 1023 f2fs_submit_page_mbio(sbi, page, *new_blkaddr, fio); 1024 } 1025 1026 void write_meta_page(struct f2fs_sb_info *sbi, struct page *page) 1027 { 1028 struct f2fs_io_info fio = { 1029 .type = META, 1030 .rw = WRITE_SYNC | REQ_META | REQ_PRIO 1031 }; 1032 1033 set_page_writeback(page); 1034 f2fs_submit_page_mbio(sbi, page, page->index, &fio); 1035 } 1036 1037 void write_node_page(struct f2fs_sb_info *sbi, struct page *page, 1038 struct f2fs_io_info *fio, 1039 unsigned int nid, block_t old_blkaddr, block_t *new_blkaddr) 1040 { 1041 struct f2fs_summary sum; 1042 set_summary(&sum, nid, 0, 0); 1043 do_write_page(sbi, page, old_blkaddr, new_blkaddr, &sum, fio); 1044 } 1045 1046 void write_data_page(struct page *page, struct dnode_of_data *dn, 1047 block_t *new_blkaddr, struct f2fs_io_info *fio) 1048 { 1049 struct f2fs_sb_info *sbi = F2FS_SB(dn->inode->i_sb); 1050 struct f2fs_summary sum; 1051 struct node_info ni; 1052 1053 f2fs_bug_on(dn->data_blkaddr == NULL_ADDR); 1054 get_node_info(sbi, dn->nid, &ni); 1055 set_summary(&sum, dn->nid, dn->ofs_in_node, ni.version); 1056 1057 do_write_page(sbi, page, dn->data_blkaddr, new_blkaddr, &sum, fio); 1058 } 1059 1060 void rewrite_data_page(struct page *page, block_t old_blkaddr, 1061 struct f2fs_io_info *fio) 1062 { 1063 struct inode *inode = page->mapping->host; 1064 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); 1065 f2fs_submit_page_mbio(sbi, page, old_blkaddr, fio); 1066 } 1067 1068 void recover_data_page(struct f2fs_sb_info *sbi, 1069 struct page *page, struct f2fs_summary *sum, 1070 block_t old_blkaddr, block_t new_blkaddr) 1071 { 1072 struct sit_info *sit_i = SIT_I(sbi); 1073 struct curseg_info *curseg; 1074 unsigned int segno, old_cursegno; 1075 struct seg_entry *se; 1076 int type; 1077 1078 segno = GET_SEGNO(sbi, new_blkaddr); 1079 se = get_seg_entry(sbi, segno); 1080 type = se->type; 1081 1082 if (se->valid_blocks == 0 && !IS_CURSEG(sbi, segno)) { 1083 if (old_blkaddr == NULL_ADDR) 1084 type = CURSEG_COLD_DATA; 1085 else 1086 type = CURSEG_WARM_DATA; 1087 } 1088 curseg = CURSEG_I(sbi, type); 1089 1090 mutex_lock(&curseg->curseg_mutex); 1091 mutex_lock(&sit_i->sentry_lock); 1092 1093 old_cursegno = curseg->segno; 1094 1095 /* change the current segment */ 1096 if (segno != curseg->segno) { 1097 curseg->next_segno = segno; 1098 change_curseg(sbi, type, true); 1099 } 1100 1101 curseg->next_blkoff = GET_BLKOFF_FROM_SEG0(sbi, new_blkaddr); 1102 __add_sum_entry(sbi, type, sum); 1103 1104 refresh_sit_entry(sbi, old_blkaddr, new_blkaddr); 1105 locate_dirty_segment(sbi, old_cursegno); 1106 1107 mutex_unlock(&sit_i->sentry_lock); 1108 mutex_unlock(&curseg->curseg_mutex); 1109 } 1110 1111 void rewrite_node_page(struct f2fs_sb_info *sbi, 1112 struct page *page, struct f2fs_summary *sum, 1113 block_t old_blkaddr, block_t new_blkaddr) 1114 { 1115 struct sit_info *sit_i = SIT_I(sbi); 1116 int type = CURSEG_WARM_NODE; 1117 struct curseg_info *curseg; 1118 unsigned int segno, old_cursegno; 1119 block_t next_blkaddr = next_blkaddr_of_node(page); 1120 unsigned int next_segno = GET_SEGNO(sbi, next_blkaddr); 1121 struct f2fs_io_info fio = { 1122 .type = NODE, 1123 .rw = WRITE_SYNC, 1124 }; 1125 1126 curseg = CURSEG_I(sbi, type); 1127 1128 mutex_lock(&curseg->curseg_mutex); 1129 mutex_lock(&sit_i->sentry_lock); 1130 1131 segno = GET_SEGNO(sbi, new_blkaddr); 1132 old_cursegno = curseg->segno; 1133 1134 /* change the current segment */ 1135 if (segno != curseg->segno) { 1136 curseg->next_segno = segno; 1137 change_curseg(sbi, type, true); 1138 } 1139 curseg->next_blkoff = GET_BLKOFF_FROM_SEG0(sbi, new_blkaddr); 1140 __add_sum_entry(sbi, type, sum); 1141 1142 /* change the current log to the next block addr in advance */ 1143 if (next_segno != segno) { 1144 curseg->next_segno = next_segno; 1145 change_curseg(sbi, type, true); 1146 } 1147 curseg->next_blkoff = GET_BLKOFF_FROM_SEG0(sbi, next_blkaddr); 1148 1149 /* rewrite node page */ 1150 set_page_writeback(page); 1151 f2fs_submit_page_mbio(sbi, page, new_blkaddr, &fio); 1152 f2fs_submit_merged_bio(sbi, NODE, WRITE); 1153 refresh_sit_entry(sbi, old_blkaddr, new_blkaddr); 1154 locate_dirty_segment(sbi, old_cursegno); 1155 1156 mutex_unlock(&sit_i->sentry_lock); 1157 mutex_unlock(&curseg->curseg_mutex); 1158 } 1159 1160 static inline bool is_merged_page(struct f2fs_sb_info *sbi, 1161 struct page *page, enum page_type type) 1162 { 1163 enum page_type btype = PAGE_TYPE_OF_BIO(type); 1164 struct f2fs_bio_info *io = &sbi->write_io[btype]; 1165 struct bio_vec *bvec; 1166 int i; 1167 1168 down_read(&io->io_rwsem); 1169 if (!io->bio) 1170 goto out; 1171 1172 bio_for_each_segment_all(bvec, io->bio, i) { 1173 if (page == bvec->bv_page) { 1174 up_read(&io->io_rwsem); 1175 return true; 1176 } 1177 } 1178 1179 out: 1180 up_read(&io->io_rwsem); 1181 return false; 1182 } 1183 1184 void f2fs_wait_on_page_writeback(struct page *page, 1185 enum page_type type) 1186 { 1187 struct f2fs_sb_info *sbi = F2FS_SB(page->mapping->host->i_sb); 1188 if (PageWriteback(page)) { 1189 if (is_merged_page(sbi, page, type)) 1190 f2fs_submit_merged_bio(sbi, type, WRITE); 1191 wait_on_page_writeback(page); 1192 } 1193 } 1194 1195 static int read_compacted_summaries(struct f2fs_sb_info *sbi) 1196 { 1197 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); 1198 struct curseg_info *seg_i; 1199 unsigned char *kaddr; 1200 struct page *page; 1201 block_t start; 1202 int i, j, offset; 1203 1204 start = start_sum_block(sbi); 1205 1206 page = get_meta_page(sbi, start++); 1207 kaddr = (unsigned char *)page_address(page); 1208 1209 /* Step 1: restore nat cache */ 1210 seg_i = CURSEG_I(sbi, CURSEG_HOT_DATA); 1211 memcpy(&seg_i->sum_blk->n_nats, kaddr, SUM_JOURNAL_SIZE); 1212 1213 /* Step 2: restore sit cache */ 1214 seg_i = CURSEG_I(sbi, CURSEG_COLD_DATA); 1215 memcpy(&seg_i->sum_blk->n_sits, kaddr + SUM_JOURNAL_SIZE, 1216 SUM_JOURNAL_SIZE); 1217 offset = 2 * SUM_JOURNAL_SIZE; 1218 1219 /* Step 3: restore summary entries */ 1220 for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) { 1221 unsigned short blk_off; 1222 unsigned int segno; 1223 1224 seg_i = CURSEG_I(sbi, i); 1225 segno = le32_to_cpu(ckpt->cur_data_segno[i]); 1226 blk_off = le16_to_cpu(ckpt->cur_data_blkoff[i]); 1227 seg_i->next_segno = segno; 1228 reset_curseg(sbi, i, 0); 1229 seg_i->alloc_type = ckpt->alloc_type[i]; 1230 seg_i->next_blkoff = blk_off; 1231 1232 if (seg_i->alloc_type == SSR) 1233 blk_off = sbi->blocks_per_seg; 1234 1235 for (j = 0; j < blk_off; j++) { 1236 struct f2fs_summary *s; 1237 s = (struct f2fs_summary *)(kaddr + offset); 1238 seg_i->sum_blk->entries[j] = *s; 1239 offset += SUMMARY_SIZE; 1240 if (offset + SUMMARY_SIZE <= PAGE_CACHE_SIZE - 1241 SUM_FOOTER_SIZE) 1242 continue; 1243 1244 f2fs_put_page(page, 1); 1245 page = NULL; 1246 1247 page = get_meta_page(sbi, start++); 1248 kaddr = (unsigned char *)page_address(page); 1249 offset = 0; 1250 } 1251 } 1252 f2fs_put_page(page, 1); 1253 return 0; 1254 } 1255 1256 static int read_normal_summaries(struct f2fs_sb_info *sbi, int type) 1257 { 1258 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); 1259 struct f2fs_summary_block *sum; 1260 struct curseg_info *curseg; 1261 struct page *new; 1262 unsigned short blk_off; 1263 unsigned int segno = 0; 1264 block_t blk_addr = 0; 1265 1266 /* get segment number and block addr */ 1267 if (IS_DATASEG(type)) { 1268 segno = le32_to_cpu(ckpt->cur_data_segno[type]); 1269 blk_off = le16_to_cpu(ckpt->cur_data_blkoff[type - 1270 CURSEG_HOT_DATA]); 1271 if (is_set_ckpt_flags(ckpt, CP_UMOUNT_FLAG)) 1272 blk_addr = sum_blk_addr(sbi, NR_CURSEG_TYPE, type); 1273 else 1274 blk_addr = sum_blk_addr(sbi, NR_CURSEG_DATA_TYPE, type); 1275 } else { 1276 segno = le32_to_cpu(ckpt->cur_node_segno[type - 1277 CURSEG_HOT_NODE]); 1278 blk_off = le16_to_cpu(ckpt->cur_node_blkoff[type - 1279 CURSEG_HOT_NODE]); 1280 if (is_set_ckpt_flags(ckpt, CP_UMOUNT_FLAG)) 1281 blk_addr = sum_blk_addr(sbi, NR_CURSEG_NODE_TYPE, 1282 type - CURSEG_HOT_NODE); 1283 else 1284 blk_addr = GET_SUM_BLOCK(sbi, segno); 1285 } 1286 1287 new = get_meta_page(sbi, blk_addr); 1288 sum = (struct f2fs_summary_block *)page_address(new); 1289 1290 if (IS_NODESEG(type)) { 1291 if (is_set_ckpt_flags(ckpt, CP_UMOUNT_FLAG)) { 1292 struct f2fs_summary *ns = &sum->entries[0]; 1293 int i; 1294 for (i = 0; i < sbi->blocks_per_seg; i++, ns++) { 1295 ns->version = 0; 1296 ns->ofs_in_node = 0; 1297 } 1298 } else { 1299 int err; 1300 1301 err = restore_node_summary(sbi, segno, sum); 1302 if (err) { 1303 f2fs_put_page(new, 1); 1304 return err; 1305 } 1306 } 1307 } 1308 1309 /* set uncompleted segment to curseg */ 1310 curseg = CURSEG_I(sbi, type); 1311 mutex_lock(&curseg->curseg_mutex); 1312 memcpy(curseg->sum_blk, sum, PAGE_CACHE_SIZE); 1313 curseg->next_segno = segno; 1314 reset_curseg(sbi, type, 0); 1315 curseg->alloc_type = ckpt->alloc_type[type]; 1316 curseg->next_blkoff = blk_off; 1317 mutex_unlock(&curseg->curseg_mutex); 1318 f2fs_put_page(new, 1); 1319 return 0; 1320 } 1321 1322 static int restore_curseg_summaries(struct f2fs_sb_info *sbi) 1323 { 1324 int type = CURSEG_HOT_DATA; 1325 int err; 1326 1327 if (is_set_ckpt_flags(F2FS_CKPT(sbi), CP_COMPACT_SUM_FLAG)) { 1328 /* restore for compacted data summary */ 1329 if (read_compacted_summaries(sbi)) 1330 return -EINVAL; 1331 type = CURSEG_HOT_NODE; 1332 } 1333 1334 for (; type <= CURSEG_COLD_NODE; type++) { 1335 err = read_normal_summaries(sbi, type); 1336 if (err) 1337 return err; 1338 } 1339 1340 return 0; 1341 } 1342 1343 static void write_compacted_summaries(struct f2fs_sb_info *sbi, block_t blkaddr) 1344 { 1345 struct page *page; 1346 unsigned char *kaddr; 1347 struct f2fs_summary *summary; 1348 struct curseg_info *seg_i; 1349 int written_size = 0; 1350 int i, j; 1351 1352 page = grab_meta_page(sbi, blkaddr++); 1353 kaddr = (unsigned char *)page_address(page); 1354 1355 /* Step 1: write nat cache */ 1356 seg_i = CURSEG_I(sbi, CURSEG_HOT_DATA); 1357 memcpy(kaddr, &seg_i->sum_blk->n_nats, SUM_JOURNAL_SIZE); 1358 written_size += SUM_JOURNAL_SIZE; 1359 1360 /* Step 2: write sit cache */ 1361 seg_i = CURSEG_I(sbi, CURSEG_COLD_DATA); 1362 memcpy(kaddr + written_size, &seg_i->sum_blk->n_sits, 1363 SUM_JOURNAL_SIZE); 1364 written_size += SUM_JOURNAL_SIZE; 1365 1366 /* Step 3: write summary entries */ 1367 for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) { 1368 unsigned short blkoff; 1369 seg_i = CURSEG_I(sbi, i); 1370 if (sbi->ckpt->alloc_type[i] == SSR) 1371 blkoff = sbi->blocks_per_seg; 1372 else 1373 blkoff = curseg_blkoff(sbi, i); 1374 1375 for (j = 0; j < blkoff; j++) { 1376 if (!page) { 1377 page = grab_meta_page(sbi, blkaddr++); 1378 kaddr = (unsigned char *)page_address(page); 1379 written_size = 0; 1380 } 1381 summary = (struct f2fs_summary *)(kaddr + written_size); 1382 *summary = seg_i->sum_blk->entries[j]; 1383 written_size += SUMMARY_SIZE; 1384 1385 if (written_size + SUMMARY_SIZE <= PAGE_CACHE_SIZE - 1386 SUM_FOOTER_SIZE) 1387 continue; 1388 1389 set_page_dirty(page); 1390 f2fs_put_page(page, 1); 1391 page = NULL; 1392 } 1393 } 1394 if (page) { 1395 set_page_dirty(page); 1396 f2fs_put_page(page, 1); 1397 } 1398 } 1399 1400 static void write_normal_summaries(struct f2fs_sb_info *sbi, 1401 block_t blkaddr, int type) 1402 { 1403 int i, end; 1404 if (IS_DATASEG(type)) 1405 end = type + NR_CURSEG_DATA_TYPE; 1406 else 1407 end = type + NR_CURSEG_NODE_TYPE; 1408 1409 for (i = type; i < end; i++) { 1410 struct curseg_info *sum = CURSEG_I(sbi, i); 1411 mutex_lock(&sum->curseg_mutex); 1412 write_sum_page(sbi, sum->sum_blk, blkaddr + (i - type)); 1413 mutex_unlock(&sum->curseg_mutex); 1414 } 1415 } 1416 1417 void write_data_summaries(struct f2fs_sb_info *sbi, block_t start_blk) 1418 { 1419 if (is_set_ckpt_flags(F2FS_CKPT(sbi), CP_COMPACT_SUM_FLAG)) 1420 write_compacted_summaries(sbi, start_blk); 1421 else 1422 write_normal_summaries(sbi, start_blk, CURSEG_HOT_DATA); 1423 } 1424 1425 void write_node_summaries(struct f2fs_sb_info *sbi, block_t start_blk) 1426 { 1427 if (is_set_ckpt_flags(F2FS_CKPT(sbi), CP_UMOUNT_FLAG)) 1428 write_normal_summaries(sbi, start_blk, CURSEG_HOT_NODE); 1429 } 1430 1431 int lookup_journal_in_cursum(struct f2fs_summary_block *sum, int type, 1432 unsigned int val, int alloc) 1433 { 1434 int i; 1435 1436 if (type == NAT_JOURNAL) { 1437 for (i = 0; i < nats_in_cursum(sum); i++) { 1438 if (le32_to_cpu(nid_in_journal(sum, i)) == val) 1439 return i; 1440 } 1441 if (alloc && nats_in_cursum(sum) < NAT_JOURNAL_ENTRIES) 1442 return update_nats_in_cursum(sum, 1); 1443 } else if (type == SIT_JOURNAL) { 1444 for (i = 0; i < sits_in_cursum(sum); i++) 1445 if (le32_to_cpu(segno_in_journal(sum, i)) == val) 1446 return i; 1447 if (alloc && sits_in_cursum(sum) < SIT_JOURNAL_ENTRIES) 1448 return update_sits_in_cursum(sum, 1); 1449 } 1450 return -1; 1451 } 1452 1453 static struct page *get_current_sit_page(struct f2fs_sb_info *sbi, 1454 unsigned int segno) 1455 { 1456 struct sit_info *sit_i = SIT_I(sbi); 1457 unsigned int offset = SIT_BLOCK_OFFSET(sit_i, segno); 1458 block_t blk_addr = sit_i->sit_base_addr + offset; 1459 1460 check_seg_range(sbi, segno); 1461 1462 /* calculate sit block address */ 1463 if (f2fs_test_bit(offset, sit_i->sit_bitmap)) 1464 blk_addr += sit_i->sit_blocks; 1465 1466 return get_meta_page(sbi, blk_addr); 1467 } 1468 1469 static struct page *get_next_sit_page(struct f2fs_sb_info *sbi, 1470 unsigned int start) 1471 { 1472 struct sit_info *sit_i = SIT_I(sbi); 1473 struct page *src_page, *dst_page; 1474 pgoff_t src_off, dst_off; 1475 void *src_addr, *dst_addr; 1476 1477 src_off = current_sit_addr(sbi, start); 1478 dst_off = next_sit_addr(sbi, src_off); 1479 1480 /* get current sit block page without lock */ 1481 src_page = get_meta_page(sbi, src_off); 1482 dst_page = grab_meta_page(sbi, dst_off); 1483 f2fs_bug_on(PageDirty(src_page)); 1484 1485 src_addr = page_address(src_page); 1486 dst_addr = page_address(dst_page); 1487 memcpy(dst_addr, src_addr, PAGE_CACHE_SIZE); 1488 1489 set_page_dirty(dst_page); 1490 f2fs_put_page(src_page, 1); 1491 1492 set_to_next_sit(sit_i, start); 1493 1494 return dst_page; 1495 } 1496 1497 static bool flush_sits_in_journal(struct f2fs_sb_info *sbi) 1498 { 1499 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_COLD_DATA); 1500 struct f2fs_summary_block *sum = curseg->sum_blk; 1501 int i; 1502 1503 /* 1504 * If the journal area in the current summary is full of sit entries, 1505 * all the sit entries will be flushed. Otherwise the sit entries 1506 * are not able to replace with newly hot sit entries. 1507 */ 1508 if (sits_in_cursum(sum) >= SIT_JOURNAL_ENTRIES) { 1509 for (i = sits_in_cursum(sum) - 1; i >= 0; i--) { 1510 unsigned int segno; 1511 segno = le32_to_cpu(segno_in_journal(sum, i)); 1512 __mark_sit_entry_dirty(sbi, segno); 1513 } 1514 update_sits_in_cursum(sum, -sits_in_cursum(sum)); 1515 return true; 1516 } 1517 return false; 1518 } 1519 1520 /* 1521 * CP calls this function, which flushes SIT entries including sit_journal, 1522 * and moves prefree segs to free segs. 1523 */ 1524 void flush_sit_entries(struct f2fs_sb_info *sbi) 1525 { 1526 struct sit_info *sit_i = SIT_I(sbi); 1527 unsigned long *bitmap = sit_i->dirty_sentries_bitmap; 1528 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_COLD_DATA); 1529 struct f2fs_summary_block *sum = curseg->sum_blk; 1530 unsigned long nsegs = TOTAL_SEGS(sbi); 1531 struct page *page = NULL; 1532 struct f2fs_sit_block *raw_sit = NULL; 1533 unsigned int start = 0, end = 0; 1534 unsigned int segno = -1; 1535 bool flushed; 1536 1537 mutex_lock(&curseg->curseg_mutex); 1538 mutex_lock(&sit_i->sentry_lock); 1539 1540 /* 1541 * "flushed" indicates whether sit entries in journal are flushed 1542 * to the SIT area or not. 1543 */ 1544 flushed = flush_sits_in_journal(sbi); 1545 1546 while ((segno = find_next_bit(bitmap, nsegs, segno + 1)) < nsegs) { 1547 struct seg_entry *se = get_seg_entry(sbi, segno); 1548 int sit_offset, offset; 1549 1550 sit_offset = SIT_ENTRY_OFFSET(sit_i, segno); 1551 1552 /* add discard candidates */ 1553 if (SM_I(sbi)->nr_discards < SM_I(sbi)->max_discards) 1554 add_discard_addrs(sbi, segno, se); 1555 1556 if (flushed) 1557 goto to_sit_page; 1558 1559 offset = lookup_journal_in_cursum(sum, SIT_JOURNAL, segno, 1); 1560 if (offset >= 0) { 1561 segno_in_journal(sum, offset) = cpu_to_le32(segno); 1562 seg_info_to_raw_sit(se, &sit_in_journal(sum, offset)); 1563 goto flush_done; 1564 } 1565 to_sit_page: 1566 if (!page || (start > segno) || (segno > end)) { 1567 if (page) { 1568 f2fs_put_page(page, 1); 1569 page = NULL; 1570 } 1571 1572 start = START_SEGNO(sit_i, segno); 1573 end = start + SIT_ENTRY_PER_BLOCK - 1; 1574 1575 /* read sit block that will be updated */ 1576 page = get_next_sit_page(sbi, start); 1577 raw_sit = page_address(page); 1578 } 1579 1580 /* udpate entry in SIT block */ 1581 seg_info_to_raw_sit(se, &raw_sit->entries[sit_offset]); 1582 flush_done: 1583 __clear_bit(segno, bitmap); 1584 sit_i->dirty_sentries--; 1585 } 1586 mutex_unlock(&sit_i->sentry_lock); 1587 mutex_unlock(&curseg->curseg_mutex); 1588 1589 /* writeout last modified SIT block */ 1590 f2fs_put_page(page, 1); 1591 1592 set_prefree_as_free_segments(sbi); 1593 } 1594 1595 static int build_sit_info(struct f2fs_sb_info *sbi) 1596 { 1597 struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi); 1598 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); 1599 struct sit_info *sit_i; 1600 unsigned int sit_segs, start; 1601 char *src_bitmap, *dst_bitmap; 1602 unsigned int bitmap_size; 1603 1604 /* allocate memory for SIT information */ 1605 sit_i = kzalloc(sizeof(struct sit_info), GFP_KERNEL); 1606 if (!sit_i) 1607 return -ENOMEM; 1608 1609 SM_I(sbi)->sit_info = sit_i; 1610 1611 sit_i->sentries = vzalloc(TOTAL_SEGS(sbi) * sizeof(struct seg_entry)); 1612 if (!sit_i->sentries) 1613 return -ENOMEM; 1614 1615 bitmap_size = f2fs_bitmap_size(TOTAL_SEGS(sbi)); 1616 sit_i->dirty_sentries_bitmap = kzalloc(bitmap_size, GFP_KERNEL); 1617 if (!sit_i->dirty_sentries_bitmap) 1618 return -ENOMEM; 1619 1620 for (start = 0; start < TOTAL_SEGS(sbi); start++) { 1621 sit_i->sentries[start].cur_valid_map 1622 = kzalloc(SIT_VBLOCK_MAP_SIZE, GFP_KERNEL); 1623 sit_i->sentries[start].ckpt_valid_map 1624 = kzalloc(SIT_VBLOCK_MAP_SIZE, GFP_KERNEL); 1625 if (!sit_i->sentries[start].cur_valid_map 1626 || !sit_i->sentries[start].ckpt_valid_map) 1627 return -ENOMEM; 1628 } 1629 1630 if (sbi->segs_per_sec > 1) { 1631 sit_i->sec_entries = vzalloc(TOTAL_SECS(sbi) * 1632 sizeof(struct sec_entry)); 1633 if (!sit_i->sec_entries) 1634 return -ENOMEM; 1635 } 1636 1637 /* get information related with SIT */ 1638 sit_segs = le32_to_cpu(raw_super->segment_count_sit) >> 1; 1639 1640 /* setup SIT bitmap from ckeckpoint pack */ 1641 bitmap_size = __bitmap_size(sbi, SIT_BITMAP); 1642 src_bitmap = __bitmap_ptr(sbi, SIT_BITMAP); 1643 1644 dst_bitmap = kmemdup(src_bitmap, bitmap_size, GFP_KERNEL); 1645 if (!dst_bitmap) 1646 return -ENOMEM; 1647 1648 /* init SIT information */ 1649 sit_i->s_ops = &default_salloc_ops; 1650 1651 sit_i->sit_base_addr = le32_to_cpu(raw_super->sit_blkaddr); 1652 sit_i->sit_blocks = sit_segs << sbi->log_blocks_per_seg; 1653 sit_i->written_valid_blocks = le64_to_cpu(ckpt->valid_block_count); 1654 sit_i->sit_bitmap = dst_bitmap; 1655 sit_i->bitmap_size = bitmap_size; 1656 sit_i->dirty_sentries = 0; 1657 sit_i->sents_per_block = SIT_ENTRY_PER_BLOCK; 1658 sit_i->elapsed_time = le64_to_cpu(sbi->ckpt->elapsed_time); 1659 sit_i->mounted_time = CURRENT_TIME_SEC.tv_sec; 1660 mutex_init(&sit_i->sentry_lock); 1661 return 0; 1662 } 1663 1664 static int build_free_segmap(struct f2fs_sb_info *sbi) 1665 { 1666 struct f2fs_sm_info *sm_info = SM_I(sbi); 1667 struct free_segmap_info *free_i; 1668 unsigned int bitmap_size, sec_bitmap_size; 1669 1670 /* allocate memory for free segmap information */ 1671 free_i = kzalloc(sizeof(struct free_segmap_info), GFP_KERNEL); 1672 if (!free_i) 1673 return -ENOMEM; 1674 1675 SM_I(sbi)->free_info = free_i; 1676 1677 bitmap_size = f2fs_bitmap_size(TOTAL_SEGS(sbi)); 1678 free_i->free_segmap = kmalloc(bitmap_size, GFP_KERNEL); 1679 if (!free_i->free_segmap) 1680 return -ENOMEM; 1681 1682 sec_bitmap_size = f2fs_bitmap_size(TOTAL_SECS(sbi)); 1683 free_i->free_secmap = kmalloc(sec_bitmap_size, GFP_KERNEL); 1684 if (!free_i->free_secmap) 1685 return -ENOMEM; 1686 1687 /* set all segments as dirty temporarily */ 1688 memset(free_i->free_segmap, 0xff, bitmap_size); 1689 memset(free_i->free_secmap, 0xff, sec_bitmap_size); 1690 1691 /* init free segmap information */ 1692 free_i->start_segno = 1693 (unsigned int) GET_SEGNO_FROM_SEG0(sbi, sm_info->main_blkaddr); 1694 free_i->free_segments = 0; 1695 free_i->free_sections = 0; 1696 rwlock_init(&free_i->segmap_lock); 1697 return 0; 1698 } 1699 1700 static int build_curseg(struct f2fs_sb_info *sbi) 1701 { 1702 struct curseg_info *array; 1703 int i; 1704 1705 array = kzalloc(sizeof(*array) * NR_CURSEG_TYPE, GFP_KERNEL); 1706 if (!array) 1707 return -ENOMEM; 1708 1709 SM_I(sbi)->curseg_array = array; 1710 1711 for (i = 0; i < NR_CURSEG_TYPE; i++) { 1712 mutex_init(&array[i].curseg_mutex); 1713 array[i].sum_blk = kzalloc(PAGE_CACHE_SIZE, GFP_KERNEL); 1714 if (!array[i].sum_blk) 1715 return -ENOMEM; 1716 array[i].segno = NULL_SEGNO; 1717 array[i].next_blkoff = 0; 1718 } 1719 return restore_curseg_summaries(sbi); 1720 } 1721 1722 static void build_sit_entries(struct f2fs_sb_info *sbi) 1723 { 1724 struct sit_info *sit_i = SIT_I(sbi); 1725 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_COLD_DATA); 1726 struct f2fs_summary_block *sum = curseg->sum_blk; 1727 int sit_blk_cnt = SIT_BLK_CNT(sbi); 1728 unsigned int i, start, end; 1729 unsigned int readed, start_blk = 0; 1730 int nrpages = MAX_BIO_BLOCKS(max_hw_blocks(sbi)); 1731 1732 do { 1733 readed = ra_meta_pages(sbi, start_blk, nrpages, META_SIT); 1734 1735 start = start_blk * sit_i->sents_per_block; 1736 end = (start_blk + readed) * sit_i->sents_per_block; 1737 1738 for (; start < end && start < TOTAL_SEGS(sbi); start++) { 1739 struct seg_entry *se = &sit_i->sentries[start]; 1740 struct f2fs_sit_block *sit_blk; 1741 struct f2fs_sit_entry sit; 1742 struct page *page; 1743 1744 mutex_lock(&curseg->curseg_mutex); 1745 for (i = 0; i < sits_in_cursum(sum); i++) { 1746 if (le32_to_cpu(segno_in_journal(sum, i)) 1747 == start) { 1748 sit = sit_in_journal(sum, i); 1749 mutex_unlock(&curseg->curseg_mutex); 1750 goto got_it; 1751 } 1752 } 1753 mutex_unlock(&curseg->curseg_mutex); 1754 1755 page = get_current_sit_page(sbi, start); 1756 sit_blk = (struct f2fs_sit_block *)page_address(page); 1757 sit = sit_blk->entries[SIT_ENTRY_OFFSET(sit_i, start)]; 1758 f2fs_put_page(page, 1); 1759 got_it: 1760 check_block_count(sbi, start, &sit); 1761 seg_info_from_raw_sit(se, &sit); 1762 if (sbi->segs_per_sec > 1) { 1763 struct sec_entry *e = get_sec_entry(sbi, start); 1764 e->valid_blocks += se->valid_blocks; 1765 } 1766 } 1767 start_blk += readed; 1768 } while (start_blk < sit_blk_cnt); 1769 } 1770 1771 static void init_free_segmap(struct f2fs_sb_info *sbi) 1772 { 1773 unsigned int start; 1774 int type; 1775 1776 for (start = 0; start < TOTAL_SEGS(sbi); start++) { 1777 struct seg_entry *sentry = get_seg_entry(sbi, start); 1778 if (!sentry->valid_blocks) 1779 __set_free(sbi, start); 1780 } 1781 1782 /* set use the current segments */ 1783 for (type = CURSEG_HOT_DATA; type <= CURSEG_COLD_NODE; type++) { 1784 struct curseg_info *curseg_t = CURSEG_I(sbi, type); 1785 __set_test_and_inuse(sbi, curseg_t->segno); 1786 } 1787 } 1788 1789 static void init_dirty_segmap(struct f2fs_sb_info *sbi) 1790 { 1791 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 1792 struct free_segmap_info *free_i = FREE_I(sbi); 1793 unsigned int segno = 0, offset = 0, total_segs = TOTAL_SEGS(sbi); 1794 unsigned short valid_blocks; 1795 1796 while (1) { 1797 /* find dirty segment based on free segmap */ 1798 segno = find_next_inuse(free_i, total_segs, offset); 1799 if (segno >= total_segs) 1800 break; 1801 offset = segno + 1; 1802 valid_blocks = get_valid_blocks(sbi, segno, 0); 1803 if (valid_blocks >= sbi->blocks_per_seg || !valid_blocks) 1804 continue; 1805 mutex_lock(&dirty_i->seglist_lock); 1806 __locate_dirty_segment(sbi, segno, DIRTY); 1807 mutex_unlock(&dirty_i->seglist_lock); 1808 } 1809 } 1810 1811 static int init_victim_secmap(struct f2fs_sb_info *sbi) 1812 { 1813 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 1814 unsigned int bitmap_size = f2fs_bitmap_size(TOTAL_SECS(sbi)); 1815 1816 dirty_i->victim_secmap = kzalloc(bitmap_size, GFP_KERNEL); 1817 if (!dirty_i->victim_secmap) 1818 return -ENOMEM; 1819 return 0; 1820 } 1821 1822 static int build_dirty_segmap(struct f2fs_sb_info *sbi) 1823 { 1824 struct dirty_seglist_info *dirty_i; 1825 unsigned int bitmap_size, i; 1826 1827 /* allocate memory for dirty segments list information */ 1828 dirty_i = kzalloc(sizeof(struct dirty_seglist_info), GFP_KERNEL); 1829 if (!dirty_i) 1830 return -ENOMEM; 1831 1832 SM_I(sbi)->dirty_info = dirty_i; 1833 mutex_init(&dirty_i->seglist_lock); 1834 1835 bitmap_size = f2fs_bitmap_size(TOTAL_SEGS(sbi)); 1836 1837 for (i = 0; i < NR_DIRTY_TYPE; i++) { 1838 dirty_i->dirty_segmap[i] = kzalloc(bitmap_size, GFP_KERNEL); 1839 if (!dirty_i->dirty_segmap[i]) 1840 return -ENOMEM; 1841 } 1842 1843 init_dirty_segmap(sbi); 1844 return init_victim_secmap(sbi); 1845 } 1846 1847 /* 1848 * Update min, max modified time for cost-benefit GC algorithm 1849 */ 1850 static void init_min_max_mtime(struct f2fs_sb_info *sbi) 1851 { 1852 struct sit_info *sit_i = SIT_I(sbi); 1853 unsigned int segno; 1854 1855 mutex_lock(&sit_i->sentry_lock); 1856 1857 sit_i->min_mtime = LLONG_MAX; 1858 1859 for (segno = 0; segno < TOTAL_SEGS(sbi); segno += sbi->segs_per_sec) { 1860 unsigned int i; 1861 unsigned long long mtime = 0; 1862 1863 for (i = 0; i < sbi->segs_per_sec; i++) 1864 mtime += get_seg_entry(sbi, segno + i)->mtime; 1865 1866 mtime = div_u64(mtime, sbi->segs_per_sec); 1867 1868 if (sit_i->min_mtime > mtime) 1869 sit_i->min_mtime = mtime; 1870 } 1871 sit_i->max_mtime = get_mtime(sbi); 1872 mutex_unlock(&sit_i->sentry_lock); 1873 } 1874 1875 int build_segment_manager(struct f2fs_sb_info *sbi) 1876 { 1877 struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi); 1878 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); 1879 struct f2fs_sm_info *sm_info; 1880 int err; 1881 1882 sm_info = kzalloc(sizeof(struct f2fs_sm_info), GFP_KERNEL); 1883 if (!sm_info) 1884 return -ENOMEM; 1885 1886 /* init sm info */ 1887 sbi->sm_info = sm_info; 1888 INIT_LIST_HEAD(&sm_info->wblist_head); 1889 spin_lock_init(&sm_info->wblist_lock); 1890 sm_info->seg0_blkaddr = le32_to_cpu(raw_super->segment0_blkaddr); 1891 sm_info->main_blkaddr = le32_to_cpu(raw_super->main_blkaddr); 1892 sm_info->segment_count = le32_to_cpu(raw_super->segment_count); 1893 sm_info->reserved_segments = le32_to_cpu(ckpt->rsvd_segment_count); 1894 sm_info->ovp_segments = le32_to_cpu(ckpt->overprov_segment_count); 1895 sm_info->main_segments = le32_to_cpu(raw_super->segment_count_main); 1896 sm_info->ssa_blkaddr = le32_to_cpu(raw_super->ssa_blkaddr); 1897 sm_info->rec_prefree_segments = sm_info->main_segments * 1898 DEF_RECLAIM_PREFREE_SEGMENTS / 100; 1899 sm_info->ipu_policy = F2FS_IPU_DISABLE; 1900 sm_info->min_ipu_util = DEF_MIN_IPU_UTIL; 1901 1902 INIT_LIST_HEAD(&sm_info->discard_list); 1903 sm_info->nr_discards = 0; 1904 sm_info->max_discards = 0; 1905 1906 if (test_opt(sbi, FLUSH_MERGE) && !f2fs_readonly(sbi->sb)) { 1907 err = create_flush_cmd_control(sbi); 1908 if (err) 1909 return err; 1910 } 1911 1912 err = build_sit_info(sbi); 1913 if (err) 1914 return err; 1915 err = build_free_segmap(sbi); 1916 if (err) 1917 return err; 1918 err = build_curseg(sbi); 1919 if (err) 1920 return err; 1921 1922 /* reinit free segmap based on SIT */ 1923 build_sit_entries(sbi); 1924 1925 init_free_segmap(sbi); 1926 err = build_dirty_segmap(sbi); 1927 if (err) 1928 return err; 1929 1930 init_min_max_mtime(sbi); 1931 return 0; 1932 } 1933 1934 static void discard_dirty_segmap(struct f2fs_sb_info *sbi, 1935 enum dirty_type dirty_type) 1936 { 1937 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 1938 1939 mutex_lock(&dirty_i->seglist_lock); 1940 kfree(dirty_i->dirty_segmap[dirty_type]); 1941 dirty_i->nr_dirty[dirty_type] = 0; 1942 mutex_unlock(&dirty_i->seglist_lock); 1943 } 1944 1945 static void destroy_victim_secmap(struct f2fs_sb_info *sbi) 1946 { 1947 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 1948 kfree(dirty_i->victim_secmap); 1949 } 1950 1951 static void destroy_dirty_segmap(struct f2fs_sb_info *sbi) 1952 { 1953 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); 1954 int i; 1955 1956 if (!dirty_i) 1957 return; 1958 1959 /* discard pre-free/dirty segments list */ 1960 for (i = 0; i < NR_DIRTY_TYPE; i++) 1961 discard_dirty_segmap(sbi, i); 1962 1963 destroy_victim_secmap(sbi); 1964 SM_I(sbi)->dirty_info = NULL; 1965 kfree(dirty_i); 1966 } 1967 1968 static void destroy_curseg(struct f2fs_sb_info *sbi) 1969 { 1970 struct curseg_info *array = SM_I(sbi)->curseg_array; 1971 int i; 1972 1973 if (!array) 1974 return; 1975 SM_I(sbi)->curseg_array = NULL; 1976 for (i = 0; i < NR_CURSEG_TYPE; i++) 1977 kfree(array[i].sum_blk); 1978 kfree(array); 1979 } 1980 1981 static void destroy_free_segmap(struct f2fs_sb_info *sbi) 1982 { 1983 struct free_segmap_info *free_i = SM_I(sbi)->free_info; 1984 if (!free_i) 1985 return; 1986 SM_I(sbi)->free_info = NULL; 1987 kfree(free_i->free_segmap); 1988 kfree(free_i->free_secmap); 1989 kfree(free_i); 1990 } 1991 1992 static void destroy_sit_info(struct f2fs_sb_info *sbi) 1993 { 1994 struct sit_info *sit_i = SIT_I(sbi); 1995 unsigned int start; 1996 1997 if (!sit_i) 1998 return; 1999 2000 if (sit_i->sentries) { 2001 for (start = 0; start < TOTAL_SEGS(sbi); start++) { 2002 kfree(sit_i->sentries[start].cur_valid_map); 2003 kfree(sit_i->sentries[start].ckpt_valid_map); 2004 } 2005 } 2006 vfree(sit_i->sentries); 2007 vfree(sit_i->sec_entries); 2008 kfree(sit_i->dirty_sentries_bitmap); 2009 2010 SM_I(sbi)->sit_info = NULL; 2011 kfree(sit_i->sit_bitmap); 2012 kfree(sit_i); 2013 } 2014 2015 void destroy_segment_manager(struct f2fs_sb_info *sbi) 2016 { 2017 struct f2fs_sm_info *sm_info = SM_I(sbi); 2018 2019 if (!sm_info) 2020 return; 2021 destroy_flush_cmd_control(sbi); 2022 destroy_dirty_segmap(sbi); 2023 destroy_curseg(sbi); 2024 destroy_free_segmap(sbi); 2025 destroy_sit_info(sbi); 2026 sbi->sm_info = NULL; 2027 kfree(sm_info); 2028 } 2029 2030 int __init create_segment_manager_caches(void) 2031 { 2032 discard_entry_slab = f2fs_kmem_cache_create("discard_entry", 2033 sizeof(struct discard_entry)); 2034 if (!discard_entry_slab) 2035 return -ENOMEM; 2036 return 0; 2037 } 2038 2039 void destroy_segment_manager_caches(void) 2040 { 2041 kmem_cache_destroy(discard_entry_slab); 2042 } 2043