node.c (355a47ae7ebcf9d605aa809b259d380422e81b8d) | node.c (dcbb4c10e6d9693cc9d6fa493b4d130b66a60c7d) |
---|---|
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> --- 20 unchanged lines hidden (view full) --- 29 30/* 31 * Check whether the given nid is within node id range. 32 */ 33int f2fs_check_nid_range(struct f2fs_sb_info *sbi, nid_t nid) 34{ 35 if (unlikely(nid < F2FS_ROOT_INO(sbi) || nid >= NM_I(sbi)->max_nid)) { 36 set_sbi_flag(sbi, SBI_NEED_FSCK); | 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> --- 20 unchanged lines hidden (view full) --- 29 30/* 31 * Check whether the given nid is within node id range. 32 */ 33int f2fs_check_nid_range(struct f2fs_sb_info *sbi, nid_t nid) 34{ 35 if (unlikely(nid < F2FS_ROOT_INO(sbi) || nid >= NM_I(sbi)->max_nid)) { 36 set_sbi_flag(sbi, SBI_NEED_FSCK); |
37 f2fs_msg(sbi->sb, KERN_WARNING, 38 "%s: out-of-range nid=%x, run fsck to fix.", 39 __func__, nid); | 37 f2fs_warn(sbi, "%s: out-of-range nid=%x, run fsck to fix.", 38 __func__, nid); |
40 return -EINVAL; 41 } 42 return 0; 43} 44 45bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type) 46{ 47 struct f2fs_nm_info *nm_i = NM_I(sbi); --- 1136 unchanged lines hidden (view full) --- 1184 1185 /* 0 is possible, after f2fs_new_inode() has failed */ 1186 if (unlikely(f2fs_cp_error(F2FS_I_SB(inode)))) { 1187 f2fs_put_dnode(&dn); 1188 return -EIO; 1189 } 1190 1191 if (unlikely(inode->i_blocks != 0 && inode->i_blocks != 8)) { | 39 return -EINVAL; 40 } 41 return 0; 42} 43 44bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type) 45{ 46 struct f2fs_nm_info *nm_i = NM_I(sbi); --- 1136 unchanged lines hidden (view full) --- 1183 1184 /* 0 is possible, after f2fs_new_inode() has failed */ 1185 if (unlikely(f2fs_cp_error(F2FS_I_SB(inode)))) { 1186 f2fs_put_dnode(&dn); 1187 return -EIO; 1188 } 1189 1190 if (unlikely(inode->i_blocks != 0 && inode->i_blocks != 8)) { |
1192 f2fs_msg(F2FS_I_SB(inode)->sb, KERN_WARNING, 1193 "Inconsistent i_blocks, ino:%lu, iblocks:%llu", 1194 inode->i_ino, 1195 (unsigned long long)inode->i_blocks); | 1191 f2fs_warn(F2FS_I_SB(inode), "Inconsistent i_blocks, ino:%lu, iblocks:%llu", 1192 inode->i_ino, (unsigned long long)inode->i_blocks); |
1196 set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK); 1197 } 1198 1199 /* will put inode & node pages */ 1200 err = truncate_node(&dn); 1201 if (err) { 1202 f2fs_put_dnode(&dn); 1203 return err; --- 171 unchanged lines hidden (view full) --- 1375 } 1376 1377 if (!f2fs_inode_chksum_verify(sbi, page)) { 1378 err = -EBADMSG; 1379 goto out_err; 1380 } 1381page_hit: 1382 if(unlikely(nid != nid_of_node(page))) { | 1193 set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK); 1194 } 1195 1196 /* will put inode & node pages */ 1197 err = truncate_node(&dn); 1198 if (err) { 1199 f2fs_put_dnode(&dn); 1200 return err; --- 171 unchanged lines hidden (view full) --- 1372 } 1373 1374 if (!f2fs_inode_chksum_verify(sbi, page)) { 1375 err = -EBADMSG; 1376 goto out_err; 1377 } 1378page_hit: 1379 if(unlikely(nid != nid_of_node(page))) { |
1383 f2fs_msg(sbi->sb, KERN_WARNING, "inconsistent node block, " 1384 "nid:%lu, node_footer[nid:%u,ino:%u,ofs:%u,cpver:%llu,blkaddr:%u]", 1385 nid, nid_of_node(page), ino_of_node(page), 1386 ofs_of_node(page), cpver_of_node(page), 1387 next_blkaddr_of_node(page)); | 1380 f2fs_warn(sbi, "inconsistent node block, nid:%lu, node_footer[nid:%u,ino:%u,ofs:%u,cpver:%llu,blkaddr:%u]", 1381 nid, nid_of_node(page), ino_of_node(page), 1382 ofs_of_node(page), cpver_of_node(page), 1383 next_blkaddr_of_node(page)); |
1388 err = -EINVAL; 1389out_err: 1390 ClearPageUptodate(page); 1391 f2fs_put_page(page, 1); 1392 return ERR_PTR(err); 1393 } 1394 return page; 1395} --- 351 unchanged lines hidden (view full) --- 1747 } 1748 pagevec_release(&pvec); 1749 cond_resched(); 1750 1751 if (ret || marked) 1752 break; 1753 } 1754 if (!ret && atomic && !marked) { | 1384 err = -EINVAL; 1385out_err: 1386 ClearPageUptodate(page); 1387 f2fs_put_page(page, 1); 1388 return ERR_PTR(err); 1389 } 1390 return page; 1391} --- 351 unchanged lines hidden (view full) --- 1743 } 1744 pagevec_release(&pvec); 1745 cond_resched(); 1746 1747 if (ret || marked) 1748 break; 1749 } 1750 if (!ret && atomic && !marked) { |
1755 f2fs_msg(sbi->sb, KERN_DEBUG, 1756 "Retry to write fsync mark: ino=%u, idx=%lx", 1757 ino, last_page->index); | 1751 f2fs_debug(sbi, "Retry to write fsync mark: ino=%u, idx=%lx", 1752 ino, last_page->index); |
1758 lock_page(last_page); 1759 f2fs_wait_on_page_writeback(last_page, NODE, true, true); 1760 set_page_dirty(last_page); 1761 unlock_page(last_page); 1762 goto retry; 1763 } 1764out: 1765 if (nwritten) --- 533 unchanged lines hidden (view full) --- 2299 } else { 2300 ret = scan_nat_page(sbi, page, nid); 2301 f2fs_put_page(page, 1); 2302 } 2303 2304 if (ret) { 2305 up_read(&nm_i->nat_tree_lock); 2306 f2fs_bug_on(sbi, !mount); | 1753 lock_page(last_page); 1754 f2fs_wait_on_page_writeback(last_page, NODE, true, true); 1755 set_page_dirty(last_page); 1756 unlock_page(last_page); 1757 goto retry; 1758 } 1759out: 1760 if (nwritten) --- 533 unchanged lines hidden (view full) --- 2294 } else { 2295 ret = scan_nat_page(sbi, page, nid); 2296 f2fs_put_page(page, 1); 2297 } 2298 2299 if (ret) { 2300 up_read(&nm_i->nat_tree_lock); 2301 f2fs_bug_on(sbi, !mount); |
2307 f2fs_msg(sbi->sb, KERN_ERR, 2308 "NAT is corrupt, run fsck to fix it"); | 2302 f2fs_err(sbi, "NAT is corrupt, run fsck to fix it"); |
2309 return ret; 2310 } 2311 } 2312 2313 nid += (NAT_ENTRY_PER_BLOCK - (nid % NAT_ENTRY_PER_BLOCK)); 2314 if (unlikely(nid >= nm_i->max_nid)) 2315 nid = 0; 2316 --- 403 unchanged lines hidden (view full) --- 2720 if (!enabled_nat_bits(sbi, NULL)) 2721 return; 2722 2723 if (nat_index == 0) { 2724 valid = 1; 2725 i = 1; 2726 } 2727 for (; i < NAT_ENTRY_PER_BLOCK; i++) { | 2303 return ret; 2304 } 2305 } 2306 2307 nid += (NAT_ENTRY_PER_BLOCK - (nid % NAT_ENTRY_PER_BLOCK)); 2308 if (unlikely(nid >= nm_i->max_nid)) 2309 nid = 0; 2310 --- 403 unchanged lines hidden (view full) --- 2714 if (!enabled_nat_bits(sbi, NULL)) 2715 return; 2716 2717 if (nat_index == 0) { 2718 valid = 1; 2719 i = 1; 2720 } 2721 for (; i < NAT_ENTRY_PER_BLOCK; i++) { |
2728 if (nat_blk->entries[i].block_addr != NULL_ADDR) | 2722 if (le32_to_cpu(nat_blk->entries[i].block_addr) != NULL_ADDR) |
2729 valid++; 2730 } 2731 if (valid == 0) { 2732 __set_bit_le(nat_index, nm_i->empty_nat_bits); 2733 __clear_bit_le(nat_index, nm_i->full_nat_bits); 2734 return; 2735 } 2736 --- 173 unchanged lines hidden (view full) --- 2910 if (cpu_to_le64(cp_ver) != *(__le64 *)nm_i->nat_bits) { 2911 disable_nat_bits(sbi, true); 2912 return 0; 2913 } 2914 2915 nm_i->full_nat_bits = nm_i->nat_bits + 8; 2916 nm_i->empty_nat_bits = nm_i->full_nat_bits + nat_bits_bytes; 2917 | 2723 valid++; 2724 } 2725 if (valid == 0) { 2726 __set_bit_le(nat_index, nm_i->empty_nat_bits); 2727 __clear_bit_le(nat_index, nm_i->full_nat_bits); 2728 return; 2729 } 2730 --- 173 unchanged lines hidden (view full) --- 2904 if (cpu_to_le64(cp_ver) != *(__le64 *)nm_i->nat_bits) { 2905 disable_nat_bits(sbi, true); 2906 return 0; 2907 } 2908 2909 nm_i->full_nat_bits = nm_i->nat_bits + 8; 2910 nm_i->empty_nat_bits = nm_i->full_nat_bits + nat_bits_bytes; 2911 |
2918 f2fs_msg(sbi->sb, KERN_NOTICE, "Found nat_bits in checkpoint"); | 2912 f2fs_notice(sbi, "Found nat_bits in checkpoint"); |
2919 return 0; 2920} 2921 2922static inline void load_free_nid_bitmap(struct f2fs_sb_info *sbi) 2923{ 2924 struct f2fs_nm_info *nm_i = NM_I(sbi); 2925 unsigned int i = 0; 2926 nid_t nid, last_nid; --- 263 unchanged lines hidden --- | 2913 return 0; 2914} 2915 2916static inline void load_free_nid_bitmap(struct f2fs_sb_info *sbi) 2917{ 2918 struct f2fs_nm_info *nm_i = NM_I(sbi); 2919 unsigned int i = 0; 2920 nid_t nid, last_nid; --- 263 unchanged lines hidden --- |