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