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