1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * fs/f2fs/node.c 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 */ 8 #include <linux/fs.h> 9 #include <linux/f2fs_fs.h> 10 #include <linux/mpage.h> 11 #include <linux/sched/mm.h> 12 #include <linux/blkdev.h> 13 #include <linux/folio_batch.h> 14 #include <linux/swap.h> 15 #include <linux/fserror.h> 16 17 #include "f2fs.h" 18 #include "node.h" 19 #include "segment.h" 20 #include "xattr.h" 21 #include "iostat.h" 22 #include <trace/events/f2fs.h> 23 24 #define on_f2fs_build_free_nids(nm_i) mutex_is_locked(&(nm_i)->build_lock) 25 26 static struct kmem_cache *nat_entry_slab; 27 static struct kmem_cache *free_nid_slab; 28 static struct kmem_cache *nat_entry_set_slab; 29 static struct kmem_cache *fsync_node_entry_slab; 30 31 static inline bool is_invalid_nid(struct f2fs_sb_info *sbi, nid_t nid) 32 { 33 return nid < F2FS_ROOT_INO(sbi) || nid >= NM_I(sbi)->max_nid; 34 } 35 36 /* 37 * Check whether the given nid is within node id range. 38 */ 39 int f2fs_check_nid_range(struct f2fs_sb_info *sbi, nid_t nid) 40 { 41 if (unlikely(is_invalid_nid(sbi, nid))) { 42 set_sbi_flag(sbi, SBI_NEED_FSCK); 43 f2fs_warn(sbi, "%s: out-of-range nid=%x, run fsck to fix.", 44 __func__, nid); 45 f2fs_handle_error(sbi, ERROR_CORRUPTED_INODE); 46 return -EFSCORRUPTED; 47 } 48 return 0; 49 } 50 51 bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type) 52 { 53 struct f2fs_nm_info *nm_i = NM_I(sbi); 54 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; 55 struct sysinfo val; 56 unsigned long avail_ram; 57 unsigned long mem_size = 0; 58 bool res = false; 59 60 if (!nm_i) 61 return true; 62 63 si_meminfo(&val); 64 65 /* only uses low memory */ 66 avail_ram = val.totalram - val.totalhigh; 67 68 /* 69 * give 25%, 25%, 50%, 50%, 25%, 25% memory for each components respectively 70 */ 71 if (type == FREE_NIDS) { 72 mem_size = (nm_i->nid_cnt[FREE_NID] * 73 sizeof(struct free_nid)) >> PAGE_SHIFT; 74 res = mem_size < ((avail_ram * nm_i->ram_thresh / 100) >> 2); 75 } else if (type == NAT_ENTRIES) { 76 /* 77 * nat_cnt[] is heuristic accounting. Sample it locklessly here 78 * to avoid taking nat_tree_lock in the balance path. 79 */ 80 mem_size = (data_race(READ_ONCE(nm_i->nat_cnt[TOTAL_NAT])) * 81 sizeof(struct nat_entry)) >> PAGE_SHIFT; 82 res = mem_size < ((avail_ram * nm_i->ram_thresh / 100) >> 2); 83 if (excess_cached_nats(sbi)) 84 res = false; 85 } else if (type == DIRTY_DENTS) { 86 if (bdi_wb_dirty_exceeded(sbi->sb->s_bdi)) 87 return false; 88 mem_size = get_pages(sbi, F2FS_DIRTY_DENTS); 89 res = mem_size < ((avail_ram * nm_i->ram_thresh / 100) >> 1); 90 } else if (type == INO_ENTRIES) { 91 int i; 92 93 for (i = 0; i < MAX_INO_ENTRY; i++) 94 mem_size += sbi->im[i].ino_num * 95 sizeof(struct ino_entry); 96 mem_size >>= PAGE_SHIFT; 97 res = mem_size < ((avail_ram * nm_i->ram_thresh / 100) >> 1); 98 } else if (type == READ_EXTENT_CACHE || type == AGE_EXTENT_CACHE) { 99 enum extent_type etype = type == READ_EXTENT_CACHE ? 100 EX_READ : EX_BLOCK_AGE; 101 struct extent_tree_info *eti = &sbi->extent_tree[etype]; 102 103 mem_size = (atomic_read(&eti->total_ext_tree) * 104 sizeof(struct extent_tree) + 105 atomic_read(&eti->total_ext_node) * 106 sizeof(struct extent_node)) >> PAGE_SHIFT; 107 res = mem_size < ((avail_ram * nm_i->ram_thresh / 100) >> 2); 108 } else if (type == DISCARD_CACHE) { 109 mem_size = (atomic_read(&dcc->discard_cmd_cnt) * 110 sizeof(struct discard_cmd)) >> PAGE_SHIFT; 111 res = mem_size < (avail_ram * nm_i->ram_thresh / 100); 112 } else if (type == COMPRESS_PAGE) { 113 #ifdef CONFIG_F2FS_FS_COMPRESSION 114 unsigned long free_ram = val.freeram; 115 116 /* 117 * free memory is lower than watermark or cached page count 118 * exceed threshold, deny caching compress page. 119 */ 120 res = (free_ram > avail_ram * sbi->compress_watermark / 100) && 121 (COMPRESS_MAPPING(sbi)->nrpages < 122 free_ram * sbi->compress_percent / 100); 123 #else 124 res = false; 125 #endif 126 } else { 127 if (!bdi_wb_dirty_exceeded(sbi->sb->s_bdi)) 128 return true; 129 } 130 return res; 131 } 132 133 static void clear_node_folio_dirty(struct folio *folio) 134 { 135 if (folio_test_dirty(folio)) { 136 f2fs_clear_page_cache_dirty_tag(folio); 137 folio_clear_dirty_for_io(folio); 138 dec_page_count(F2FS_F_SB(folio), F2FS_DIRTY_NODES); 139 } 140 folio_clear_uptodate(folio); 141 } 142 143 static struct folio *get_current_nat_folio(struct f2fs_sb_info *sbi, nid_t nid) 144 { 145 return f2fs_get_meta_folio_retry(sbi, current_nat_addr(sbi, nid)); 146 } 147 148 static struct folio *get_next_nat_folio(struct f2fs_sb_info *sbi, nid_t nid) 149 { 150 struct folio *src_folio; 151 struct folio *dst_folio; 152 pgoff_t dst_off; 153 void *src_addr; 154 void *dst_addr; 155 struct f2fs_nm_info *nm_i = NM_I(sbi); 156 157 dst_off = next_nat_addr(sbi, current_nat_addr(sbi, nid)); 158 159 /* get current nat block page with lock */ 160 src_folio = get_current_nat_folio(sbi, nid); 161 if (IS_ERR(src_folio)) 162 return src_folio; 163 dst_folio = f2fs_grab_meta_folio(sbi, dst_off); 164 f2fs_bug_on(sbi, folio_test_dirty(src_folio)); 165 166 src_addr = folio_address(src_folio); 167 dst_addr = folio_address(dst_folio); 168 memcpy(dst_addr, src_addr, PAGE_SIZE); 169 folio_mark_dirty(dst_folio); 170 f2fs_folio_put(src_folio, true); 171 172 set_to_next_nat(nm_i, nid); 173 174 return dst_folio; 175 } 176 177 static struct nat_entry *__alloc_nat_entry(struct f2fs_sb_info *sbi, 178 nid_t nid, bool no_fail) 179 { 180 struct nat_entry *new; 181 182 new = f2fs_kmem_cache_alloc(nat_entry_slab, 183 GFP_F2FS_ZERO, no_fail, sbi); 184 if (new) { 185 nat_set_nid(new, nid); 186 nat_reset_flag(new); 187 } 188 return new; 189 } 190 191 static void __free_nat_entry(struct nat_entry *e) 192 { 193 kmem_cache_free(nat_entry_slab, e); 194 } 195 196 /* must be locked by nat_tree_lock */ 197 static struct nat_entry *__init_nat_entry(struct f2fs_nm_info *nm_i, 198 struct nat_entry *ne, struct f2fs_nat_entry *raw_ne, bool no_fail, bool init_dirty) 199 { 200 if (no_fail) 201 f2fs_radix_tree_insert(&nm_i->nat_root, nat_get_nid(ne), ne); 202 else if (radix_tree_insert(&nm_i->nat_root, nat_get_nid(ne), ne)) 203 return NULL; 204 205 if (raw_ne) 206 node_info_from_raw_nat(&ne->ni, raw_ne); 207 208 if (init_dirty) { 209 INIT_LIST_HEAD(&ne->list); 210 nm_i->nat_cnt[TOTAL_NAT]++; 211 return ne; 212 } 213 214 spin_lock(&nm_i->nat_list_lock); 215 list_add_tail(&ne->list, &nm_i->nat_entries); 216 spin_unlock(&nm_i->nat_list_lock); 217 218 nm_i->nat_cnt[TOTAL_NAT]++; 219 nm_i->nat_cnt[RECLAIMABLE_NAT]++; 220 return ne; 221 } 222 223 static struct nat_entry *__lookup_nat_cache(struct f2fs_nm_info *nm_i, nid_t n, bool for_dirty) 224 { 225 struct nat_entry *ne; 226 227 ne = radix_tree_lookup(&nm_i->nat_root, n); 228 229 /* 230 * for recent accessed nat entry which will not be dirtied soon 231 * later, move it to tail of lru list. 232 */ 233 if (ne && !get_nat_flag(ne, IS_DIRTY) && !for_dirty) { 234 spin_lock(&nm_i->nat_list_lock); 235 if (!list_empty(&ne->list)) 236 list_move_tail(&ne->list, &nm_i->nat_entries); 237 spin_unlock(&nm_i->nat_list_lock); 238 } 239 240 return ne; 241 } 242 243 static unsigned int __gang_lookup_nat_cache(struct f2fs_nm_info *nm_i, 244 nid_t start, unsigned int nr, struct nat_entry **ep) 245 { 246 return radix_tree_gang_lookup(&nm_i->nat_root, (void **)ep, start, nr); 247 } 248 249 static void __del_from_nat_cache(struct f2fs_nm_info *nm_i, struct nat_entry *e) 250 { 251 radix_tree_delete(&nm_i->nat_root, nat_get_nid(e)); 252 nm_i->nat_cnt[TOTAL_NAT]--; 253 nm_i->nat_cnt[RECLAIMABLE_NAT]--; 254 __free_nat_entry(e); 255 } 256 257 static struct nat_entry_set *__grab_nat_entry_set(struct f2fs_nm_info *nm_i, 258 struct nat_entry *ne) 259 { 260 nid_t set = NAT_BLOCK_OFFSET(ne->ni.nid); 261 struct nat_entry_set *head; 262 263 head = radix_tree_lookup(&nm_i->nat_set_root, set); 264 if (!head) { 265 head = f2fs_kmem_cache_alloc(nat_entry_set_slab, 266 GFP_NOFS, true, NULL); 267 268 INIT_LIST_HEAD(&head->entry_list); 269 INIT_LIST_HEAD(&head->set_list); 270 head->set = set; 271 head->entry_cnt = 0; 272 f2fs_radix_tree_insert(&nm_i->nat_set_root, set, head); 273 } 274 return head; 275 } 276 277 static void __set_nat_cache_dirty(struct f2fs_nm_info *nm_i, 278 struct nat_entry *ne, bool init_dirty) 279 { 280 struct nat_entry_set *head; 281 bool new_ne = nat_get_blkaddr(ne) == NEW_ADDR; 282 283 if (!new_ne) 284 head = __grab_nat_entry_set(nm_i, ne); 285 286 /* 287 * update entry_cnt in below condition: 288 * 1. update NEW_ADDR to valid block address; 289 * 2. update old block address to new one; 290 */ 291 if (!new_ne && (get_nat_flag(ne, IS_PREALLOC) || 292 !get_nat_flag(ne, IS_DIRTY))) 293 head->entry_cnt++; 294 295 set_nat_flag(ne, IS_PREALLOC, new_ne); 296 297 if (get_nat_flag(ne, IS_DIRTY)) 298 goto refresh_list; 299 300 nm_i->nat_cnt[DIRTY_NAT]++; 301 if (!init_dirty) 302 nm_i->nat_cnt[RECLAIMABLE_NAT]--; 303 set_nat_flag(ne, IS_DIRTY, true); 304 refresh_list: 305 spin_lock(&nm_i->nat_list_lock); 306 if (new_ne) 307 list_del_init(&ne->list); 308 else 309 list_move_tail(&ne->list, &head->entry_list); 310 spin_unlock(&nm_i->nat_list_lock); 311 } 312 313 static void __clear_nat_cache_dirty(struct f2fs_nm_info *nm_i, 314 struct nat_entry_set *set, struct nat_entry *ne) 315 { 316 spin_lock(&nm_i->nat_list_lock); 317 list_move_tail(&ne->list, &nm_i->nat_entries); 318 spin_unlock(&nm_i->nat_list_lock); 319 320 set_nat_flag(ne, IS_DIRTY, false); 321 set->entry_cnt--; 322 nm_i->nat_cnt[DIRTY_NAT]--; 323 nm_i->nat_cnt[RECLAIMABLE_NAT]++; 324 } 325 326 static unsigned int __gang_lookup_nat_set(struct f2fs_nm_info *nm_i, 327 nid_t start, unsigned int nr, struct nat_entry_set **ep) 328 { 329 return radix_tree_gang_lookup(&nm_i->nat_set_root, (void **)ep, 330 start, nr); 331 } 332 333 bool f2fs_in_warm_node_list(struct folio *folio) 334 { 335 return is_node_folio(folio) && IS_DNODE(folio) && is_cold_node(folio); 336 } 337 338 void f2fs_init_fsync_node_info(struct f2fs_sb_info *sbi) 339 { 340 spin_lock_init(&sbi->fsync_node_lock); 341 INIT_LIST_HEAD(&sbi->fsync_node_list); 342 sbi->fsync_seg_id = 0; 343 sbi->fsync_node_num = 0; 344 } 345 346 static unsigned int f2fs_add_fsync_node_entry(struct f2fs_sb_info *sbi, 347 struct folio *folio) 348 { 349 struct fsync_node_entry *fn; 350 unsigned long flags; 351 unsigned int seq_id; 352 353 fn = f2fs_kmem_cache_alloc(fsync_node_entry_slab, 354 GFP_NOFS, true, NULL); 355 356 folio_get(folio); 357 fn->folio = folio; 358 INIT_LIST_HEAD(&fn->list); 359 360 spin_lock_irqsave(&sbi->fsync_node_lock, flags); 361 list_add_tail(&fn->list, &sbi->fsync_node_list); 362 fn->seq_id = sbi->fsync_seg_id++; 363 seq_id = fn->seq_id; 364 sbi->fsync_node_num++; 365 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); 366 367 return seq_id; 368 } 369 370 void f2fs_del_fsync_node_entry(struct f2fs_sb_info *sbi, struct folio *folio) 371 { 372 struct fsync_node_entry *fn; 373 unsigned long flags; 374 375 spin_lock_irqsave(&sbi->fsync_node_lock, flags); 376 list_for_each_entry(fn, &sbi->fsync_node_list, list) { 377 if (fn->folio == folio) { 378 list_del(&fn->list); 379 sbi->fsync_node_num--; 380 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); 381 kmem_cache_free(fsync_node_entry_slab, fn); 382 folio_put(folio); 383 return; 384 } 385 } 386 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); 387 f2fs_bug_on(sbi, 1); 388 } 389 390 void f2fs_reset_fsync_node_info(struct f2fs_sb_info *sbi) 391 { 392 unsigned long flags; 393 394 spin_lock_irqsave(&sbi->fsync_node_lock, flags); 395 sbi->fsync_seg_id = 0; 396 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); 397 } 398 399 bool f2fs_need_dentry_mark(struct f2fs_sb_info *sbi, nid_t nid) 400 { 401 struct f2fs_nm_info *nm_i = NM_I(sbi); 402 struct nat_entry *e; 403 bool need = false; 404 405 f2fs_down_read(&nm_i->nat_tree_lock); 406 e = __lookup_nat_cache(nm_i, nid, false); 407 if (e) { 408 if (!get_nat_flag(e, IS_CHECKPOINTED) && 409 !get_nat_flag(e, HAS_FSYNCED_INODE)) 410 need = true; 411 } 412 f2fs_up_read(&nm_i->nat_tree_lock); 413 return need; 414 } 415 416 bool f2fs_is_checkpointed_node(struct f2fs_sb_info *sbi, nid_t nid) 417 { 418 struct f2fs_nm_info *nm_i = NM_I(sbi); 419 struct nat_entry *e; 420 bool is_cp = true; 421 422 f2fs_down_read(&nm_i->nat_tree_lock); 423 e = __lookup_nat_cache(nm_i, nid, false); 424 if (e && !get_nat_flag(e, IS_CHECKPOINTED)) 425 is_cp = false; 426 f2fs_up_read(&nm_i->nat_tree_lock); 427 return is_cp; 428 } 429 430 bool f2fs_need_inode_block_update(struct f2fs_sb_info *sbi, nid_t ino) 431 { 432 struct f2fs_nm_info *nm_i = NM_I(sbi); 433 struct nat_entry *e; 434 bool need_update = true; 435 struct f2fs_lock_context lc; 436 437 f2fs_down_read_trace(&sbi->node_write, &lc); 438 f2fs_down_read(&nm_i->nat_tree_lock); 439 e = __lookup_nat_cache(nm_i, ino, false); 440 if (e && get_nat_flag(e, HAS_LAST_FSYNC) && 441 (get_nat_flag(e, IS_CHECKPOINTED) || 442 get_nat_flag(e, HAS_FSYNCED_INODE))) 443 need_update = false; 444 f2fs_up_read(&nm_i->nat_tree_lock); 445 f2fs_up_read_trace(&sbi->node_write, &lc); 446 return need_update; 447 } 448 449 /* must be locked by nat_tree_lock */ 450 static void cache_nat_entry(struct f2fs_sb_info *sbi, nid_t nid, 451 struct f2fs_nat_entry *ne) 452 { 453 struct f2fs_nm_info *nm_i = NM_I(sbi); 454 struct nat_entry *new, *e; 455 456 /* Let's mitigate lock contention of nat_tree_lock during checkpoint */ 457 if (f2fs_rwsem_is_locked(&sbi->cp_global_sem)) 458 return; 459 460 new = __alloc_nat_entry(sbi, nid, false); 461 if (!new) 462 return; 463 464 f2fs_down_write(&nm_i->nat_tree_lock); 465 e = __lookup_nat_cache(nm_i, nid, false); 466 if (!e) 467 e = __init_nat_entry(nm_i, new, ne, false, false); 468 else 469 f2fs_bug_on(sbi, nat_get_ino(e) != le32_to_cpu(ne->ino) || 470 nat_get_blkaddr(e) != 471 le32_to_cpu(ne->block_addr) || 472 nat_get_version(e) != ne->version); 473 f2fs_up_write(&nm_i->nat_tree_lock); 474 if (e != new) 475 __free_nat_entry(new); 476 } 477 478 static void set_node_addr(struct f2fs_sb_info *sbi, struct node_info *ni, 479 block_t new_blkaddr, bool fsync_done) 480 { 481 struct f2fs_nm_info *nm_i = NM_I(sbi); 482 struct nat_entry *e; 483 struct nat_entry *new = __alloc_nat_entry(sbi, ni->nid, true); 484 bool init_dirty = false; 485 486 f2fs_down_write(&nm_i->nat_tree_lock); 487 e = __lookup_nat_cache(nm_i, ni->nid, true); 488 if (!e) { 489 init_dirty = true; 490 e = __init_nat_entry(nm_i, new, NULL, true, true); 491 copy_node_info(&e->ni, ni); 492 f2fs_bug_on(sbi, ni->blk_addr == NEW_ADDR); 493 } else if (new_blkaddr == NEW_ADDR) { 494 /* 495 * when nid is reallocated, 496 * previous nat entry can be remained in nat cache. 497 * So, reinitialize it with new information. 498 */ 499 copy_node_info(&e->ni, ni); 500 f2fs_bug_on(sbi, ni->blk_addr != NULL_ADDR); 501 } 502 /* let's free early to reduce memory consumption */ 503 if (e != new) 504 __free_nat_entry(new); 505 506 /* sanity check */ 507 f2fs_bug_on(sbi, nat_get_blkaddr(e) != ni->blk_addr); 508 f2fs_bug_on(sbi, nat_get_blkaddr(e) == NULL_ADDR && 509 new_blkaddr == NULL_ADDR); 510 f2fs_bug_on(sbi, nat_get_blkaddr(e) == NEW_ADDR && 511 new_blkaddr == NEW_ADDR); 512 f2fs_bug_on(sbi, __is_valid_data_blkaddr(nat_get_blkaddr(e)) && 513 new_blkaddr == NEW_ADDR); 514 515 /* increment version no as node is removed */ 516 if (nat_get_blkaddr(e) != NEW_ADDR && new_blkaddr == NULL_ADDR) { 517 unsigned char version = nat_get_version(e); 518 519 nat_set_version(e, inc_node_version(version)); 520 } 521 522 /* change address */ 523 nat_set_blkaddr(e, new_blkaddr); 524 if (!__is_valid_data_blkaddr(new_blkaddr)) 525 set_nat_flag(e, IS_CHECKPOINTED, false); 526 __set_nat_cache_dirty(nm_i, e, init_dirty); 527 528 /* update fsync_mark if its inode nat entry is still alive */ 529 if (ni->nid != ni->ino) 530 e = __lookup_nat_cache(nm_i, ni->ino, false); 531 if (e) { 532 if (fsync_done && ni->nid == ni->ino) 533 set_nat_flag(e, HAS_FSYNCED_INODE, true); 534 set_nat_flag(e, HAS_LAST_FSYNC, fsync_done); 535 } 536 f2fs_up_write(&nm_i->nat_tree_lock); 537 } 538 539 int f2fs_try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink) 540 { 541 struct f2fs_nm_info *nm_i = NM_I(sbi); 542 int nr = nr_shrink; 543 544 if (!f2fs_down_write_trylock(&nm_i->nat_tree_lock)) 545 return 0; 546 547 spin_lock(&nm_i->nat_list_lock); 548 while (nr_shrink) { 549 struct nat_entry *ne; 550 551 if (list_empty(&nm_i->nat_entries)) 552 break; 553 554 ne = list_first_entry(&nm_i->nat_entries, 555 struct nat_entry, list); 556 list_del(&ne->list); 557 spin_unlock(&nm_i->nat_list_lock); 558 559 __del_from_nat_cache(nm_i, ne); 560 nr_shrink--; 561 562 spin_lock(&nm_i->nat_list_lock); 563 } 564 spin_unlock(&nm_i->nat_list_lock); 565 566 f2fs_up_write(&nm_i->nat_tree_lock); 567 return nr - nr_shrink; 568 } 569 570 int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid, 571 struct node_info *ni, bool checkpoint_context) 572 { 573 struct f2fs_nm_info *nm_i = NM_I(sbi); 574 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); 575 struct f2fs_journal *journal = curseg->journal; 576 nid_t start_nid = START_NID(nid); 577 struct f2fs_nat_block *nat_blk; 578 struct folio *folio = NULL; 579 struct f2fs_nat_entry ne; 580 struct nat_entry *e; 581 pgoff_t index; 582 int i; 583 bool need_cache = true; 584 585 ni->flag = 0; 586 ni->nid = nid; 587 retry: 588 /* Check nat cache */ 589 f2fs_down_read(&nm_i->nat_tree_lock); 590 e = __lookup_nat_cache(nm_i, nid, false); 591 if (e) { 592 ni->ino = nat_get_ino(e); 593 ni->blk_addr = nat_get_blkaddr(e); 594 ni->version = nat_get_version(e); 595 f2fs_up_read(&nm_i->nat_tree_lock); 596 if (IS_ENABLED(CONFIG_F2FS_CHECK_FS)) { 597 need_cache = false; 598 goto sanity_check; 599 } 600 return 0; 601 } 602 603 /* 604 * Check current segment summary by trying to grab journal_rwsem first. 605 * This sem is on the critical path on the checkpoint requiring the above 606 * nat_tree_lock. Therefore, we should retry, if we failed to grab here 607 * while not bothering checkpoint. 608 */ 609 if (!f2fs_rwsem_is_locked(&sbi->cp_global_sem) || checkpoint_context) { 610 down_read(&curseg->journal_rwsem); 611 } else if (f2fs_rwsem_is_contended(&nm_i->nat_tree_lock) || 612 !down_read_trylock(&curseg->journal_rwsem)) { 613 f2fs_up_read(&nm_i->nat_tree_lock); 614 goto retry; 615 } 616 617 i = f2fs_lookup_journal_in_cursum(sbi, journal, NAT_JOURNAL, nid, 0); 618 if (i >= 0) { 619 ne = nat_in_journal(journal, i); 620 node_info_from_raw_nat(ni, &ne); 621 } 622 up_read(&curseg->journal_rwsem); 623 if (i >= 0) { 624 f2fs_up_read(&nm_i->nat_tree_lock); 625 goto sanity_check; 626 } 627 628 /* Fill node_info from nat page */ 629 index = current_nat_addr(sbi, nid); 630 f2fs_up_read(&nm_i->nat_tree_lock); 631 632 folio = f2fs_get_meta_folio(sbi, index); 633 if (IS_ERR(folio)) 634 return PTR_ERR(folio); 635 636 nat_blk = folio_address(folio); 637 ne = nat_blk->entries[nid - start_nid]; 638 node_info_from_raw_nat(ni, &ne); 639 f2fs_folio_put(folio, true); 640 sanity_check: 641 if (__is_valid_data_blkaddr(ni->blk_addr) && 642 !f2fs_is_valid_blkaddr(sbi, ni->blk_addr, 643 DATA_GENERIC_ENHANCE)) { 644 set_sbi_flag(sbi, SBI_NEED_FSCK); 645 f2fs_err_ratelimited(sbi, 646 "f2fs_get_node_info of %pS: inconsistent nat entry, " 647 "ino:%u, nid:%u, blkaddr:%u, ver:%u, flag:%u", 648 __builtin_return_address(0), 649 ni->ino, ni->nid, ni->blk_addr, ni->version, ni->flag); 650 f2fs_handle_error(sbi, ERROR_INCONSISTENT_NAT); 651 return -EFSCORRUPTED; 652 } 653 654 if (unlikely(f2fs_quota_file(sbi, ni->nid) && 655 !__is_valid_data_blkaddr(ni->blk_addr))) { 656 set_sbi_flag(sbi, SBI_NEED_FSCK); 657 f2fs_err_ratelimited(sbi, 658 "f2fs_get_node_info of %pS: inconsistent nat entry from qf_ino, " 659 "ino:%u, nid:%u, blkaddr:%u, ver:%u, flag:%u", 660 __builtin_return_address(0), 661 ni->ino, ni->nid, ni->blk_addr, ni->version, ni->flag); 662 f2fs_handle_error(sbi, ERROR_INCONSISTENT_NAT); 663 } 664 665 /* cache nat entry */ 666 if (need_cache) 667 cache_nat_entry(sbi, nid, &ne); 668 return 0; 669 } 670 671 /* 672 * readahead MAX_RA_NODE number of node pages. 673 */ 674 static void f2fs_ra_node_pages(struct folio *parent, int start, int n) 675 { 676 struct f2fs_sb_info *sbi = F2FS_F_SB(parent); 677 struct blk_plug plug; 678 int i, end; 679 nid_t nid; 680 681 blk_start_plug(&plug); 682 683 /* Then, try readahead for siblings of the desired node */ 684 end = start + n; 685 end = min(end, (int)NIDS_PER_BLOCK); 686 for (i = start; i < end; i++) { 687 nid = get_nid(parent, i, false); 688 f2fs_ra_node_page(sbi, nid); 689 } 690 691 blk_finish_plug(&plug); 692 } 693 694 pgoff_t f2fs_get_next_page_offset(struct dnode_of_data *dn, pgoff_t pgofs) 695 { 696 const long direct_index = ADDRS_PER_INODE(dn->inode); 697 const long direct_blks = ADDRS_PER_BLOCK(dn->inode); 698 const long indirect_blks = ADDRS_PER_BLOCK(dn->inode) * NIDS_PER_BLOCK; 699 unsigned int skipped_unit = ADDRS_PER_BLOCK(dn->inode); 700 int cur_level = dn->cur_level; 701 int max_level = dn->max_level; 702 pgoff_t base = 0; 703 704 if (!dn->max_level) 705 return pgofs + 1; 706 707 while (max_level-- > cur_level) 708 skipped_unit *= NIDS_PER_BLOCK; 709 710 switch (dn->max_level) { 711 case 3: 712 base += 2 * indirect_blks; 713 fallthrough; 714 case 2: 715 base += 2 * direct_blks; 716 fallthrough; 717 case 1: 718 base += direct_index; 719 break; 720 default: 721 f2fs_bug_on(F2FS_I_SB(dn->inode), 1); 722 } 723 724 return ((pgofs - base) / skipped_unit + 1) * skipped_unit + base; 725 } 726 727 /* 728 * The maximum depth is four. 729 * Offset[0] will have raw inode offset. 730 */ 731 static int get_node_path(struct inode *inode, long block, 732 int offset[4], unsigned int noffset[4]) 733 { 734 const long direct_index = ADDRS_PER_INODE(inode); 735 const long direct_blks = ADDRS_PER_BLOCK(inode); 736 const long dptrs_per_blk = NIDS_PER_BLOCK; 737 const long indirect_blks = ADDRS_PER_BLOCK(inode) * NIDS_PER_BLOCK; 738 const long dindirect_blks = indirect_blks * NIDS_PER_BLOCK; 739 int n = 0; 740 int level = 0; 741 742 noffset[0] = 0; 743 744 if (block < direct_index) { 745 offset[n] = block; 746 goto got; 747 } 748 block -= direct_index; 749 if (block < direct_blks) { 750 offset[n++] = NODE_DIR1_BLOCK; 751 noffset[n] = 1; 752 offset[n] = block; 753 level = 1; 754 goto got; 755 } 756 block -= direct_blks; 757 if (block < direct_blks) { 758 offset[n++] = NODE_DIR2_BLOCK; 759 noffset[n] = 2; 760 offset[n] = block; 761 level = 1; 762 goto got; 763 } 764 block -= direct_blks; 765 if (block < indirect_blks) { 766 offset[n++] = NODE_IND1_BLOCK; 767 noffset[n] = 3; 768 offset[n++] = block / direct_blks; 769 noffset[n] = 4 + offset[n - 1]; 770 offset[n] = block % direct_blks; 771 level = 2; 772 goto got; 773 } 774 block -= indirect_blks; 775 if (block < indirect_blks) { 776 offset[n++] = NODE_IND2_BLOCK; 777 noffset[n] = 4 + dptrs_per_blk; 778 offset[n++] = block / direct_blks; 779 noffset[n] = 5 + dptrs_per_blk + offset[n - 1]; 780 offset[n] = block % direct_blks; 781 level = 2; 782 goto got; 783 } 784 block -= indirect_blks; 785 if (block < dindirect_blks) { 786 offset[n++] = NODE_DIND_BLOCK; 787 noffset[n] = 5 + (dptrs_per_blk * 2); 788 offset[n++] = block / indirect_blks; 789 noffset[n] = 6 + (dptrs_per_blk * 2) + 790 offset[n - 1] * (dptrs_per_blk + 1); 791 offset[n++] = (block / direct_blks) % dptrs_per_blk; 792 noffset[n] = 7 + (dptrs_per_blk * 2) + 793 offset[n - 2] * (dptrs_per_blk + 1) + 794 offset[n - 1]; 795 offset[n] = block % direct_blks; 796 level = 3; 797 goto got; 798 } else { 799 return -E2BIG; 800 } 801 got: 802 return level; 803 } 804 805 static struct folio *f2fs_get_node_folio_ra(struct folio *parent, int start); 806 807 /* 808 * Caller should call f2fs_put_dnode(dn). 809 * Also, it should grab and release a rwsem by calling f2fs_lock_op() and 810 * f2fs_unlock_op() only if mode is set with ALLOC_NODE. 811 */ 812 int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode) 813 { 814 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); 815 struct folio *nfolio[4]; 816 struct folio *parent = NULL; 817 int offset[4]; 818 unsigned int noffset[4]; 819 nid_t nids[4]; 820 int level, i = 0; 821 int err = 0; 822 823 level = get_node_path(dn->inode, index, offset, noffset); 824 if (level < 0) 825 return level; 826 827 nids[0] = dn->inode->i_ino; 828 829 if (!dn->inode_folio) { 830 nfolio[0] = f2fs_get_inode_folio(sbi, nids[0]); 831 if (IS_ERR(nfolio[0])) 832 return PTR_ERR(nfolio[0]); 833 } else { 834 nfolio[0] = dn->inode_folio; 835 } 836 837 /* if inline_data is set, should not report any block indices */ 838 if (f2fs_has_inline_data(dn->inode) && index) { 839 err = -ENOENT; 840 f2fs_folio_put(nfolio[0], true); 841 goto release_out; 842 } 843 844 parent = nfolio[0]; 845 if (level != 0) 846 nids[1] = get_nid(parent, offset[0], true); 847 dn->inode_folio = nfolio[0]; 848 dn->inode_folio_locked = true; 849 850 /* get indirect or direct nodes */ 851 for (i = 1; i <= level; i++) { 852 bool done = false; 853 854 if (nids[i] && nids[i] == dn->inode->i_ino) { 855 err = -EFSCORRUPTED; 856 f2fs_err_ratelimited(sbi, 857 "inode mapping table is corrupted, run fsck to fix it, " 858 "ino:%llu, nid:%u, level:%d, offset:%d", 859 dn->inode->i_ino, nids[i], level, offset[level]); 860 set_sbi_flag(sbi, SBI_NEED_FSCK); 861 goto release_pages; 862 } 863 864 if (!nids[i] && mode == ALLOC_NODE) { 865 /* alloc new node */ 866 if (!f2fs_alloc_nid(sbi, &(nids[i]))) { 867 err = -ENOSPC; 868 goto release_pages; 869 } 870 871 dn->nid = nids[i]; 872 nfolio[i] = f2fs_new_node_folio(dn, noffset[i]); 873 if (IS_ERR(nfolio[i])) { 874 f2fs_alloc_nid_failed(sbi, nids[i]); 875 err = PTR_ERR(nfolio[i]); 876 goto release_pages; 877 } 878 879 set_nid(parent, offset[i - 1], nids[i], i == 1); 880 f2fs_alloc_nid_done(sbi, nids[i]); 881 done = true; 882 } else if (mode == LOOKUP_NODE_RA && i == level && level > 1) { 883 nfolio[i] = f2fs_get_node_folio_ra(parent, offset[i - 1]); 884 if (IS_ERR(nfolio[i])) { 885 err = PTR_ERR(nfolio[i]); 886 goto release_pages; 887 } 888 done = true; 889 } 890 if (i == 1) { 891 dn->inode_folio_locked = false; 892 folio_unlock(parent); 893 } else { 894 f2fs_folio_put(parent, true); 895 } 896 897 if (!done) { 898 nfolio[i] = f2fs_get_node_folio(sbi, nids[i], 899 NODE_TYPE_NON_INODE); 900 if (IS_ERR(nfolio[i])) { 901 err = PTR_ERR(nfolio[i]); 902 f2fs_folio_put(nfolio[0], false); 903 goto release_out; 904 } 905 } 906 if (i < level) { 907 parent = nfolio[i]; 908 nids[i + 1] = get_nid(parent, offset[i], false); 909 } 910 } 911 dn->nid = nids[level]; 912 dn->ofs_in_node = offset[level]; 913 dn->node_folio = nfolio[level]; 914 dn->data_blkaddr = f2fs_data_blkaddr(dn); 915 916 if (is_inode_flag_set(dn->inode, FI_COMPRESSED_FILE) && 917 f2fs_sb_has_readonly(sbi)) { 918 unsigned int cluster_size = F2FS_I(dn->inode)->i_cluster_size; 919 unsigned int ofs_in_node = dn->ofs_in_node; 920 pgoff_t fofs = index; 921 unsigned int c_len; 922 block_t blkaddr; 923 924 /* should align fofs and ofs_in_node to cluster_size */ 925 if (fofs % cluster_size) { 926 fofs = round_down(fofs, cluster_size); 927 ofs_in_node = round_down(ofs_in_node, cluster_size); 928 } 929 930 c_len = f2fs_cluster_blocks_are_contiguous(dn, ofs_in_node); 931 if (!c_len) 932 goto out; 933 934 blkaddr = data_blkaddr(dn->inode, dn->node_folio, ofs_in_node); 935 if (blkaddr == COMPRESS_ADDR) 936 blkaddr = data_blkaddr(dn->inode, dn->node_folio, 937 ofs_in_node + 1); 938 939 f2fs_update_read_extent_tree_range_compressed(dn->inode, 940 fofs, blkaddr, cluster_size, c_len); 941 } 942 out: 943 return 0; 944 945 release_pages: 946 f2fs_folio_put(parent, true); 947 if (i > 1) 948 f2fs_folio_put(nfolio[0], false); 949 release_out: 950 dn->inode_folio = NULL; 951 dn->node_folio = NULL; 952 if (err == -ENOENT) { 953 dn->cur_level = i; 954 dn->max_level = level; 955 dn->ofs_in_node = offset[level]; 956 } 957 return err; 958 } 959 960 static int truncate_node(struct dnode_of_data *dn) 961 { 962 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); 963 struct node_info ni; 964 int err; 965 pgoff_t index; 966 967 err = f2fs_get_node_info(sbi, dn->nid, &ni, false); 968 if (err) 969 return err; 970 971 if (ni.blk_addr != NEW_ADDR && 972 !f2fs_is_valid_blkaddr(sbi, ni.blk_addr, DATA_GENERIC_ENHANCE)) { 973 f2fs_err_ratelimited(sbi, 974 "nat entry is corrupted, run fsck to fix it, ino:%u, " 975 "nid:%u, blkaddr:%u", ni.ino, ni.nid, ni.blk_addr); 976 set_sbi_flag(sbi, SBI_NEED_FSCK); 977 f2fs_handle_error(sbi, ERROR_INCONSISTENT_NAT); 978 return -EFSCORRUPTED; 979 } 980 981 /* Deallocate node address */ 982 f2fs_invalidate_blocks(sbi, ni.blk_addr, 1); 983 dec_valid_node_count(sbi, dn->inode, dn->nid == dn->inode->i_ino); 984 set_node_addr(sbi, &ni, NULL_ADDR, false); 985 986 if (dn->nid == dn->inode->i_ino) { 987 f2fs_remove_orphan_inode(sbi, dn->nid); 988 dec_valid_inode_count(sbi); 989 f2fs_inode_synced(dn->inode); 990 } 991 992 clear_node_folio_dirty(dn->node_folio); 993 set_sbi_flag(sbi, SBI_IS_DIRTY); 994 995 index = dn->node_folio->index; 996 f2fs_folio_put(dn->node_folio, true); 997 998 invalidate_mapping_pages(NODE_MAPPING(sbi), 999 index, index); 1000 1001 dn->node_folio = NULL; 1002 trace_f2fs_truncate_node(dn->inode, dn->nid, ni.blk_addr); 1003 1004 return 0; 1005 } 1006 1007 static int truncate_dnode(struct dnode_of_data *dn) 1008 { 1009 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); 1010 struct folio *folio; 1011 int err; 1012 1013 if (dn->nid == 0) 1014 return 1; 1015 1016 /* get direct node */ 1017 folio = f2fs_get_node_folio(sbi, dn->nid, NODE_TYPE_NON_INODE); 1018 if (PTR_ERR(folio) == -ENOENT) 1019 return 1; 1020 else if (IS_ERR(folio)) 1021 return PTR_ERR(folio); 1022 1023 if (IS_INODE(folio) || ino_of_node(folio) != dn->inode->i_ino) { 1024 f2fs_err(sbi, "incorrect node reference, ino: %llu, nid: %u, ino_of_node: %u", 1025 dn->inode->i_ino, dn->nid, ino_of_node(folio)); 1026 set_sbi_flag(sbi, SBI_NEED_FSCK); 1027 f2fs_handle_error(sbi, ERROR_INVALID_NODE_REFERENCE); 1028 f2fs_folio_put(folio, true); 1029 return -EFSCORRUPTED; 1030 } 1031 1032 /* Make dnode_of_data for parameter */ 1033 dn->node_folio = folio; 1034 dn->ofs_in_node = 0; 1035 f2fs_truncate_data_blocks_range(dn, ADDRS_PER_BLOCK(dn->inode)); 1036 err = truncate_node(dn); 1037 if (err) { 1038 f2fs_folio_put(folio, true); 1039 return err; 1040 } 1041 1042 return 1; 1043 } 1044 1045 static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs, 1046 int ofs, int depth) 1047 { 1048 struct dnode_of_data rdn = *dn; 1049 struct folio *folio; 1050 struct f2fs_node *rn; 1051 nid_t child_nid; 1052 unsigned int child_nofs; 1053 int freed = 0; 1054 int i, ret; 1055 1056 if (dn->nid == 0) 1057 return NIDS_PER_BLOCK + 1; 1058 1059 trace_f2fs_truncate_nodes_enter(dn->inode, dn->nid, dn->data_blkaddr); 1060 1061 folio = f2fs_get_node_folio(F2FS_I_SB(dn->inode), dn->nid, 1062 NODE_TYPE_NON_INODE); 1063 if (IS_ERR(folio)) { 1064 trace_f2fs_truncate_nodes_exit(dn->inode, PTR_ERR(folio)); 1065 return PTR_ERR(folio); 1066 } 1067 1068 f2fs_ra_node_pages(folio, ofs, NIDS_PER_BLOCK); 1069 1070 rn = F2FS_NODE(folio); 1071 if (depth < 3) { 1072 for (i = ofs; i < NIDS_PER_BLOCK; i++, freed++) { 1073 child_nid = le32_to_cpu(rn->in.nid[i]); 1074 if (child_nid == 0) 1075 continue; 1076 rdn.nid = child_nid; 1077 ret = truncate_dnode(&rdn); 1078 if (ret < 0) 1079 goto out_err; 1080 if (set_nid(folio, i, 0, false)) 1081 dn->node_changed = true; 1082 } 1083 } else { 1084 child_nofs = nofs + ofs * (NIDS_PER_BLOCK + 1) + 1; 1085 for (i = ofs; i < NIDS_PER_BLOCK; i++) { 1086 child_nid = le32_to_cpu(rn->in.nid[i]); 1087 if (child_nid == 0) { 1088 child_nofs += NIDS_PER_BLOCK + 1; 1089 continue; 1090 } 1091 rdn.nid = child_nid; 1092 ret = truncate_nodes(&rdn, child_nofs, 0, depth - 1); 1093 if (ret == (NIDS_PER_BLOCK + 1)) { 1094 if (set_nid(folio, i, 0, false)) 1095 dn->node_changed = true; 1096 child_nofs += ret; 1097 } else if (ret < 0 && ret != -ENOENT) { 1098 goto out_err; 1099 } 1100 } 1101 freed = child_nofs; 1102 } 1103 1104 if (!ofs) { 1105 /* remove current indirect node */ 1106 dn->node_folio = folio; 1107 ret = truncate_node(dn); 1108 if (ret) 1109 goto out_err; 1110 freed++; 1111 } else { 1112 f2fs_folio_put(folio, true); 1113 } 1114 trace_f2fs_truncate_nodes_exit(dn->inode, freed); 1115 return freed; 1116 1117 out_err: 1118 f2fs_folio_put(folio, true); 1119 trace_f2fs_truncate_nodes_exit(dn->inode, ret); 1120 return ret; 1121 } 1122 1123 static int truncate_partial_nodes(struct dnode_of_data *dn, 1124 int *offset, int depth) 1125 { 1126 struct folio *folios[2]; 1127 nid_t nid[3]; 1128 nid_t child_nid; 1129 int err = 0; 1130 int i; 1131 int idx = depth - 2; 1132 1133 nid[0] = get_nid(dn->inode_folio, offset[0], true); 1134 if (!nid[0]) 1135 return 0; 1136 1137 /* get indirect nodes in the path */ 1138 for (i = 0; i < idx + 1; i++) { 1139 /* reference count'll be increased */ 1140 folios[i] = f2fs_get_node_folio(F2FS_I_SB(dn->inode), nid[i], 1141 NODE_TYPE_NON_INODE); 1142 if (IS_ERR(folios[i])) { 1143 err = PTR_ERR(folios[i]); 1144 idx = i - 1; 1145 goto fail; 1146 } 1147 nid[i + 1] = get_nid(folios[i], offset[i + 1], false); 1148 } 1149 1150 f2fs_ra_node_pages(folios[idx], offset[idx + 1], NIDS_PER_BLOCK); 1151 1152 /* free direct nodes linked to a partial indirect node */ 1153 for (i = offset[idx + 1]; i < NIDS_PER_BLOCK; i++) { 1154 child_nid = get_nid(folios[idx], i, false); 1155 if (!child_nid) 1156 continue; 1157 dn->nid = child_nid; 1158 err = truncate_dnode(dn); 1159 if (err < 0) 1160 goto fail; 1161 if (set_nid(folios[idx], i, 0, false)) 1162 dn->node_changed = true; 1163 } 1164 1165 if (offset[idx + 1] == 0) { 1166 dn->node_folio = folios[idx]; 1167 dn->nid = nid[idx]; 1168 err = truncate_node(dn); 1169 if (err) 1170 goto fail; 1171 } else { 1172 f2fs_folio_put(folios[idx], true); 1173 } 1174 offset[idx]++; 1175 offset[idx + 1] = 0; 1176 idx--; 1177 fail: 1178 for (i = idx; i >= 0; i--) 1179 f2fs_folio_put(folios[i], true); 1180 1181 trace_f2fs_truncate_partial_nodes(dn->inode, nid, depth, err); 1182 1183 return err; 1184 } 1185 1186 /* 1187 * All the block addresses of data and nodes should be nullified. 1188 */ 1189 int f2fs_truncate_inode_blocks(struct inode *inode, pgoff_t from) 1190 { 1191 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 1192 int err = 0, cont = 1; 1193 int level, offset[4], noffset[4]; 1194 unsigned int nofs = 0; 1195 struct dnode_of_data dn; 1196 struct folio *folio; 1197 1198 trace_f2fs_truncate_inode_blocks_enter(inode, from); 1199 1200 level = get_node_path(inode, from, offset, noffset); 1201 if (level <= 0) { 1202 if (!level) { 1203 level = -EFSCORRUPTED; 1204 f2fs_err(sbi, "%s: inode ino=%llx has corrupted node block, from:%lu addrs:%u", 1205 __func__, inode->i_ino, 1206 from, ADDRS_PER_INODE(inode)); 1207 set_sbi_flag(sbi, SBI_NEED_FSCK); 1208 } 1209 trace_f2fs_truncate_inode_blocks_exit(inode, level); 1210 return level; 1211 } 1212 1213 folio = f2fs_get_inode_folio(sbi, inode->i_ino); 1214 if (IS_ERR(folio)) { 1215 trace_f2fs_truncate_inode_blocks_exit(inode, PTR_ERR(folio)); 1216 return PTR_ERR(folio); 1217 } 1218 1219 set_new_dnode(&dn, inode, folio, NULL, 0); 1220 folio_unlock(folio); 1221 1222 switch (level) { 1223 case 0: 1224 case 1: 1225 nofs = noffset[1]; 1226 break; 1227 case 2: 1228 nofs = noffset[1]; 1229 if (!offset[level - 1]) 1230 goto skip_partial; 1231 err = truncate_partial_nodes(&dn, offset, level); 1232 if (err < 0 && err != -ENOENT) 1233 goto fail; 1234 nofs += 1 + NIDS_PER_BLOCK; 1235 break; 1236 case 3: 1237 nofs = 5 + 2 * NIDS_PER_BLOCK; 1238 if (!offset[level - 1]) 1239 goto skip_partial; 1240 err = truncate_partial_nodes(&dn, offset, level); 1241 if (err < 0 && err != -ENOENT) 1242 goto fail; 1243 break; 1244 default: 1245 BUG(); 1246 } 1247 1248 skip_partial: 1249 while (cont) { 1250 dn.nid = get_nid(folio, offset[0], true); 1251 switch (offset[0]) { 1252 case NODE_DIR1_BLOCK: 1253 case NODE_DIR2_BLOCK: 1254 err = truncate_dnode(&dn); 1255 break; 1256 1257 case NODE_IND1_BLOCK: 1258 case NODE_IND2_BLOCK: 1259 err = truncate_nodes(&dn, nofs, offset[1], 2); 1260 break; 1261 1262 case NODE_DIND_BLOCK: 1263 err = truncate_nodes(&dn, nofs, offset[1], 3); 1264 cont = 0; 1265 break; 1266 1267 default: 1268 BUG(); 1269 } 1270 if (err == -ENOENT) { 1271 set_sbi_flag(F2FS_F_SB(folio), SBI_NEED_FSCK); 1272 f2fs_handle_error(sbi, ERROR_INVALID_BLKADDR); 1273 fserror_report_file_metadata(dn.inode, -EFSCORRUPTED, 1274 GFP_NOFS); 1275 f2fs_err_ratelimited(sbi, 1276 "truncate node fail, ino:%llu, nid:%u, " 1277 "offset[0]:%d, offset[1]:%d, nofs:%d", 1278 inode->i_ino, dn.nid, offset[0], 1279 offset[1], nofs); 1280 err = 0; 1281 } 1282 if (err < 0) 1283 goto fail; 1284 if (offset[1] == 0 && get_nid(folio, offset[0], true)) { 1285 folio_lock(folio); 1286 BUG_ON(!is_node_folio(folio)); 1287 set_nid(folio, offset[0], 0, true); 1288 folio_unlock(folio); 1289 } 1290 offset[1] = 0; 1291 offset[0]++; 1292 nofs += err; 1293 } 1294 fail: 1295 f2fs_folio_put(folio, false); 1296 trace_f2fs_truncate_inode_blocks_exit(inode, err); 1297 return err > 0 ? 0 : err; 1298 } 1299 1300 /* caller must lock inode page */ 1301 int f2fs_truncate_xattr_node(struct inode *inode) 1302 { 1303 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 1304 nid_t nid = F2FS_I(inode)->i_xattr_nid; 1305 struct dnode_of_data dn; 1306 struct folio *nfolio; 1307 int err; 1308 1309 if (!nid) 1310 return 0; 1311 1312 nfolio = f2fs_get_xnode_folio(sbi, nid); 1313 if (IS_ERR(nfolio)) 1314 return PTR_ERR(nfolio); 1315 1316 set_new_dnode(&dn, inode, NULL, nfolio, nid); 1317 err = truncate_node(&dn); 1318 if (err) { 1319 f2fs_folio_put(nfolio, true); 1320 return err; 1321 } 1322 1323 f2fs_i_xnid_write(inode, 0); 1324 1325 return 0; 1326 } 1327 1328 /* 1329 * Caller should grab and release a rwsem by calling f2fs_lock_op() and 1330 * f2fs_unlock_op(). 1331 */ 1332 int f2fs_remove_inode_page(struct inode *inode) 1333 { 1334 struct dnode_of_data dn; 1335 int err; 1336 1337 set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino); 1338 err = f2fs_get_dnode_of_data(&dn, 0, LOOKUP_NODE); 1339 if (err) 1340 return err; 1341 1342 err = f2fs_truncate_xattr_node(inode); 1343 if (err) { 1344 f2fs_put_dnode(&dn); 1345 return err; 1346 } 1347 1348 /* remove potential inline_data blocks */ 1349 if (!IS_DEVICE_ALIASING(inode) && 1350 (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || 1351 S_ISLNK(inode->i_mode))) 1352 f2fs_truncate_data_blocks_range(&dn, 1); 1353 1354 /* 0 is possible, after f2fs_new_inode() has failed */ 1355 if (unlikely(f2fs_cp_error(F2FS_I_SB(inode)))) { 1356 f2fs_put_dnode(&dn); 1357 return -EIO; 1358 } 1359 1360 if (unlikely(inode->i_blocks != 0 && inode->i_blocks != 8)) { 1361 f2fs_warn(F2FS_I_SB(inode), 1362 "f2fs_remove_inode_page: inconsistent i_blocks, ino:%llu, iblocks:%llu", 1363 inode->i_ino, (unsigned long long)inode->i_blocks); 1364 set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK); 1365 } 1366 1367 /* will put inode & node pages */ 1368 err = truncate_node(&dn); 1369 if (err) { 1370 f2fs_put_dnode(&dn); 1371 return err; 1372 } 1373 return 0; 1374 } 1375 1376 struct folio *f2fs_new_inode_folio(struct inode *inode) 1377 { 1378 struct dnode_of_data dn; 1379 1380 /* allocate inode page for new inode */ 1381 set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino); 1382 1383 /* caller should f2fs_folio_put(folio, true); */ 1384 return f2fs_new_node_folio(&dn, 0); 1385 } 1386 1387 struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs) 1388 { 1389 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); 1390 struct node_info new_ni; 1391 struct folio *folio; 1392 int err; 1393 1394 if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC))) 1395 return ERR_PTR(-EPERM); 1396 1397 folio = f2fs_grab_cache_folio(NODE_MAPPING(sbi), dn->nid, false); 1398 if (IS_ERR(folio)) 1399 return folio; 1400 1401 if (unlikely((err = inc_valid_node_count(sbi, dn->inode, !ofs)))) 1402 goto fail; 1403 1404 #ifdef CONFIG_F2FS_CHECK_FS 1405 err = f2fs_get_node_info(sbi, dn->nid, &new_ni, false); 1406 if (err) { 1407 dec_valid_node_count(sbi, dn->inode, !ofs); 1408 goto fail; 1409 } 1410 if (unlikely(new_ni.blk_addr != NULL_ADDR)) { 1411 err = -EFSCORRUPTED; 1412 dec_valid_node_count(sbi, dn->inode, !ofs); 1413 set_sbi_flag(sbi, SBI_NEED_FSCK); 1414 f2fs_warn_ratelimited(sbi, 1415 "f2fs_new_node_folio: inconsistent nat entry, " 1416 "ino:%u, nid:%u, blkaddr:%u, ver:%u, flag:%u", 1417 new_ni.ino, new_ni.nid, new_ni.blk_addr, 1418 new_ni.version, new_ni.flag); 1419 f2fs_handle_error(sbi, ERROR_INCONSISTENT_NAT); 1420 goto fail; 1421 } 1422 #endif 1423 new_ni.nid = dn->nid; 1424 new_ni.ino = dn->inode->i_ino; 1425 new_ni.blk_addr = NULL_ADDR; 1426 new_ni.flag = 0; 1427 new_ni.version = 0; 1428 set_node_addr(sbi, &new_ni, NEW_ADDR, false); 1429 1430 f2fs_folio_wait_writeback(folio, NODE, true, true); 1431 fill_node_footer(folio, dn->nid, dn->inode->i_ino, ofs, true); 1432 set_cold_node(folio, S_ISDIR(dn->inode->i_mode)); 1433 if (!folio_test_uptodate(folio)) 1434 folio_mark_uptodate(folio); 1435 if (folio_mark_dirty(folio)) 1436 dn->node_changed = true; 1437 1438 if (f2fs_has_xattr_block(ofs)) 1439 f2fs_i_xnid_write(dn->inode, dn->nid); 1440 1441 if (ofs == 0) 1442 inc_valid_inode_count(sbi); 1443 return folio; 1444 fail: 1445 clear_node_folio_dirty(folio); 1446 f2fs_folio_put(folio, true); 1447 return ERR_PTR(err); 1448 } 1449 1450 /* 1451 * Caller should do after getting the following values. 1452 * 0: f2fs_folio_put(folio, false) 1453 * LOCKED_PAGE or error: f2fs_folio_put(folio, true) 1454 */ 1455 static int read_node_folio(struct folio *folio, blk_opf_t op_flags) 1456 { 1457 struct f2fs_sb_info *sbi = F2FS_F_SB(folio); 1458 struct node_info ni; 1459 struct f2fs_io_info fio = { 1460 .sbi = sbi, 1461 .type = NODE, 1462 .op = REQ_OP_READ, 1463 .op_flags = op_flags, 1464 .folio = folio, 1465 .encrypted_page = NULL, 1466 }; 1467 int err; 1468 1469 if (folio_test_uptodate(folio)) { 1470 if (!f2fs_inode_chksum_verify(sbi, folio)) { 1471 folio_clear_uptodate(folio); 1472 return -EFSBADCRC; 1473 } 1474 return LOCKED_PAGE; 1475 } 1476 1477 err = f2fs_get_node_info(sbi, folio->index, &ni, false); 1478 if (err) 1479 return err; 1480 1481 /* NEW_ADDR can be seen, after cp_error drops some dirty node pages */ 1482 if (unlikely(ni.blk_addr == NULL_ADDR || ni.blk_addr == NEW_ADDR)) { 1483 folio_clear_uptodate(folio); 1484 return -ENOENT; 1485 } 1486 1487 fio.new_blkaddr = fio.old_blkaddr = ni.blk_addr; 1488 1489 err = f2fs_submit_page_bio(&fio); 1490 1491 if (!err) 1492 f2fs_update_iostat(sbi, NULL, FS_NODE_READ_IO, F2FS_BLKSIZE); 1493 1494 return err; 1495 } 1496 1497 /* 1498 * Readahead a node page 1499 */ 1500 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid) 1501 { 1502 struct folio *afolio; 1503 int err; 1504 1505 if (!nid) 1506 return; 1507 if (f2fs_check_nid_range(sbi, nid)) 1508 return; 1509 1510 afolio = xa_load(&NODE_MAPPING(sbi)->i_pages, nid); 1511 if (afolio) 1512 return; 1513 1514 afolio = f2fs_grab_cache_folio(NODE_MAPPING(sbi), nid, false); 1515 if (IS_ERR(afolio)) 1516 return; 1517 1518 err = read_node_folio(afolio, REQ_RAHEAD); 1519 f2fs_folio_put(afolio, err ? true : false); 1520 } 1521 1522 int f2fs_sanity_check_node_footer(struct f2fs_sb_info *sbi, 1523 struct folio *folio, pgoff_t nid, 1524 enum node_type ntype, bool in_irq) 1525 { 1526 bool is_inode, is_xnode; 1527 1528 if (unlikely(nid != nid_of_node(folio))) 1529 goto out_err; 1530 1531 is_inode = IS_INODE(folio); 1532 is_xnode = f2fs_has_xattr_block(ofs_of_node(folio)); 1533 1534 switch (ntype) { 1535 case NODE_TYPE_REGULAR: 1536 if (is_inode && is_xnode) 1537 goto out_err; 1538 break; 1539 case NODE_TYPE_INODE: 1540 if (!is_inode || is_xnode) 1541 goto out_err; 1542 break; 1543 case NODE_TYPE_XATTR: 1544 if (is_inode || !is_xnode) 1545 goto out_err; 1546 break; 1547 case NODE_TYPE_NON_INODE: 1548 if (is_inode) 1549 goto out_err; 1550 break; 1551 case NODE_TYPE_NON_IXNODE: 1552 if (is_inode || is_xnode) 1553 goto out_err; 1554 break; 1555 default: 1556 break; 1557 } 1558 if (time_to_inject(sbi, FAULT_INCONSISTENT_FOOTER)) 1559 goto out_err; 1560 return 0; 1561 out_err: 1562 set_sbi_flag(sbi, SBI_NEED_FSCK); 1563 f2fs_warn_ratelimited(sbi, "inconsistent node block, node_type:%d, nid:%lu, " 1564 "node_footer[nid:%u,ino:%u,ofs:%u,cpver:%llu,blkaddr:%u]", 1565 ntype, nid, nid_of_node(folio), ino_of_node(folio), 1566 ofs_of_node(folio), cpver_of_node(folio), 1567 next_blkaddr_of_node(folio)); 1568 1569 f2fs_handle_error(sbi, ERROR_INCONSISTENT_FOOTER); 1570 fserror_report_file_metadata(folio->mapping->host, 1571 -EFSCORRUPTED, in_irq ? GFP_NOWAIT : GFP_NOFS); 1572 return -EFSCORRUPTED; 1573 } 1574 1575 static struct folio *__get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid, 1576 struct folio *parent, int start, enum node_type ntype) 1577 { 1578 struct folio *folio; 1579 int err; 1580 1581 if (!nid) 1582 return ERR_PTR(-ENOENT); 1583 if (f2fs_check_nid_range(sbi, nid)) 1584 return ERR_PTR(-EINVAL); 1585 repeat: 1586 folio = f2fs_grab_cache_folio(NODE_MAPPING(sbi), nid, false); 1587 if (IS_ERR(folio)) 1588 return folio; 1589 1590 err = read_node_folio(folio, 0); 1591 if (err < 0) 1592 goto out_put_err; 1593 if (err == LOCKED_PAGE) 1594 goto page_hit; 1595 1596 if (parent) 1597 f2fs_ra_node_pages(parent, start + 1, MAX_RA_NODE); 1598 1599 folio_lock(folio); 1600 1601 if (unlikely(!is_node_folio(folio))) { 1602 f2fs_folio_put(folio, true); 1603 goto repeat; 1604 } 1605 1606 if (unlikely(!folio_test_uptodate(folio))) { 1607 err = -EIO; 1608 goto out_put_err; 1609 } 1610 1611 if (!f2fs_inode_chksum_verify(sbi, folio)) { 1612 err = -EFSBADCRC; 1613 goto out_err; 1614 } 1615 page_hit: 1616 err = f2fs_sanity_check_node_footer(sbi, folio, nid, ntype, false); 1617 if (!err) 1618 return folio; 1619 out_err: 1620 folio_clear_uptodate(folio); 1621 out_put_err: 1622 /* ENOENT comes from read_node_folio which is not an error. */ 1623 if (err != -ENOENT) 1624 f2fs_handle_page_eio(sbi, folio, NODE); 1625 f2fs_folio_put(folio, true); 1626 return ERR_PTR(err); 1627 } 1628 1629 struct folio *f2fs_get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid, 1630 enum node_type node_type) 1631 { 1632 return __get_node_folio(sbi, nid, NULL, 0, node_type); 1633 } 1634 1635 struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino) 1636 { 1637 return __get_node_folio(sbi, ino, NULL, 0, NODE_TYPE_INODE); 1638 } 1639 1640 struct folio *f2fs_get_xnode_folio(struct f2fs_sb_info *sbi, pgoff_t xnid) 1641 { 1642 return __get_node_folio(sbi, xnid, NULL, 0, NODE_TYPE_XATTR); 1643 } 1644 1645 static struct folio *f2fs_get_node_folio_ra(struct folio *parent, int start) 1646 { 1647 struct f2fs_sb_info *sbi = F2FS_F_SB(parent); 1648 nid_t nid = get_nid(parent, start, false); 1649 1650 return __get_node_folio(sbi, nid, parent, start, NODE_TYPE_NON_IXNODE); 1651 } 1652 1653 static void flush_inline_data(struct f2fs_sb_info *sbi, nid_t ino) 1654 { 1655 struct inode *inode; 1656 struct folio *folio; 1657 int ret; 1658 1659 /* should flush inline_data before evict_inode */ 1660 inode = ilookup(sbi->sb, ino); 1661 if (!inode) 1662 return; 1663 1664 folio = f2fs_filemap_get_folio(inode->i_mapping, 0, 1665 FGP_LOCK|FGP_NOWAIT, 0); 1666 if (IS_ERR(folio)) 1667 goto iput_out; 1668 1669 if (!folio_test_uptodate(folio)) 1670 goto folio_out; 1671 1672 if (!folio_test_dirty(folio)) 1673 goto folio_out; 1674 1675 if (!folio_clear_dirty_for_io(folio)) 1676 goto folio_out; 1677 1678 ret = f2fs_write_inline_data(inode, folio); 1679 inode_dec_dirty_pages(inode); 1680 f2fs_remove_dirty_inode(inode); 1681 if (ret) 1682 folio_mark_dirty(folio); 1683 folio_out: 1684 f2fs_folio_put(folio, true); 1685 iput_out: 1686 iput(inode); 1687 } 1688 1689 static struct folio *last_fsync_dnode(struct f2fs_sb_info *sbi, nid_t ino) 1690 { 1691 pgoff_t index; 1692 struct folio_batch fbatch; 1693 struct folio *last_folio = NULL; 1694 int nr_folios; 1695 1696 folio_batch_init(&fbatch); 1697 index = 0; 1698 1699 while ((nr_folios = filemap_get_folios_tag(NODE_MAPPING(sbi), &index, 1700 (pgoff_t)-1, PAGECACHE_TAG_DIRTY, 1701 &fbatch))) { 1702 int i; 1703 1704 for (i = 0; i < nr_folios; i++) { 1705 struct folio *folio = fbatch.folios[i]; 1706 1707 if (unlikely(f2fs_cp_error(sbi))) { 1708 f2fs_folio_put(last_folio, false); 1709 folio_batch_release(&fbatch); 1710 return ERR_PTR(-EIO); 1711 } 1712 1713 if (!IS_DNODE(folio) || !is_cold_node(folio)) 1714 continue; 1715 if (ino_of_node(folio) != ino) 1716 continue; 1717 1718 folio_lock(folio); 1719 1720 if (unlikely(!is_node_folio(folio))) { 1721 continue_unlock: 1722 folio_unlock(folio); 1723 continue; 1724 } 1725 if (ino_of_node(folio) != ino) 1726 goto continue_unlock; 1727 1728 if (!folio_test_dirty(folio)) { 1729 /* someone wrote it for us */ 1730 goto continue_unlock; 1731 } 1732 1733 if (last_folio) 1734 f2fs_folio_put(last_folio, false); 1735 1736 folio_get(folio); 1737 last_folio = folio; 1738 folio_unlock(folio); 1739 } 1740 folio_batch_release(&fbatch); 1741 cond_resched(); 1742 } 1743 return last_folio; 1744 } 1745 1746 static bool __write_node_folio(struct folio *folio, bool atomic, bool do_fsync, 1747 bool *submitted, struct writeback_control *wbc, 1748 bool do_balance, enum iostat_type io_type, 1749 unsigned int *seq_id) 1750 { 1751 struct f2fs_sb_info *sbi = F2FS_F_SB(folio); 1752 nid_t nid; 1753 struct node_info ni; 1754 struct f2fs_io_info fio = { 1755 .sbi = sbi, 1756 .ino = ino_of_node(folio), 1757 .type = NODE, 1758 .op = REQ_OP_WRITE, 1759 .op_flags = wbc_to_write_flags(wbc), 1760 .folio = folio, 1761 .encrypted_page = NULL, 1762 .submitted = 0, 1763 .io_type = io_type, 1764 .io_wbc = wbc, 1765 }; 1766 struct f2fs_lock_context lc; 1767 unsigned int seq; 1768 1769 trace_f2fs_writepage(folio, NODE); 1770 1771 if (unlikely(f2fs_cp_error(sbi))) { 1772 /* keep node pages in remount-ro mode */ 1773 if (F2FS_OPTION(sbi).errors == MOUNT_ERRORS_READONLY) 1774 goto redirty_out; 1775 folio_clear_uptodate(folio); 1776 dec_page_count(sbi, F2FS_DIRTY_NODES); 1777 folio_unlock(folio); 1778 return true; 1779 } 1780 1781 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) 1782 goto redirty_out; 1783 1784 if (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) && 1785 wbc->sync_mode == WB_SYNC_NONE && 1786 IS_DNODE(folio) && is_cold_node(folio)) 1787 goto redirty_out; 1788 1789 /* get old block addr of this node page */ 1790 nid = nid_of_node(folio); 1791 1792 if (f2fs_sanity_check_node_footer(sbi, folio, nid, 1793 NODE_TYPE_REGULAR, false)) { 1794 fserror_report_metadata(sbi->sb, -EFSCORRUPTED, GFP_NOFS); 1795 f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_CORRUPTED_NID); 1796 goto redirty_out; 1797 } 1798 1799 if (f2fs_get_node_info(sbi, nid, &ni, !do_balance)) 1800 goto redirty_out; 1801 1802 f2fs_down_read_trace(&sbi->node_write, &lc); 1803 1804 /* This page is already truncated */ 1805 if (unlikely(ni.blk_addr == NULL_ADDR)) { 1806 folio_clear_uptodate(folio); 1807 dec_page_count(sbi, F2FS_DIRTY_NODES); 1808 f2fs_up_read_trace(&sbi->node_write, &lc); 1809 folio_unlock(folio); 1810 return true; 1811 } 1812 1813 if (__is_valid_data_blkaddr(ni.blk_addr) && 1814 !f2fs_is_valid_blkaddr(sbi, ni.blk_addr, 1815 DATA_GENERIC_ENHANCE)) { 1816 f2fs_up_read_trace(&sbi->node_write, &lc); 1817 goto redirty_out; 1818 } 1819 1820 if (atomic && !test_opt(sbi, NOBARRIER)) 1821 fio.op_flags |= REQ_PREFLUSH | REQ_FUA; 1822 1823 set_dentry_mark(folio, false); 1824 set_fsync_mark(folio, do_fsync); 1825 if (IS_INODE(folio) && (atomic || is_fsync_dnode(folio))) 1826 set_dentry_mark(folio, 1827 f2fs_need_dentry_mark(sbi, ino_of_node(folio))); 1828 1829 /* should add to global list before clearing PAGECACHE status */ 1830 if (f2fs_in_warm_node_list(folio)) { 1831 seq = f2fs_add_fsync_node_entry(sbi, folio); 1832 if (seq_id) 1833 *seq_id = seq; 1834 } 1835 1836 folio_start_writeback(folio); 1837 1838 fio.old_blkaddr = ni.blk_addr; 1839 f2fs_do_write_node_page(nid, &fio); 1840 set_node_addr(sbi, &ni, fio.new_blkaddr, is_fsync_dnode(folio)); 1841 dec_page_count(sbi, F2FS_DIRTY_NODES); 1842 f2fs_up_read_trace(&sbi->node_write, &lc); 1843 1844 folio_unlock(folio); 1845 1846 if (unlikely(f2fs_cp_error(sbi))) { 1847 f2fs_submit_merged_write(sbi, NODE); 1848 submitted = NULL; 1849 } 1850 if (submitted) 1851 *submitted = fio.submitted; 1852 1853 if (do_balance) 1854 f2fs_balance_fs(sbi, false); 1855 return true; 1856 1857 redirty_out: 1858 folio_redirty_for_writepage(wbc, folio); 1859 folio_unlock(folio); 1860 return false; 1861 } 1862 1863 int f2fs_write_single_node_folio(struct folio *node_folio, int sync_mode, 1864 bool mark_dirty, enum iostat_type io_type) 1865 { 1866 int err = 0; 1867 struct writeback_control wbc = { 1868 .sync_mode = WB_SYNC_ALL, 1869 .nr_to_write = 1, 1870 }; 1871 1872 if (!sync_mode) { 1873 /* set page dirty and write it */ 1874 if (!folio_test_writeback(node_folio)) 1875 folio_mark_dirty(node_folio); 1876 goto out_folio; 1877 } 1878 1879 f2fs_folio_wait_writeback(node_folio, NODE, true, true); 1880 1881 if (mark_dirty) 1882 folio_mark_dirty(node_folio); 1883 else if (!folio_test_dirty(node_folio)) 1884 goto out_folio; 1885 1886 if (!folio_clear_dirty_for_io(node_folio)) { 1887 err = -EAGAIN; 1888 goto out_folio; 1889 } 1890 1891 if (!__write_node_folio(node_folio, false, false, NULL, 1892 &wbc, false, io_type, NULL)) 1893 err = -EAGAIN; 1894 goto release_folio; 1895 out_folio: 1896 folio_unlock(node_folio); 1897 release_folio: 1898 f2fs_folio_put(node_folio, false); 1899 return err; 1900 } 1901 1902 int f2fs_move_node_folio(struct folio *node_folio, int gc_type) 1903 { 1904 return f2fs_write_single_node_folio(node_folio, gc_type == FG_GC, 1905 true, FS_GC_NODE_IO); 1906 } 1907 1908 int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode, 1909 struct writeback_control *wbc, bool atomic, 1910 unsigned int *seq_id) 1911 { 1912 pgoff_t index; 1913 struct folio_batch fbatch; 1914 int ret = 0; 1915 struct folio *last_folio = NULL; 1916 bool marked = false; 1917 nid_t ino = inode->i_ino; 1918 int nr_folios; 1919 int nwritten = 0; 1920 1921 if (atomic) { 1922 last_folio = last_fsync_dnode(sbi, ino); 1923 if (IS_ERR_OR_NULL(last_folio)) 1924 return PTR_ERR_OR_ZERO(last_folio); 1925 } 1926 retry: 1927 folio_batch_init(&fbatch); 1928 index = 0; 1929 1930 while ((nr_folios = filemap_get_folios_tag(NODE_MAPPING(sbi), &index, 1931 (pgoff_t)-1, PAGECACHE_TAG_DIRTY, 1932 &fbatch))) { 1933 int i; 1934 1935 for (i = 0; i < nr_folios; i++) { 1936 struct folio *folio = fbatch.folios[i]; 1937 bool submitted = false; 1938 bool do_fsync = false; 1939 1940 if (unlikely(f2fs_cp_error(sbi))) { 1941 f2fs_folio_put(last_folio, false); 1942 folio_batch_release(&fbatch); 1943 ret = -EIO; 1944 goto out; 1945 } 1946 1947 if (!IS_DNODE(folio) || !is_cold_node(folio)) 1948 continue; 1949 if (ino_of_node(folio) != ino) 1950 continue; 1951 1952 folio_lock(folio); 1953 1954 if (unlikely(!is_node_folio(folio))) { 1955 continue_unlock: 1956 folio_unlock(folio); 1957 continue; 1958 } 1959 if (ino_of_node(folio) != ino) 1960 goto continue_unlock; 1961 1962 if (!folio_test_dirty(folio) && folio != last_folio) { 1963 /* someone wrote it for us */ 1964 goto continue_unlock; 1965 } 1966 1967 f2fs_folio_wait_writeback(folio, NODE, true, true); 1968 1969 if (!atomic || folio == last_folio) { 1970 do_fsync = true; 1971 percpu_counter_inc(&sbi->rf_node_block_count); 1972 if (IS_INODE(folio)) { 1973 if (is_inode_flag_set(inode, 1974 FI_DIRTY_INODE)) 1975 f2fs_update_inode(inode, folio); 1976 } 1977 /* may be written by other thread */ 1978 if (!folio_test_dirty(folio)) 1979 folio_mark_dirty(folio); 1980 } 1981 1982 if (!folio_clear_dirty_for_io(folio)) 1983 goto continue_unlock; 1984 1985 if (!__write_node_folio(folio, atomic && 1986 folio == last_folio, 1987 do_fsync, &submitted, 1988 wbc, true, FS_NODE_IO, 1989 seq_id)) { 1990 f2fs_folio_put(last_folio, false); 1991 folio_batch_release(&fbatch); 1992 ret = -EIO; 1993 goto out; 1994 } 1995 if (submitted) 1996 nwritten++; 1997 1998 if (folio == last_folio) { 1999 f2fs_folio_put(folio, false); 2000 folio_batch_release(&fbatch); 2001 marked = true; 2002 goto out; 2003 } 2004 } 2005 folio_batch_release(&fbatch); 2006 cond_resched(); 2007 } 2008 if (atomic && !marked) { 2009 f2fs_debug(sbi, "Retry to write fsync mark: ino=%u, idx=%lx", 2010 ino, last_folio->index); 2011 folio_lock(last_folio); 2012 f2fs_folio_wait_writeback(last_folio, NODE, true, true); 2013 folio_mark_dirty(last_folio); 2014 folio_unlock(last_folio); 2015 goto retry; 2016 } 2017 out: 2018 if (nwritten) 2019 f2fs_submit_merged_write_cond(sbi, NULL, NULL, ino, NODE); 2020 return ret; 2021 } 2022 2023 static int f2fs_match_ino(struct inode *inode, u64 ino, void *data) 2024 { 2025 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 2026 bool clean; 2027 2028 if (inode->i_ino != ino) 2029 return 0; 2030 2031 if (!is_inode_flag_set(inode, FI_DIRTY_INODE)) 2032 return 0; 2033 2034 spin_lock(&sbi->inode_lock[DIRTY_META]); 2035 clean = list_empty(&F2FS_I(inode)->gdirty_list); 2036 spin_unlock(&sbi->inode_lock[DIRTY_META]); 2037 2038 if (clean) 2039 return 0; 2040 2041 inode = igrab(inode); 2042 if (!inode) 2043 return 0; 2044 return 1; 2045 } 2046 2047 static bool flush_dirty_inode(struct folio *folio) 2048 { 2049 struct f2fs_sb_info *sbi = F2FS_F_SB(folio); 2050 struct inode *inode; 2051 nid_t ino = ino_of_node(folio); 2052 2053 inode = find_inode_nowait(sbi->sb, ino, f2fs_match_ino, NULL); 2054 if (!inode) 2055 return false; 2056 2057 f2fs_update_inode(inode, folio); 2058 folio_unlock(folio); 2059 2060 iput(inode); 2061 return true; 2062 } 2063 2064 void f2fs_flush_inline_data(struct f2fs_sb_info *sbi) 2065 { 2066 pgoff_t index = 0; 2067 struct folio_batch fbatch; 2068 int nr_folios; 2069 2070 folio_batch_init(&fbatch); 2071 2072 while ((nr_folios = filemap_get_folios_tag(NODE_MAPPING(sbi), &index, 2073 (pgoff_t)-1, PAGECACHE_TAG_DIRTY, 2074 &fbatch))) { 2075 int i; 2076 2077 for (i = 0; i < nr_folios; i++) { 2078 struct folio *folio = fbatch.folios[i]; 2079 2080 if (!IS_INODE(folio)) 2081 continue; 2082 2083 folio_lock(folio); 2084 2085 if (unlikely(!is_node_folio(folio))) 2086 goto unlock; 2087 if (!folio_test_dirty(folio)) 2088 goto unlock; 2089 2090 /* flush inline_data, if it's async context. */ 2091 if (folio_test_f2fs_inline(folio)) { 2092 folio_clear_f2fs_inline(folio); 2093 folio_unlock(folio); 2094 flush_inline_data(sbi, ino_of_node(folio)); 2095 continue; 2096 } 2097 unlock: 2098 folio_unlock(folio); 2099 } 2100 folio_batch_release(&fbatch); 2101 cond_resched(); 2102 } 2103 } 2104 2105 int f2fs_sync_node_pages(struct f2fs_sb_info *sbi, 2106 struct writeback_control *wbc, 2107 bool do_balance, enum iostat_type io_type) 2108 { 2109 pgoff_t index; 2110 struct folio_batch fbatch; 2111 int step = 0; 2112 int nwritten = 0; 2113 int ret = 0; 2114 int nr_folios, done = 0; 2115 2116 folio_batch_init(&fbatch); 2117 2118 next_step: 2119 index = 0; 2120 2121 while (!done && (nr_folios = filemap_get_folios_tag(NODE_MAPPING(sbi), 2122 &index, (pgoff_t)-1, PAGECACHE_TAG_DIRTY, 2123 &fbatch))) { 2124 int i; 2125 2126 for (i = 0; i < nr_folios; i++) { 2127 struct folio *folio = fbatch.folios[i]; 2128 bool submitted = false; 2129 2130 /* give a priority to WB_SYNC threads */ 2131 if (atomic_read(&sbi->wb_sync_req[NODE]) && 2132 wbc->sync_mode == WB_SYNC_NONE) { 2133 done = 1; 2134 break; 2135 } 2136 2137 /* 2138 * flushing sequence with step: 2139 * 0. indirect nodes 2140 * 1. dentry dnodes 2141 * 2. file dnodes 2142 */ 2143 if (step == 0 && IS_DNODE(folio)) 2144 continue; 2145 if (step == 1 && (!IS_DNODE(folio) || 2146 is_cold_node(folio))) 2147 continue; 2148 if (step == 2 && (!IS_DNODE(folio) || 2149 !is_cold_node(folio))) 2150 continue; 2151 lock_node: 2152 if (wbc->sync_mode == WB_SYNC_ALL) 2153 folio_lock(folio); 2154 else if (!folio_trylock(folio)) 2155 continue; 2156 2157 if (unlikely(!is_node_folio(folio))) { 2158 continue_unlock: 2159 folio_unlock(folio); 2160 continue; 2161 } 2162 2163 if (!folio_test_dirty(folio)) { 2164 /* someone wrote it for us */ 2165 goto continue_unlock; 2166 } 2167 2168 /* flush inline_data/inode, if it's async context. */ 2169 if (!do_balance) 2170 goto write_node; 2171 2172 /* flush inline_data */ 2173 if (folio_test_f2fs_inline(folio)) { 2174 folio_clear_f2fs_inline(folio); 2175 folio_unlock(folio); 2176 flush_inline_data(sbi, ino_of_node(folio)); 2177 goto lock_node; 2178 } 2179 2180 /* flush dirty inode */ 2181 if (IS_INODE(folio) && flush_dirty_inode(folio)) 2182 goto lock_node; 2183 write_node: 2184 f2fs_folio_wait_writeback(folio, NODE, true, true); 2185 2186 if (!folio_clear_dirty_for_io(folio)) 2187 goto continue_unlock; 2188 2189 if (!__write_node_folio(folio, false, false, &submitted, 2190 wbc, do_balance, io_type, NULL)) { 2191 folio_batch_release(&fbatch); 2192 ret = -EIO; 2193 goto out; 2194 } 2195 if (submitted) 2196 nwritten++; 2197 2198 if (--wbc->nr_to_write == 0) 2199 break; 2200 } 2201 folio_batch_release(&fbatch); 2202 cond_resched(); 2203 2204 if (wbc->nr_to_write == 0) { 2205 step = 2; 2206 break; 2207 } 2208 } 2209 2210 if (step < 2) { 2211 if (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) && 2212 wbc->sync_mode == WB_SYNC_NONE && step == 1) 2213 goto out; 2214 step++; 2215 goto next_step; 2216 } 2217 out: 2218 if (nwritten) 2219 f2fs_submit_merged_write(sbi, NODE); 2220 2221 if (unlikely(f2fs_cp_error(sbi))) 2222 return -EIO; 2223 return ret; 2224 } 2225 2226 int f2fs_wait_on_node_pages_writeback(struct f2fs_sb_info *sbi, 2227 unsigned int seq_id) 2228 { 2229 struct fsync_node_entry *fn; 2230 struct list_head *head = &sbi->fsync_node_list; 2231 unsigned long flags; 2232 unsigned int cur_seq_id = 0; 2233 2234 while (seq_id && cur_seq_id < seq_id) { 2235 struct folio *folio; 2236 2237 spin_lock_irqsave(&sbi->fsync_node_lock, flags); 2238 if (list_empty(head)) { 2239 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); 2240 break; 2241 } 2242 fn = list_first_entry(head, struct fsync_node_entry, list); 2243 if (fn->seq_id > seq_id) { 2244 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); 2245 break; 2246 } 2247 cur_seq_id = fn->seq_id; 2248 folio = fn->folio; 2249 folio_get(folio); 2250 spin_unlock_irqrestore(&sbi->fsync_node_lock, flags); 2251 2252 f2fs_folio_wait_writeback(folio, NODE, true, false); 2253 2254 folio_put(folio); 2255 } 2256 2257 return filemap_check_errors(NODE_MAPPING(sbi)); 2258 } 2259 2260 static int f2fs_write_node_pages(struct address_space *mapping, 2261 struct writeback_control *wbc) 2262 { 2263 struct f2fs_sb_info *sbi = F2FS_M_SB(mapping); 2264 struct blk_plug plug; 2265 long diff; 2266 2267 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) 2268 goto skip_write; 2269 2270 /* balancing f2fs's metadata in background */ 2271 f2fs_balance_fs_bg(sbi, true); 2272 2273 /* collect a number of dirty node pages and write together */ 2274 if (wbc->sync_mode != WB_SYNC_ALL && 2275 get_pages(sbi, F2FS_DIRTY_NODES) < 2276 nr_pages_to_skip(sbi, NODE)) 2277 goto skip_write; 2278 2279 if (wbc->sync_mode == WB_SYNC_ALL) 2280 atomic_inc(&sbi->wb_sync_req[NODE]); 2281 else if (atomic_read(&sbi->wb_sync_req[NODE])) { 2282 /* to avoid potential deadlock */ 2283 if (current->plug) 2284 blk_finish_plug(current->plug); 2285 goto skip_write; 2286 } 2287 2288 trace_f2fs_writepages(mapping->host, wbc, NODE); 2289 2290 diff = nr_pages_to_write(sbi, NODE, wbc); 2291 blk_start_plug(&plug); 2292 f2fs_sync_node_pages(sbi, wbc, true, FS_NODE_IO); 2293 blk_finish_plug(&plug); 2294 wbc->nr_to_write = max((long)0, wbc->nr_to_write - diff); 2295 2296 if (wbc->sync_mode == WB_SYNC_ALL) 2297 atomic_dec(&sbi->wb_sync_req[NODE]); 2298 return 0; 2299 2300 skip_write: 2301 wbc->pages_skipped += get_pages(sbi, F2FS_DIRTY_NODES); 2302 trace_f2fs_writepages(mapping->host, wbc, NODE); 2303 return 0; 2304 } 2305 2306 static bool f2fs_dirty_node_folio(struct address_space *mapping, 2307 struct folio *folio) 2308 { 2309 trace_f2fs_set_page_dirty(folio, NODE); 2310 2311 if (!folio_test_uptodate(folio)) 2312 folio_mark_uptodate(folio); 2313 #ifdef CONFIG_F2FS_CHECK_FS 2314 if (IS_INODE(folio)) 2315 f2fs_inode_chksum_set(F2FS_M_SB(mapping), folio); 2316 #endif 2317 if (filemap_dirty_folio(mapping, folio)) { 2318 inc_page_count(F2FS_M_SB(mapping), F2FS_DIRTY_NODES); 2319 folio_set_f2fs_reference(folio); 2320 return true; 2321 } 2322 return false; 2323 } 2324 2325 /* 2326 * Structure of the f2fs node operations 2327 */ 2328 const struct address_space_operations f2fs_node_aops = { 2329 .writepages = f2fs_write_node_pages, 2330 .dirty_folio = f2fs_dirty_node_folio, 2331 .invalidate_folio = f2fs_invalidate_folio, 2332 .release_folio = f2fs_release_folio, 2333 .migrate_folio = filemap_migrate_folio, 2334 }; 2335 2336 static struct free_nid *__lookup_free_nid_list(struct f2fs_nm_info *nm_i, 2337 nid_t n) 2338 { 2339 return radix_tree_lookup(&nm_i->free_nid_root, n); 2340 } 2341 2342 static int __insert_free_nid(struct f2fs_sb_info *sbi, 2343 struct free_nid *i) 2344 { 2345 struct f2fs_nm_info *nm_i = NM_I(sbi); 2346 int err = radix_tree_insert(&nm_i->free_nid_root, i->nid, i); 2347 2348 if (err) 2349 return err; 2350 2351 nm_i->nid_cnt[FREE_NID]++; 2352 list_add_tail(&i->list, &nm_i->free_nid_list); 2353 return 0; 2354 } 2355 2356 static void __remove_free_nid(struct f2fs_sb_info *sbi, 2357 struct free_nid *i, enum nid_state state) 2358 { 2359 struct f2fs_nm_info *nm_i = NM_I(sbi); 2360 2361 f2fs_bug_on(sbi, state != i->state); 2362 nm_i->nid_cnt[state]--; 2363 if (state == FREE_NID) 2364 list_del(&i->list); 2365 radix_tree_delete(&nm_i->free_nid_root, i->nid); 2366 } 2367 2368 static void __move_free_nid(struct f2fs_sb_info *sbi, struct free_nid *i, 2369 enum nid_state org_state, enum nid_state dst_state) 2370 { 2371 struct f2fs_nm_info *nm_i = NM_I(sbi); 2372 2373 f2fs_bug_on(sbi, org_state != i->state); 2374 i->state = dst_state; 2375 nm_i->nid_cnt[org_state]--; 2376 nm_i->nid_cnt[dst_state]++; 2377 2378 switch (dst_state) { 2379 case PREALLOC_NID: 2380 list_del(&i->list); 2381 break; 2382 case FREE_NID: 2383 list_add_tail(&i->list, &nm_i->free_nid_list); 2384 break; 2385 default: 2386 BUG_ON(1); 2387 } 2388 } 2389 2390 static void update_free_nid_bitmap(struct f2fs_sb_info *sbi, nid_t nid, 2391 bool set, bool build) 2392 { 2393 struct f2fs_nm_info *nm_i = NM_I(sbi); 2394 unsigned int nat_ofs = NAT_BLOCK_OFFSET(nid); 2395 unsigned int nid_ofs = nid - START_NID(nid); 2396 2397 if (!test_bit_le(nat_ofs, nm_i->nat_block_bitmap)) 2398 return; 2399 2400 if (set) { 2401 if (test_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs])) 2402 return; 2403 __set_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs]); 2404 nm_i->free_nid_count[nat_ofs]++; 2405 } else { 2406 if (!test_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs])) 2407 return; 2408 __clear_bit_le(nid_ofs, nm_i->free_nid_bitmap[nat_ofs]); 2409 if (!build) 2410 nm_i->free_nid_count[nat_ofs]--; 2411 } 2412 } 2413 2414 /* return if the nid is recognized as free */ 2415 static bool add_free_nid(struct f2fs_sb_info *sbi, 2416 nid_t nid, bool build, bool update) 2417 { 2418 struct f2fs_nm_info *nm_i = NM_I(sbi); 2419 struct free_nid *i, *e; 2420 struct nat_entry *ne; 2421 int err; 2422 bool ret = false; 2423 2424 /* 0 nid should not be used */ 2425 if (unlikely(nid == 0)) 2426 return false; 2427 2428 if (unlikely(f2fs_check_nid_range(sbi, nid))) 2429 return false; 2430 2431 i = f2fs_kmem_cache_alloc(free_nid_slab, GFP_NOFS, true, NULL); 2432 i->nid = nid; 2433 i->state = FREE_NID; 2434 2435 err = radix_tree_preload(GFP_NOFS | __GFP_NOFAIL); 2436 f2fs_bug_on(sbi, err); 2437 2438 err = -EINVAL; 2439 2440 spin_lock(&nm_i->nid_list_lock); 2441 2442 if (build) { 2443 /* 2444 * Thread A Thread B 2445 * - f2fs_create 2446 * - f2fs_new_inode 2447 * - f2fs_alloc_nid 2448 * - __insert_nid_to_list(PREALLOC_NID) 2449 * - f2fs_balance_fs_bg 2450 * - f2fs_build_free_nids 2451 * - __f2fs_build_free_nids 2452 * - scan_nat_page 2453 * - add_free_nid 2454 * - __lookup_nat_cache 2455 * - f2fs_add_link 2456 * - f2fs_init_inode_metadata 2457 * - f2fs_new_inode_folio 2458 * - f2fs_new_node_folio 2459 * - set_node_addr 2460 * - f2fs_alloc_nid_done 2461 * - __remove_nid_from_list(PREALLOC_NID) 2462 * - __insert_nid_to_list(FREE_NID) 2463 */ 2464 ne = __lookup_nat_cache(nm_i, nid, false); 2465 if (ne && (!get_nat_flag(ne, IS_CHECKPOINTED) || 2466 nat_get_blkaddr(ne) != NULL_ADDR)) 2467 goto err_out; 2468 2469 e = __lookup_free_nid_list(nm_i, nid); 2470 if (e) { 2471 if (e->state == FREE_NID) 2472 ret = true; 2473 goto err_out; 2474 } 2475 } 2476 ret = true; 2477 err = __insert_free_nid(sbi, i); 2478 err_out: 2479 if (update) { 2480 update_free_nid_bitmap(sbi, nid, ret, build); 2481 if (!build) 2482 nm_i->available_nids++; 2483 } 2484 spin_unlock(&nm_i->nid_list_lock); 2485 radix_tree_preload_end(); 2486 2487 if (err) 2488 kmem_cache_free(free_nid_slab, i); 2489 return ret; 2490 } 2491 2492 static void remove_free_nid(struct f2fs_sb_info *sbi, nid_t nid) 2493 { 2494 struct f2fs_nm_info *nm_i = NM_I(sbi); 2495 struct free_nid *i; 2496 bool need_free = false; 2497 2498 spin_lock(&nm_i->nid_list_lock); 2499 i = __lookup_free_nid_list(nm_i, nid); 2500 if (i && i->state == FREE_NID) { 2501 __remove_free_nid(sbi, i, FREE_NID); 2502 need_free = true; 2503 } 2504 spin_unlock(&nm_i->nid_list_lock); 2505 2506 if (need_free) 2507 kmem_cache_free(free_nid_slab, i); 2508 } 2509 2510 static int scan_nat_page(struct f2fs_sb_info *sbi, 2511 struct f2fs_nat_block *nat_blk, nid_t start_nid) 2512 { 2513 struct f2fs_nm_info *nm_i = NM_I(sbi); 2514 block_t blk_addr; 2515 unsigned int nat_ofs = NAT_BLOCK_OFFSET(start_nid); 2516 int i; 2517 2518 __set_bit_le(nat_ofs, nm_i->nat_block_bitmap); 2519 2520 i = start_nid % NAT_ENTRY_PER_BLOCK; 2521 2522 for (; i < NAT_ENTRY_PER_BLOCK; i++, start_nid++) { 2523 if (unlikely(start_nid >= nm_i->max_nid)) 2524 break; 2525 2526 blk_addr = le32_to_cpu(nat_blk->entries[i].block_addr); 2527 2528 if (blk_addr == NEW_ADDR) 2529 return -EFSCORRUPTED; 2530 2531 if (blk_addr == NULL_ADDR) { 2532 add_free_nid(sbi, start_nid, true, true); 2533 } else { 2534 spin_lock(&NM_I(sbi)->nid_list_lock); 2535 update_free_nid_bitmap(sbi, start_nid, false, true); 2536 spin_unlock(&NM_I(sbi)->nid_list_lock); 2537 } 2538 } 2539 2540 return 0; 2541 } 2542 2543 static void scan_curseg_cache(struct f2fs_sb_info *sbi) 2544 { 2545 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); 2546 struct f2fs_journal *journal = curseg->journal; 2547 int i; 2548 2549 down_read(&curseg->journal_rwsem); 2550 for (i = 0; i < nats_in_cursum(journal); i++) { 2551 block_t addr; 2552 nid_t nid; 2553 2554 addr = le32_to_cpu(nat_in_journal(journal, i).block_addr); 2555 nid = le32_to_cpu(nid_in_journal(journal, i)); 2556 if (addr == NULL_ADDR) 2557 add_free_nid(sbi, nid, true, false); 2558 else 2559 remove_free_nid(sbi, nid); 2560 } 2561 up_read(&curseg->journal_rwsem); 2562 } 2563 2564 static void scan_free_nid_bits(struct f2fs_sb_info *sbi) 2565 { 2566 struct f2fs_nm_info *nm_i = NM_I(sbi); 2567 unsigned int i, idx; 2568 nid_t nid; 2569 2570 f2fs_down_read(&nm_i->nat_tree_lock); 2571 2572 for (i = 0; i < nm_i->nat_blocks; i++) { 2573 if (!test_bit_le(i, nm_i->nat_block_bitmap)) 2574 continue; 2575 if (!nm_i->free_nid_count[i]) 2576 continue; 2577 for (idx = 0; idx < NAT_ENTRY_PER_BLOCK; idx++) { 2578 idx = find_next_bit_le(nm_i->free_nid_bitmap[i], 2579 NAT_ENTRY_PER_BLOCK, idx); 2580 if (idx >= NAT_ENTRY_PER_BLOCK) 2581 break; 2582 2583 nid = i * NAT_ENTRY_PER_BLOCK + idx; 2584 add_free_nid(sbi, nid, true, false); 2585 2586 if (nm_i->nid_cnt[FREE_NID] >= MAX_FREE_NIDS) 2587 goto out; 2588 } 2589 } 2590 out: 2591 scan_curseg_cache(sbi); 2592 2593 f2fs_up_read(&nm_i->nat_tree_lock); 2594 } 2595 2596 static int __f2fs_build_free_nids(struct f2fs_sb_info *sbi, 2597 bool sync, bool mount) 2598 { 2599 struct f2fs_nm_info *nm_i = NM_I(sbi); 2600 int i = 0, ret; 2601 nid_t nid = nm_i->next_scan_nid; 2602 2603 if (unlikely(nid >= nm_i->max_nid)) 2604 nid = 0; 2605 2606 if (unlikely(nid % NAT_ENTRY_PER_BLOCK)) 2607 nid = NAT_BLOCK_OFFSET(nid) * NAT_ENTRY_PER_BLOCK; 2608 2609 /* Enough entries */ 2610 if (nm_i->nid_cnt[FREE_NID] >= NAT_ENTRY_PER_BLOCK) 2611 return 0; 2612 2613 if (!sync && !f2fs_available_free_memory(sbi, FREE_NIDS)) 2614 return 0; 2615 2616 if (!mount) { 2617 /* try to find free nids in free_nid_bitmap */ 2618 scan_free_nid_bits(sbi); 2619 2620 if (nm_i->nid_cnt[FREE_NID] >= NAT_ENTRY_PER_BLOCK) 2621 return 0; 2622 } 2623 2624 /* readahead nat pages to be scanned */ 2625 f2fs_ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nid), FREE_NID_PAGES, 2626 META_NAT, true); 2627 2628 f2fs_down_read(&nm_i->nat_tree_lock); 2629 2630 while (1) { 2631 if (!test_bit_le(NAT_BLOCK_OFFSET(nid), 2632 nm_i->nat_block_bitmap)) { 2633 struct folio *folio = get_current_nat_folio(sbi, nid); 2634 2635 if (IS_ERR(folio)) { 2636 ret = PTR_ERR(folio); 2637 } else { 2638 ret = scan_nat_page(sbi, folio_address(folio), 2639 nid); 2640 f2fs_folio_put(folio, true); 2641 } 2642 2643 if (ret) { 2644 f2fs_up_read(&nm_i->nat_tree_lock); 2645 2646 if (ret == -EFSCORRUPTED) { 2647 f2fs_err(sbi, "NAT is corrupt, run fsck to fix it"); 2648 set_sbi_flag(sbi, SBI_NEED_FSCK); 2649 f2fs_handle_error(sbi, 2650 ERROR_INCONSISTENT_NAT); 2651 } 2652 2653 return ret; 2654 } 2655 } 2656 2657 nid += (NAT_ENTRY_PER_BLOCK - (nid % NAT_ENTRY_PER_BLOCK)); 2658 if (unlikely(nid >= nm_i->max_nid)) 2659 nid = 0; 2660 2661 if (++i >= FREE_NID_PAGES) 2662 break; 2663 } 2664 2665 /* go to the next free nat pages to find free nids abundantly */ 2666 nm_i->next_scan_nid = nid; 2667 2668 /* find free nids from current sum_pages */ 2669 scan_curseg_cache(sbi); 2670 2671 f2fs_up_read(&nm_i->nat_tree_lock); 2672 2673 f2fs_ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nm_i->next_scan_nid), 2674 nm_i->ra_nid_pages, META_NAT, false); 2675 2676 return 0; 2677 } 2678 2679 int f2fs_build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount) 2680 { 2681 int ret; 2682 2683 mutex_lock(&NM_I(sbi)->build_lock); 2684 ret = __f2fs_build_free_nids(sbi, sync, mount); 2685 mutex_unlock(&NM_I(sbi)->build_lock); 2686 2687 return ret; 2688 } 2689 2690 /* 2691 * If this function returns success, caller can obtain a new nid 2692 * from second parameter of this function. 2693 * The returned nid could be used ino as well as nid when inode is created. 2694 */ 2695 bool f2fs_alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid) 2696 { 2697 struct f2fs_nm_info *nm_i = NM_I(sbi); 2698 struct free_nid *i = NULL; 2699 retry: 2700 if (time_to_inject(sbi, FAULT_ALLOC_NID)) 2701 return false; 2702 2703 spin_lock(&nm_i->nid_list_lock); 2704 2705 if (unlikely(nm_i->available_nids == 0)) { 2706 spin_unlock(&nm_i->nid_list_lock); 2707 return false; 2708 } 2709 2710 /* We should not use stale free nids created by f2fs_build_free_nids */ 2711 if (nm_i->nid_cnt[FREE_NID] && !on_f2fs_build_free_nids(nm_i)) { 2712 f2fs_bug_on(sbi, list_empty(&nm_i->free_nid_list)); 2713 i = list_first_entry(&nm_i->free_nid_list, 2714 struct free_nid, list); 2715 2716 if (unlikely(is_invalid_nid(sbi, i->nid))) { 2717 spin_unlock(&nm_i->nid_list_lock); 2718 f2fs_err(sbi, "Corrupted nid %u in free_nid_list", 2719 i->nid); 2720 fserror_report_metadata(sbi->sb, -EFSCORRUPTED, 2721 GFP_NOFS); 2722 f2fs_stop_checkpoint(sbi, false, 2723 STOP_CP_REASON_CORRUPTED_NID); 2724 return false; 2725 } 2726 2727 *nid = i->nid; 2728 2729 __move_free_nid(sbi, i, FREE_NID, PREALLOC_NID); 2730 nm_i->available_nids--; 2731 2732 update_free_nid_bitmap(sbi, *nid, false, false); 2733 2734 spin_unlock(&nm_i->nid_list_lock); 2735 return true; 2736 } 2737 spin_unlock(&nm_i->nid_list_lock); 2738 2739 /* Let's scan nat pages and its caches to get free nids */ 2740 if (!f2fs_build_free_nids(sbi, true, false)) 2741 goto retry; 2742 return false; 2743 } 2744 2745 /* 2746 * f2fs_alloc_nid() should be called prior to this function. 2747 */ 2748 void f2fs_alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid) 2749 { 2750 struct f2fs_nm_info *nm_i = NM_I(sbi); 2751 struct free_nid *i; 2752 2753 spin_lock(&nm_i->nid_list_lock); 2754 i = __lookup_free_nid_list(nm_i, nid); 2755 f2fs_bug_on(sbi, !i); 2756 __remove_free_nid(sbi, i, PREALLOC_NID); 2757 spin_unlock(&nm_i->nid_list_lock); 2758 2759 kmem_cache_free(free_nid_slab, i); 2760 } 2761 2762 /* 2763 * f2fs_alloc_nid() should be called prior to this function. 2764 */ 2765 void f2fs_alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid) 2766 { 2767 struct f2fs_nm_info *nm_i = NM_I(sbi); 2768 struct free_nid *i; 2769 bool need_free = false; 2770 2771 if (!nid) 2772 return; 2773 2774 spin_lock(&nm_i->nid_list_lock); 2775 i = __lookup_free_nid_list(nm_i, nid); 2776 f2fs_bug_on(sbi, !i); 2777 2778 if (!f2fs_available_free_memory(sbi, FREE_NIDS)) { 2779 __remove_free_nid(sbi, i, PREALLOC_NID); 2780 need_free = true; 2781 } else { 2782 __move_free_nid(sbi, i, PREALLOC_NID, FREE_NID); 2783 } 2784 2785 nm_i->available_nids++; 2786 2787 update_free_nid_bitmap(sbi, nid, true, false); 2788 2789 spin_unlock(&nm_i->nid_list_lock); 2790 2791 if (need_free) 2792 kmem_cache_free(free_nid_slab, i); 2793 } 2794 2795 int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink) 2796 { 2797 struct f2fs_nm_info *nm_i = NM_I(sbi); 2798 int nr = nr_shrink; 2799 2800 if (nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS) 2801 return 0; 2802 2803 if (!mutex_trylock(&nm_i->build_lock)) 2804 return 0; 2805 2806 while (nr_shrink && nm_i->nid_cnt[FREE_NID] > MAX_FREE_NIDS) { 2807 struct free_nid *i, *next; 2808 unsigned int batch = SHRINK_NID_BATCH_SIZE; 2809 2810 spin_lock(&nm_i->nid_list_lock); 2811 list_for_each_entry_safe(i, next, &nm_i->free_nid_list, list) { 2812 if (!nr_shrink || !batch || 2813 nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS) 2814 break; 2815 __remove_free_nid(sbi, i, FREE_NID); 2816 kmem_cache_free(free_nid_slab, i); 2817 nr_shrink--; 2818 batch--; 2819 } 2820 spin_unlock(&nm_i->nid_list_lock); 2821 } 2822 2823 mutex_unlock(&nm_i->build_lock); 2824 2825 return nr - nr_shrink; 2826 } 2827 2828 int f2fs_recover_inline_xattr(struct inode *inode, struct folio *folio) 2829 { 2830 void *src_addr, *dst_addr; 2831 size_t inline_size; 2832 struct folio *ifolio; 2833 struct f2fs_inode *ri; 2834 2835 ifolio = f2fs_get_inode_folio(F2FS_I_SB(inode), inode->i_ino); 2836 if (IS_ERR(ifolio)) 2837 return PTR_ERR(ifolio); 2838 2839 ri = F2FS_INODE(folio); 2840 if (ri->i_inline & F2FS_INLINE_XATTR) { 2841 if (!f2fs_has_inline_xattr(inode)) { 2842 set_inode_flag(inode, FI_INLINE_XATTR); 2843 stat_inc_inline_xattr(inode); 2844 } 2845 } else { 2846 if (f2fs_has_inline_xattr(inode)) { 2847 stat_dec_inline_xattr(inode); 2848 clear_inode_flag(inode, FI_INLINE_XATTR); 2849 } 2850 goto update_inode; 2851 } 2852 2853 dst_addr = inline_xattr_addr(inode, ifolio); 2854 src_addr = inline_xattr_addr(inode, folio); 2855 inline_size = inline_xattr_size(inode); 2856 2857 f2fs_folio_wait_writeback(ifolio, NODE, true, true); 2858 memcpy(dst_addr, src_addr, inline_size); 2859 update_inode: 2860 f2fs_update_inode(inode, ifolio); 2861 f2fs_folio_put(ifolio, true); 2862 return 0; 2863 } 2864 2865 int f2fs_recover_xattr_data(struct inode *inode, struct folio *folio) 2866 { 2867 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 2868 nid_t prev_xnid = F2FS_I(inode)->i_xattr_nid; 2869 nid_t new_xnid; 2870 struct dnode_of_data dn; 2871 struct node_info ni; 2872 struct folio *xfolio; 2873 int err; 2874 2875 if (!prev_xnid) 2876 goto recover_xnid; 2877 2878 /* 1: invalidate the previous xattr nid */ 2879 err = f2fs_get_node_info(sbi, prev_xnid, &ni, false); 2880 if (err) 2881 return err; 2882 2883 f2fs_invalidate_blocks(sbi, ni.blk_addr, 1); 2884 dec_valid_node_count(sbi, inode, false); 2885 set_node_addr(sbi, &ni, NULL_ADDR, false); 2886 2887 recover_xnid: 2888 /* 2: update xattr nid in inode */ 2889 if (!f2fs_alloc_nid(sbi, &new_xnid)) 2890 return -ENOSPC; 2891 2892 set_new_dnode(&dn, inode, NULL, NULL, new_xnid); 2893 xfolio = f2fs_new_node_folio(&dn, XATTR_NODE_OFFSET); 2894 if (IS_ERR(xfolio)) { 2895 f2fs_alloc_nid_failed(sbi, new_xnid); 2896 return PTR_ERR(xfolio); 2897 } 2898 2899 f2fs_alloc_nid_done(sbi, new_xnid); 2900 f2fs_update_inode_page(inode); 2901 2902 /* 3: update and set xattr node page dirty */ 2903 if (folio) { 2904 memcpy(F2FS_NODE(xfolio), F2FS_NODE(folio), 2905 VALID_XATTR_BLOCK_SIZE); 2906 folio_mark_dirty(xfolio); 2907 } 2908 f2fs_folio_put(xfolio, true); 2909 2910 return 0; 2911 } 2912 2913 int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct folio *folio) 2914 { 2915 struct f2fs_inode *src, *dst; 2916 nid_t ino = ino_of_node(folio); 2917 struct node_info old_ni, new_ni; 2918 struct folio *ifolio; 2919 int err; 2920 2921 err = f2fs_get_node_info(sbi, ino, &old_ni, false); 2922 if (err) 2923 return err; 2924 2925 if (unlikely(old_ni.blk_addr != NULL_ADDR)) 2926 return -EINVAL; 2927 retry: 2928 ifolio = f2fs_grab_cache_folio(NODE_MAPPING(sbi), ino, false); 2929 if (IS_ERR(ifolio)) { 2930 memalloc_retry_wait(GFP_NOFS); 2931 goto retry; 2932 } 2933 2934 /* Should not use this inode from free nid list */ 2935 remove_free_nid(sbi, ino); 2936 2937 if (!folio_test_uptodate(ifolio)) 2938 folio_mark_uptodate(ifolio); 2939 fill_node_footer(ifolio, ino, ino, 0, true); 2940 set_cold_node(ifolio, false); 2941 2942 src = F2FS_INODE(folio); 2943 dst = F2FS_INODE(ifolio); 2944 2945 memcpy(dst, src, offsetof(struct f2fs_inode, i_ext)); 2946 dst->i_size = 0; 2947 dst->i_blocks = cpu_to_le64(1); 2948 dst->i_links = cpu_to_le32(1); 2949 dst->i_xattr_nid = 0; 2950 dst->i_inline = src->i_inline & (F2FS_INLINE_XATTR | F2FS_EXTRA_ATTR); 2951 if (dst->i_inline & F2FS_EXTRA_ATTR) { 2952 dst->i_extra_isize = src->i_extra_isize; 2953 2954 if (f2fs_sb_has_flexible_inline_xattr(sbi) && 2955 F2FS_FITS_IN_INODE(src, le16_to_cpu(src->i_extra_isize), 2956 i_inline_xattr_size)) 2957 dst->i_inline_xattr_size = src->i_inline_xattr_size; 2958 2959 if (f2fs_sb_has_project_quota(sbi) && 2960 F2FS_FITS_IN_INODE(src, le16_to_cpu(src->i_extra_isize), 2961 i_projid)) 2962 dst->i_projid = src->i_projid; 2963 2964 if (f2fs_sb_has_inode_crtime(sbi) && 2965 F2FS_FITS_IN_INODE(src, le16_to_cpu(src->i_extra_isize), 2966 i_crtime_nsec)) { 2967 dst->i_crtime = src->i_crtime; 2968 dst->i_crtime_nsec = src->i_crtime_nsec; 2969 } 2970 } 2971 2972 new_ni = old_ni; 2973 new_ni.ino = ino; 2974 2975 if (unlikely(inc_valid_node_count(sbi, NULL, true))) 2976 WARN_ON(1); 2977 set_node_addr(sbi, &new_ni, NEW_ADDR, false); 2978 inc_valid_inode_count(sbi); 2979 folio_mark_dirty(ifolio); 2980 f2fs_folio_put(ifolio, true); 2981 return 0; 2982 } 2983 2984 int f2fs_restore_node_summary(struct f2fs_sb_info *sbi, 2985 unsigned int segno, struct f2fs_summary_block *sum) 2986 { 2987 struct f2fs_node *rn; 2988 struct f2fs_summary *sum_entry; 2989 block_t addr; 2990 int i, idx, last_offset, nrpages; 2991 2992 /* scan the node segment */ 2993 last_offset = BLKS_PER_SEG(sbi); 2994 addr = START_BLOCK(sbi, segno); 2995 sum_entry = sum_entries(sum); 2996 2997 for (i = 0; i < last_offset; i += nrpages, addr += nrpages) { 2998 nrpages = bio_max_segs(last_offset - i); 2999 3000 /* readahead node pages */ 3001 f2fs_ra_meta_pages(sbi, addr, nrpages, META_POR, true); 3002 3003 for (idx = addr; idx < addr + nrpages; idx++) { 3004 struct folio *folio = f2fs_get_tmp_folio(sbi, idx); 3005 3006 if (IS_ERR(folio)) 3007 return PTR_ERR(folio); 3008 3009 rn = F2FS_NODE(folio); 3010 sum_entry->nid = rn->footer.nid; 3011 sum_entry->version = 0; 3012 sum_entry->ofs_in_node = 0; 3013 sum_entry++; 3014 f2fs_folio_put(folio, true); 3015 } 3016 3017 invalidate_mapping_pages(META_MAPPING(sbi), addr, 3018 addr + nrpages); 3019 } 3020 return 0; 3021 } 3022 3023 static void remove_nats_in_journal(struct f2fs_sb_info *sbi) 3024 { 3025 struct f2fs_nm_info *nm_i = NM_I(sbi); 3026 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); 3027 struct f2fs_journal *journal = curseg->journal; 3028 int i; 3029 bool init_dirty; 3030 3031 down_write(&curseg->journal_rwsem); 3032 for (i = 0; i < nats_in_cursum(journal); i++) { 3033 struct nat_entry *ne; 3034 struct f2fs_nat_entry raw_ne; 3035 nid_t nid = le32_to_cpu(nid_in_journal(journal, i)); 3036 3037 if (f2fs_check_nid_range(sbi, nid)) 3038 continue; 3039 3040 init_dirty = false; 3041 3042 raw_ne = nat_in_journal(journal, i); 3043 3044 ne = __lookup_nat_cache(nm_i, nid, true); 3045 if (!ne) { 3046 init_dirty = true; 3047 ne = __alloc_nat_entry(sbi, nid, true); 3048 __init_nat_entry(nm_i, ne, &raw_ne, true, true); 3049 } 3050 3051 /* 3052 * if a free nat in journal has not been used after last 3053 * checkpoint, we should remove it from available nids, 3054 * since later we will add it again. 3055 */ 3056 if (!get_nat_flag(ne, IS_DIRTY) && 3057 le32_to_cpu(raw_ne.block_addr) == NULL_ADDR) { 3058 spin_lock(&nm_i->nid_list_lock); 3059 nm_i->available_nids--; 3060 spin_unlock(&nm_i->nid_list_lock); 3061 } 3062 3063 __set_nat_cache_dirty(nm_i, ne, init_dirty); 3064 } 3065 update_nats_in_cursum(journal, -i); 3066 up_write(&curseg->journal_rwsem); 3067 } 3068 3069 static void __adjust_nat_entry_set(struct nat_entry_set *nes, 3070 struct list_head *head, int max) 3071 { 3072 struct nat_entry_set *cur; 3073 3074 if (nes->entry_cnt >= max) 3075 goto add_out; 3076 3077 list_for_each_entry(cur, head, set_list) { 3078 if (cur->entry_cnt >= nes->entry_cnt) { 3079 list_add(&nes->set_list, cur->set_list.prev); 3080 return; 3081 } 3082 } 3083 add_out: 3084 list_add_tail(&nes->set_list, head); 3085 } 3086 3087 static void __update_nat_bits(struct f2fs_sb_info *sbi, nid_t start_nid, 3088 const struct f2fs_nat_block *nat_blk) 3089 { 3090 struct f2fs_nm_info *nm_i = NM_I(sbi); 3091 unsigned int nat_index = start_nid / NAT_ENTRY_PER_BLOCK; 3092 int valid = 0; 3093 int i = 0; 3094 3095 if (!enabled_nat_bits(sbi, NULL)) 3096 return; 3097 3098 if (nat_index == 0) { 3099 valid = 1; 3100 i = 1; 3101 } 3102 for (; i < NAT_ENTRY_PER_BLOCK; i++) { 3103 if (le32_to_cpu(nat_blk->entries[i].block_addr) != NULL_ADDR) 3104 valid++; 3105 } 3106 if (valid == 0) { 3107 __set_bit_le(nat_index, nm_i->empty_nat_bits); 3108 __clear_bit_le(nat_index, nm_i->full_nat_bits); 3109 return; 3110 } 3111 3112 __clear_bit_le(nat_index, nm_i->empty_nat_bits); 3113 if (valid == NAT_ENTRY_PER_BLOCK) 3114 __set_bit_le(nat_index, nm_i->full_nat_bits); 3115 else 3116 __clear_bit_le(nat_index, nm_i->full_nat_bits); 3117 } 3118 3119 static int __flush_nat_entry_set(struct f2fs_sb_info *sbi, 3120 struct nat_entry_set *set, struct cp_control *cpc) 3121 { 3122 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); 3123 struct f2fs_journal *journal = curseg->journal; 3124 nid_t start_nid = set->set * NAT_ENTRY_PER_BLOCK; 3125 bool to_journal = true; 3126 struct f2fs_nat_block *nat_blk; 3127 struct nat_entry *ne, *cur; 3128 struct folio *folio = NULL; 3129 3130 /* 3131 * there are two steps to flush nat entries: 3132 * #1, flush nat entries to journal in current hot data summary block. 3133 * #2, flush nat entries to nat page. 3134 */ 3135 if (enabled_nat_bits(sbi, cpc) || 3136 !__has_cursum_space(sbi, journal, set->entry_cnt, NAT_JOURNAL)) 3137 to_journal = false; 3138 3139 if (to_journal) { 3140 down_write(&curseg->journal_rwsem); 3141 } else { 3142 folio = get_next_nat_folio(sbi, start_nid); 3143 if (IS_ERR(folio)) 3144 return PTR_ERR(folio); 3145 3146 nat_blk = folio_address(folio); 3147 f2fs_bug_on(sbi, !nat_blk); 3148 } 3149 3150 /* flush dirty nats in nat entry set */ 3151 list_for_each_entry_safe(ne, cur, &set->entry_list, list) { 3152 struct f2fs_nat_entry *raw_ne; 3153 nid_t nid = nat_get_nid(ne); 3154 int offset; 3155 3156 f2fs_bug_on(sbi, nat_get_blkaddr(ne) == NEW_ADDR); 3157 3158 if (to_journal) { 3159 offset = f2fs_lookup_journal_in_cursum(sbi, journal, 3160 NAT_JOURNAL, nid, 1); 3161 f2fs_bug_on(sbi, offset < 0); 3162 raw_ne = &nat_in_journal(journal, offset); 3163 nid_in_journal(journal, offset) = cpu_to_le32(nid); 3164 } else { 3165 raw_ne = &nat_blk->entries[nid - start_nid]; 3166 } 3167 raw_nat_from_node_info(raw_ne, &ne->ni); 3168 nat_reset_flag(ne); 3169 __clear_nat_cache_dirty(NM_I(sbi), set, ne); 3170 if (nat_get_blkaddr(ne) == NULL_ADDR) { 3171 add_free_nid(sbi, nid, false, true); 3172 } else { 3173 spin_lock(&NM_I(sbi)->nid_list_lock); 3174 update_free_nid_bitmap(sbi, nid, false, false); 3175 spin_unlock(&NM_I(sbi)->nid_list_lock); 3176 } 3177 } 3178 3179 if (to_journal) { 3180 up_write(&curseg->journal_rwsem); 3181 } else { 3182 __update_nat_bits(sbi, start_nid, nat_blk); 3183 f2fs_folio_put(folio, true); 3184 } 3185 3186 /* Allow dirty nats by node block allocation in write_begin */ 3187 if (!set->entry_cnt) { 3188 radix_tree_delete(&NM_I(sbi)->nat_set_root, set->set); 3189 kmem_cache_free(nat_entry_set_slab, set); 3190 } 3191 return 0; 3192 } 3193 3194 /* 3195 * This function is called during the checkpointing process. 3196 */ 3197 int f2fs_flush_nat_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc) 3198 { 3199 struct f2fs_nm_info *nm_i = NM_I(sbi); 3200 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); 3201 struct f2fs_journal *journal = curseg->journal; 3202 struct nat_entry_set *setvec[NAT_VEC_SIZE]; 3203 struct nat_entry_set *set, *tmp; 3204 unsigned int found, entry_count = 0; 3205 nid_t set_idx = 0; 3206 LIST_HEAD(sets); 3207 int err = 0; 3208 3209 /* 3210 * during unmount, let's flush nat_bits before checking 3211 * nat_cnt[DIRTY_NAT]. 3212 */ 3213 if (enabled_nat_bits(sbi, cpc)) { 3214 f2fs_down_write(&nm_i->nat_tree_lock); 3215 remove_nats_in_journal(sbi); 3216 f2fs_up_write(&nm_i->nat_tree_lock); 3217 } 3218 3219 if (!nm_i->nat_cnt[DIRTY_NAT]) 3220 return 0; 3221 3222 f2fs_down_write(&nm_i->nat_tree_lock); 3223 3224 /* 3225 * if there are no enough space in journal to store dirty nat 3226 * entries, remove all entries from journal and merge them 3227 * into nat entry set. 3228 */ 3229 if (enabled_nat_bits(sbi, cpc) || 3230 !__has_cursum_space(sbi, journal, 3231 nm_i->nat_cnt[DIRTY_NAT], NAT_JOURNAL)) 3232 remove_nats_in_journal(sbi); 3233 3234 while ((found = __gang_lookup_nat_set(nm_i, 3235 set_idx, NAT_VEC_SIZE, setvec))) { 3236 unsigned idx; 3237 3238 set_idx = setvec[found - 1]->set + 1; 3239 for (idx = 0; idx < found; idx++) 3240 __adjust_nat_entry_set(setvec[idx], &sets, 3241 MAX_NAT_JENTRIES(sbi, journal)); 3242 } 3243 3244 /* 3245 * Readahead the current NAT block to prevent read requests from 3246 * being issued and waited on one by one. 3247 */ 3248 list_for_each_entry(set, &sets, set_list) { 3249 entry_count += set->entry_cnt; 3250 if (!enabled_nat_bits(sbi, cpc) && 3251 __has_cursum_space(sbi, journal, 3252 entry_count, NAT_JOURNAL)) 3253 continue; 3254 f2fs_ra_meta_pages(sbi, set->set, 1, META_NAT, true); 3255 } 3256 /* flush dirty nats in nat entry set */ 3257 list_for_each_entry_safe(set, tmp, &sets, set_list) { 3258 err = __flush_nat_entry_set(sbi, set, cpc); 3259 if (err) 3260 break; 3261 } 3262 3263 f2fs_up_write(&nm_i->nat_tree_lock); 3264 /* Allow dirty nats by node block allocation in write_begin */ 3265 3266 return err; 3267 } 3268 3269 static int __get_nat_bitmaps(struct f2fs_sb_info *sbi) 3270 { 3271 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); 3272 struct f2fs_nm_info *nm_i = NM_I(sbi); 3273 unsigned int nat_bits_bytes = nm_i->nat_blocks / BITS_PER_BYTE; 3274 unsigned int i; 3275 __u64 cp_ver = cur_cp_version(ckpt); 3276 block_t nat_bits_addr; 3277 3278 if (!enabled_nat_bits(sbi, NULL)) 3279 return 0; 3280 3281 nm_i->nat_bits_blocks = F2FS_BLK_ALIGN((nat_bits_bytes << 1) + 8); 3282 nm_i->nat_bits = f2fs_kvzalloc(sbi, 3283 F2FS_BLK_TO_BYTES(nm_i->nat_bits_blocks), GFP_KERNEL); 3284 if (!nm_i->nat_bits) 3285 return -ENOMEM; 3286 3287 nat_bits_addr = __start_cp_addr(sbi) + BLKS_PER_SEG(sbi) - 3288 nm_i->nat_bits_blocks; 3289 for (i = 0; i < nm_i->nat_bits_blocks; i++) { 3290 struct folio *folio; 3291 3292 folio = f2fs_get_meta_folio(sbi, nat_bits_addr++); 3293 if (IS_ERR(folio)) 3294 return PTR_ERR(folio); 3295 3296 memcpy(nm_i->nat_bits + F2FS_BLK_TO_BYTES(i), 3297 folio_address(folio), F2FS_BLKSIZE); 3298 f2fs_folio_put(folio, true); 3299 } 3300 3301 cp_ver |= (cur_cp_crc(ckpt) << 32); 3302 if (cpu_to_le64(cp_ver) != *(__le64 *)nm_i->nat_bits) { 3303 disable_nat_bits(sbi, true); 3304 return 0; 3305 } 3306 3307 nm_i->full_nat_bits = nm_i->nat_bits + 8; 3308 nm_i->empty_nat_bits = nm_i->full_nat_bits + nat_bits_bytes; 3309 3310 f2fs_notice(sbi, "Found nat_bits in checkpoint"); 3311 return 0; 3312 } 3313 3314 static inline void load_free_nid_bitmap(struct f2fs_sb_info *sbi) 3315 { 3316 struct f2fs_nm_info *nm_i = NM_I(sbi); 3317 unsigned int i = 0; 3318 nid_t nid, last_nid; 3319 3320 if (!enabled_nat_bits(sbi, NULL)) 3321 return; 3322 3323 for (i = 0; i < nm_i->nat_blocks; i++) { 3324 i = find_next_bit_le(nm_i->empty_nat_bits, nm_i->nat_blocks, i); 3325 if (i >= nm_i->nat_blocks) 3326 break; 3327 3328 __set_bit_le(i, nm_i->nat_block_bitmap); 3329 3330 nid = i * NAT_ENTRY_PER_BLOCK; 3331 last_nid = nid + NAT_ENTRY_PER_BLOCK; 3332 3333 spin_lock(&NM_I(sbi)->nid_list_lock); 3334 for (; nid < last_nid; nid++) 3335 update_free_nid_bitmap(sbi, nid, true, true); 3336 spin_unlock(&NM_I(sbi)->nid_list_lock); 3337 } 3338 3339 for (i = 0; i < nm_i->nat_blocks; i++) { 3340 i = find_next_bit_le(nm_i->full_nat_bits, nm_i->nat_blocks, i); 3341 if (i >= nm_i->nat_blocks) 3342 break; 3343 3344 __set_bit_le(i, nm_i->nat_block_bitmap); 3345 } 3346 } 3347 3348 static int init_node_manager(struct f2fs_sb_info *sbi) 3349 { 3350 struct f2fs_super_block *sb_raw = F2FS_RAW_SUPER(sbi); 3351 struct f2fs_nm_info *nm_i = NM_I(sbi); 3352 unsigned char *version_bitmap; 3353 unsigned int nat_segs; 3354 int err; 3355 3356 nm_i->nat_blkaddr = le32_to_cpu(sb_raw->nat_blkaddr); 3357 3358 /* segment_count_nat includes pair segment so divide to 2. */ 3359 nat_segs = le32_to_cpu(sb_raw->segment_count_nat) >> 1; 3360 nm_i->nat_blocks = nat_segs << le32_to_cpu(sb_raw->log_blocks_per_seg); 3361 nm_i->max_nid = NAT_ENTRY_PER_BLOCK * nm_i->nat_blocks; 3362 3363 /* not used nids: 0, node, meta, (and root counted as valid node) */ 3364 nm_i->available_nids = nm_i->max_nid - sbi->total_valid_node_count - 3365 F2FS_RESERVED_NODE_NUM; 3366 nm_i->nid_cnt[FREE_NID] = 0; 3367 nm_i->nid_cnt[PREALLOC_NID] = 0; 3368 nm_i->ram_thresh = DEF_RAM_THRESHOLD; 3369 nm_i->ra_nid_pages = DEF_RA_NID_PAGES; 3370 nm_i->dirty_nats_ratio = DEF_DIRTY_NAT_RATIO_THRESHOLD; 3371 nm_i->max_rf_node_blocks = DEF_RF_NODE_BLOCKS; 3372 3373 INIT_RADIX_TREE(&nm_i->free_nid_root, GFP_ATOMIC); 3374 INIT_LIST_HEAD(&nm_i->free_nid_list); 3375 INIT_RADIX_TREE(&nm_i->nat_root, GFP_NOIO); 3376 INIT_RADIX_TREE(&nm_i->nat_set_root, GFP_NOIO); 3377 INIT_LIST_HEAD(&nm_i->nat_entries); 3378 spin_lock_init(&nm_i->nat_list_lock); 3379 3380 mutex_init(&nm_i->build_lock); 3381 spin_lock_init(&nm_i->nid_list_lock); 3382 init_f2fs_rwsem(&nm_i->nat_tree_lock); 3383 3384 nm_i->next_scan_nid = le32_to_cpu(sbi->ckpt->next_free_nid); 3385 nm_i->bitmap_size = __bitmap_size(sbi, NAT_BITMAP); 3386 version_bitmap = __bitmap_ptr(sbi, NAT_BITMAP); 3387 nm_i->nat_bitmap = kmemdup(version_bitmap, nm_i->bitmap_size, 3388 GFP_KERNEL); 3389 if (!nm_i->nat_bitmap) 3390 return -ENOMEM; 3391 3392 if (!test_opt(sbi, NAT_BITS)) 3393 disable_nat_bits(sbi, true); 3394 3395 err = __get_nat_bitmaps(sbi); 3396 if (err) 3397 return err; 3398 3399 #ifdef CONFIG_F2FS_CHECK_FS 3400 nm_i->nat_bitmap_mir = kmemdup(version_bitmap, nm_i->bitmap_size, 3401 GFP_KERNEL); 3402 if (!nm_i->nat_bitmap_mir) 3403 return -ENOMEM; 3404 #endif 3405 3406 return 0; 3407 } 3408 3409 static int init_free_nid_cache(struct f2fs_sb_info *sbi) 3410 { 3411 struct f2fs_nm_info *nm_i = NM_I(sbi); 3412 int i; 3413 3414 nm_i->free_nid_bitmap = 3415 f2fs_kvzalloc(sbi, array_size(sizeof(unsigned char *), 3416 nm_i->nat_blocks), 3417 GFP_KERNEL); 3418 if (!nm_i->free_nid_bitmap) 3419 return -ENOMEM; 3420 3421 for (i = 0; i < nm_i->nat_blocks; i++) { 3422 nm_i->free_nid_bitmap[i] = f2fs_kvzalloc(sbi, 3423 f2fs_bitmap_size(NAT_ENTRY_PER_BLOCK), GFP_KERNEL); 3424 if (!nm_i->free_nid_bitmap[i]) 3425 return -ENOMEM; 3426 } 3427 3428 nm_i->nat_block_bitmap = f2fs_kvzalloc(sbi, nm_i->nat_blocks / 8, 3429 GFP_KERNEL); 3430 if (!nm_i->nat_block_bitmap) 3431 return -ENOMEM; 3432 3433 nm_i->free_nid_count = 3434 f2fs_kvzalloc(sbi, array_size(sizeof(unsigned short), 3435 nm_i->nat_blocks), 3436 GFP_KERNEL); 3437 if (!nm_i->free_nid_count) 3438 return -ENOMEM; 3439 return 0; 3440 } 3441 3442 int f2fs_build_node_manager(struct f2fs_sb_info *sbi) 3443 { 3444 int err; 3445 3446 sbi->nm_info = f2fs_kzalloc(sbi, sizeof(struct f2fs_nm_info), 3447 GFP_KERNEL); 3448 if (!sbi->nm_info) 3449 return -ENOMEM; 3450 3451 err = init_node_manager(sbi); 3452 if (err) 3453 return err; 3454 3455 err = init_free_nid_cache(sbi); 3456 if (err) 3457 return err; 3458 3459 /* load free nid status from nat_bits table */ 3460 load_free_nid_bitmap(sbi); 3461 3462 return f2fs_build_free_nids(sbi, true, true); 3463 } 3464 3465 void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi) 3466 { 3467 struct f2fs_nm_info *nm_i = NM_I(sbi); 3468 struct free_nid *i, *next_i; 3469 void *vec[NAT_VEC_SIZE]; 3470 struct nat_entry **natvec = (struct nat_entry **)vec; 3471 struct nat_entry_set **setvec = (struct nat_entry_set **)vec; 3472 nid_t nid = 0; 3473 unsigned int found; 3474 3475 if (!nm_i) 3476 return; 3477 3478 /* destroy free nid list */ 3479 spin_lock(&nm_i->nid_list_lock); 3480 list_for_each_entry_safe(i, next_i, &nm_i->free_nid_list, list) { 3481 __remove_free_nid(sbi, i, FREE_NID); 3482 spin_unlock(&nm_i->nid_list_lock); 3483 kmem_cache_free(free_nid_slab, i); 3484 spin_lock(&nm_i->nid_list_lock); 3485 } 3486 f2fs_bug_on(sbi, nm_i->nid_cnt[FREE_NID]); 3487 f2fs_bug_on(sbi, nm_i->nid_cnt[PREALLOC_NID]); 3488 f2fs_bug_on(sbi, !list_empty(&nm_i->free_nid_list)); 3489 spin_unlock(&nm_i->nid_list_lock); 3490 3491 /* destroy nat cache */ 3492 f2fs_down_write(&nm_i->nat_tree_lock); 3493 while ((found = __gang_lookup_nat_cache(nm_i, 3494 nid, NAT_VEC_SIZE, natvec))) { 3495 unsigned idx; 3496 3497 nid = nat_get_nid(natvec[found - 1]) + 1; 3498 for (idx = 0; idx < found; idx++) { 3499 spin_lock(&nm_i->nat_list_lock); 3500 list_del(&natvec[idx]->list); 3501 spin_unlock(&nm_i->nat_list_lock); 3502 3503 __del_from_nat_cache(nm_i, natvec[idx]); 3504 } 3505 } 3506 f2fs_bug_on(sbi, nm_i->nat_cnt[TOTAL_NAT]); 3507 3508 /* destroy nat set cache */ 3509 nid = 0; 3510 memset(vec, 0, sizeof(void *) * NAT_VEC_SIZE); 3511 while ((found = __gang_lookup_nat_set(nm_i, 3512 nid, NAT_VEC_SIZE, setvec))) { 3513 unsigned idx; 3514 3515 nid = setvec[found - 1]->set + 1; 3516 for (idx = 0; idx < found; idx++) { 3517 /* entry_cnt is not zero, when cp_error was occurred */ 3518 f2fs_bug_on(sbi, !list_empty(&setvec[idx]->entry_list)); 3519 radix_tree_delete(&nm_i->nat_set_root, setvec[idx]->set); 3520 kmem_cache_free(nat_entry_set_slab, setvec[idx]); 3521 } 3522 } 3523 f2fs_up_write(&nm_i->nat_tree_lock); 3524 3525 kvfree(nm_i->nat_block_bitmap); 3526 if (nm_i->free_nid_bitmap) { 3527 int i; 3528 3529 for (i = 0; i < nm_i->nat_blocks; i++) 3530 kvfree(nm_i->free_nid_bitmap[i]); 3531 kvfree(nm_i->free_nid_bitmap); 3532 } 3533 kvfree(nm_i->free_nid_count); 3534 3535 kfree(nm_i->nat_bitmap); 3536 kvfree(nm_i->nat_bits); 3537 #ifdef CONFIG_F2FS_CHECK_FS 3538 kfree(nm_i->nat_bitmap_mir); 3539 #endif 3540 sbi->nm_info = NULL; 3541 kfree(nm_i); 3542 } 3543 3544 int __init f2fs_create_node_manager_caches(void) 3545 { 3546 nat_entry_slab = f2fs_kmem_cache_create("f2fs_nat_entry", 3547 sizeof(struct nat_entry)); 3548 if (!nat_entry_slab) 3549 goto fail; 3550 3551 free_nid_slab = f2fs_kmem_cache_create("f2fs_free_nid", 3552 sizeof(struct free_nid)); 3553 if (!free_nid_slab) 3554 goto destroy_nat_entry; 3555 3556 nat_entry_set_slab = f2fs_kmem_cache_create("f2fs_nat_entry_set", 3557 sizeof(struct nat_entry_set)); 3558 if (!nat_entry_set_slab) 3559 goto destroy_free_nid; 3560 3561 fsync_node_entry_slab = f2fs_kmem_cache_create("f2fs_fsync_node_entry", 3562 sizeof(struct fsync_node_entry)); 3563 if (!fsync_node_entry_slab) 3564 goto destroy_nat_entry_set; 3565 return 0; 3566 3567 destroy_nat_entry_set: 3568 kmem_cache_destroy(nat_entry_set_slab); 3569 destroy_free_nid: 3570 kmem_cache_destroy(free_nid_slab); 3571 destroy_nat_entry: 3572 kmem_cache_destroy(nat_entry_slab); 3573 fail: 3574 return -ENOMEM; 3575 } 3576 3577 void f2fs_destroy_node_manager_caches(void) 3578 { 3579 kmem_cache_destroy(fsync_node_entry_slab); 3580 kmem_cache_destroy(nat_entry_set_slab); 3581 kmem_cache_destroy(free_nid_slab); 3582 kmem_cache_destroy(nat_entry_slab); 3583 } 3584