node.c (8dd06ef34b6e2f41b29fbf5fc1663780f2524285) | node.c (0b6d4ca04a86b9dababbb76e58d33c437e127b77) |
---|---|
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> --- 496 unchanged lines hidden (view full) --- 505 spin_lock(&nm_i->nat_list_lock); 506 } 507 spin_unlock(&nm_i->nat_list_lock); 508 509 up_write(&nm_i->nat_tree_lock); 510 return nr - nr_shrink; 511} 512 | 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> --- 496 unchanged lines hidden (view full) --- 505 spin_lock(&nm_i->nat_list_lock); 506 } 507 spin_unlock(&nm_i->nat_list_lock); 508 509 up_write(&nm_i->nat_tree_lock); 510 return nr - nr_shrink; 511} 512 |
513/* 514 * This function always returns success 515 */ | |
516int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid, 517 struct node_info *ni) 518{ 519 struct f2fs_nm_info *nm_i = NM_I(sbi); 520 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); 521 struct f2fs_journal *journal = curseg->journal; 522 nid_t start_nid = START_NID(nid); 523 struct f2fs_nat_block *nat_blk; --- 187 unchanged lines hidden (view full) --- 711 } 712got: 713 return level; 714} 715 716/* 717 * Caller should call f2fs_put_dnode(dn). 718 * Also, it should grab and release a rwsem by calling f2fs_lock_op() and | 513int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid, 514 struct node_info *ni) 515{ 516 struct f2fs_nm_info *nm_i = NM_I(sbi); 517 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA); 518 struct f2fs_journal *journal = curseg->journal; 519 nid_t start_nid = START_NID(nid); 520 struct f2fs_nat_block *nat_blk; --- 187 unchanged lines hidden (view full) --- 708 } 709got: 710 return level; 711} 712 713/* 714 * Caller should call f2fs_put_dnode(dn). 715 * Also, it should grab and release a rwsem by calling f2fs_lock_op() and |
719 * f2fs_unlock_op() only if ro is not set RDONLY_NODE. 720 * In the case of RDONLY_NODE, we don't need to care about mutex. | 716 * f2fs_unlock_op() only if mode is set with ALLOC_NODE. |
721 */ 722int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode) 723{ 724 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); 725 struct page *npage[4]; 726 struct page *parent = NULL; 727 int offset[4]; 728 unsigned int noffset[4]; --- 75 unchanged lines hidden (view full) --- 804 if (i < level) { 805 parent = npage[i]; 806 nids[i + 1] = get_nid(parent, offset[i], false); 807 } 808 } 809 dn->nid = nids[level]; 810 dn->ofs_in_node = offset[level]; 811 dn->node_page = npage[level]; | 717 */ 718int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode) 719{ 720 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); 721 struct page *npage[4]; 722 struct page *parent = NULL; 723 int offset[4]; 724 unsigned int noffset[4]; --- 75 unchanged lines hidden (view full) --- 800 if (i < level) { 801 parent = npage[i]; 802 nids[i + 1] = get_nid(parent, offset[i], false); 803 } 804 } 805 dn->nid = nids[level]; 806 dn->ofs_in_node = offset[level]; 807 dn->node_page = npage[level]; |
812 dn->data_blkaddr = datablock_addr(dn->inode, 813 dn->node_page, dn->ofs_in_node); | 808 dn->data_blkaddr = f2fs_data_blkaddr(dn); |
814 return 0; 815 816release_pages: 817 f2fs_put_page(parent, 1); 818 if (i > 1) 819 f2fs_put_page(npage[0], 0); 820release_out: 821 dn->inode_page = NULL; --- 361 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)) { | 809 return 0; 810 811release_pages: 812 f2fs_put_page(parent, 1); 813 if (i > 1) 814 f2fs_put_page(npage[0], 0); 815release_out: 816 dn->inode_page = NULL; --- 361 unchanged lines hidden (view full) --- 1178 1179 /* 0 is possible, after f2fs_new_inode() has failed */ 1180 if (unlikely(f2fs_cp_error(F2FS_I_SB(inode)))) { 1181 f2fs_put_dnode(&dn); 1182 return -EIO; 1183 } 1184 1185 if (unlikely(inode->i_blocks != 0 && inode->i_blocks != 8)) { |
1191 f2fs_warn(F2FS_I_SB(inode), "Inconsistent i_blocks, ino:%lu, iblocks:%llu", 1192 inode->i_ino, (unsigned long long)inode->i_blocks); | 1186 f2fs_warn(F2FS_I_SB(inode), 1187 "f2fs_remove_inode_page: inconsistent i_blocks, ino:%lu, iblocks:%llu", 1188 inode->i_ino, (unsigned long long)inode->i_blocks); |
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; --- 98 unchanged lines hidden (view full) --- 1299 1300 if (unlikely(ni.blk_addr == NULL_ADDR) || 1301 is_sbi_flag_set(sbi, SBI_IS_SHUTDOWN)) { 1302 ClearPageUptodate(page); 1303 return -ENOENT; 1304 } 1305 1306 fio.new_blkaddr = fio.old_blkaddr = ni.blk_addr; | 1189 set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK); 1190 } 1191 1192 /* will put inode & node pages */ 1193 err = truncate_node(&dn); 1194 if (err) { 1195 f2fs_put_dnode(&dn); 1196 return err; --- 98 unchanged lines hidden (view full) --- 1295 1296 if (unlikely(ni.blk_addr == NULL_ADDR) || 1297 is_sbi_flag_set(sbi, SBI_IS_SHUTDOWN)) { 1298 ClearPageUptodate(page); 1299 return -ENOENT; 1300 } 1301 1302 fio.new_blkaddr = fio.old_blkaddr = ni.blk_addr; |
1307 return f2fs_submit_page_bio(&fio); | 1303 1304 err = f2fs_submit_page_bio(&fio); 1305 1306 if (!err) 1307 f2fs_update_iostat(sbi, FS_NODE_READ_IO, F2FS_BLKSIZE); 1308 1309 return err; |
1308} 1309 1310/* 1311 * Readahead a node page 1312 */ 1313void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid) 1314{ 1315 struct page *apage; --- 197 unchanged lines hidden (view full) --- 1513 .submitted = false, 1514 .io_type = io_type, 1515 .io_wbc = wbc, 1516 }; 1517 unsigned int seq; 1518 1519 trace_f2fs_writepage(page, NODE); 1520 | 1310} 1311 1312/* 1313 * Readahead a node page 1314 */ 1315void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid) 1316{ 1317 struct page *apage; --- 197 unchanged lines hidden (view full) --- 1515 .submitted = false, 1516 .io_type = io_type, 1517 .io_wbc = wbc, 1518 }; 1519 unsigned int seq; 1520 1521 trace_f2fs_writepage(page, NODE); 1522 |
1521 if (unlikely(f2fs_cp_error(sbi))) | 1523 if (unlikely(f2fs_cp_error(sbi))) { 1524 if (is_sbi_flag_set(sbi, SBI_IS_CLOSE)) { 1525 ClearPageUptodate(page); 1526 dec_page_count(sbi, F2FS_DIRTY_NODES); 1527 unlock_page(page); 1528 return 0; 1529 } |
1522 goto redirty_out; | 1530 goto redirty_out; |
1531 } |
|
1523 1524 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) 1525 goto redirty_out; 1526 1527 if (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) && 1528 wbc->sync_mode == WB_SYNC_NONE && 1529 IS_DNODE(page) && is_cold_node(page)) 1530 goto redirty_out; --- 26 unchanged lines hidden (view full) --- 1557 DATA_GENERIC_ENHANCE)) { 1558 up_read(&sbi->node_write); 1559 goto redirty_out; 1560 } 1561 1562 if (atomic && !test_opt(sbi, NOBARRIER)) 1563 fio.op_flags |= REQ_PREFLUSH | REQ_FUA; 1564 | 1532 1533 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) 1534 goto redirty_out; 1535 1536 if (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) && 1537 wbc->sync_mode == WB_SYNC_NONE && 1538 IS_DNODE(page) && is_cold_node(page)) 1539 goto redirty_out; --- 26 unchanged lines hidden (view full) --- 1566 DATA_GENERIC_ENHANCE)) { 1567 up_read(&sbi->node_write); 1568 goto redirty_out; 1569 } 1570 1571 if (atomic && !test_opt(sbi, NOBARRIER)) 1572 fio.op_flags |= REQ_PREFLUSH | REQ_FUA; 1573 |
1565 set_page_writeback(page); 1566 ClearPageError(page); 1567 | 1574 /* should add to global list before clearing PAGECACHE status */ |
1568 if (f2fs_in_warm_node_list(sbi, page)) { 1569 seq = f2fs_add_fsync_node_entry(sbi, page); 1570 if (seq_id) 1571 *seq_id = seq; 1572 } 1573 | 1575 if (f2fs_in_warm_node_list(sbi, page)) { 1576 seq = f2fs_add_fsync_node_entry(sbi, page); 1577 if (seq_id) 1578 *seq_id = seq; 1579 } 1580 |
1581 set_page_writeback(page); 1582 ClearPageError(page); 1583 |
|
1574 fio.old_blkaddr = ni.blk_addr; 1575 f2fs_do_write_node_page(nid, &fio); 1576 set_node_addr(sbi, &ni, fio.new_blkaddr, is_fsync_dnode(page)); 1577 dec_page_count(sbi, F2FS_DIRTY_NODES); 1578 up_read(&sbi->node_write); 1579 1580 if (wbc->for_reclaim) { 1581 f2fs_submit_merged_write_cond(sbi, NULL, page, 0, NODE); --- 217 unchanged lines hidden (view full) --- 1799 1800 f2fs_update_inode(inode, page); 1801 unlock_page(page); 1802 1803 iput(inode); 1804 return true; 1805} 1806 | 1584 fio.old_blkaddr = ni.blk_addr; 1585 f2fs_do_write_node_page(nid, &fio); 1586 set_node_addr(sbi, &ni, fio.new_blkaddr, is_fsync_dnode(page)); 1587 dec_page_count(sbi, F2FS_DIRTY_NODES); 1588 up_read(&sbi->node_write); 1589 1590 if (wbc->for_reclaim) { 1591 f2fs_submit_merged_write_cond(sbi, NULL, page, 0, NODE); --- 217 unchanged lines hidden (view full) --- 1809 1810 f2fs_update_inode(inode, page); 1811 unlock_page(page); 1812 1813 iput(inode); 1814 return true; 1815} 1816 |
1817int f2fs_flush_inline_data(struct f2fs_sb_info *sbi) 1818{ 1819 pgoff_t index = 0; 1820 struct pagevec pvec; 1821 int nr_pages; 1822 int ret = 0; 1823 1824 pagevec_init(&pvec); 1825 1826 while ((nr_pages = pagevec_lookup_tag(&pvec, 1827 NODE_MAPPING(sbi), &index, PAGECACHE_TAG_DIRTY))) { 1828 int i; 1829 1830 for (i = 0; i < nr_pages; i++) { 1831 struct page *page = pvec.pages[i]; 1832 1833 if (!IS_DNODE(page)) 1834 continue; 1835 1836 lock_page(page); 1837 1838 if (unlikely(page->mapping != NODE_MAPPING(sbi))) { 1839continue_unlock: 1840 unlock_page(page); 1841 continue; 1842 } 1843 1844 if (!PageDirty(page)) { 1845 /* someone wrote it for us */ 1846 goto continue_unlock; 1847 } 1848 1849 /* flush inline_data, if it's async context. */ 1850 if (is_inline_node(page)) { 1851 clear_inline_node(page); 1852 unlock_page(page); 1853 flush_inline_data(sbi, ino_of_node(page)); 1854 continue; 1855 } 1856 unlock_page(page); 1857 } 1858 pagevec_release(&pvec); 1859 cond_resched(); 1860 } 1861 return ret; 1862} 1863 |
|
1807int f2fs_sync_node_pages(struct f2fs_sb_info *sbi, 1808 struct writeback_control *wbc, 1809 bool do_balance, enum iostat_type io_type) 1810{ 1811 pgoff_t index; 1812 struct pagevec pvec; 1813 int step = 0; 1814 int nwritten = 0; --- 47 unchanged lines hidden (view full) --- 1862 continue; 1863 } 1864 1865 if (!PageDirty(page)) { 1866 /* someone wrote it for us */ 1867 goto continue_unlock; 1868 } 1869 | 1864int f2fs_sync_node_pages(struct f2fs_sb_info *sbi, 1865 struct writeback_control *wbc, 1866 bool do_balance, enum iostat_type io_type) 1867{ 1868 pgoff_t index; 1869 struct pagevec pvec; 1870 int step = 0; 1871 int nwritten = 0; --- 47 unchanged lines hidden (view full) --- 1919 continue; 1920 } 1921 1922 if (!PageDirty(page)) { 1923 /* someone wrote it for us */ 1924 goto continue_unlock; 1925 } 1926 |
1870 /* flush inline_data */ 1871 if (is_inline_node(page)) { | 1927 /* flush inline_data, if it's async context. */ 1928 if (do_balance && is_inline_node(page)) { |
1872 clear_inline_node(page); 1873 unlock_page(page); 1874 flush_inline_data(sbi, ino_of_node(page)); 1875 goto lock_node; 1876 } 1877 1878 /* flush dirty inode */ 1879 if (IS_INODE(page) && may_dirty) { --- 94 unchanged lines hidden (view full) --- 1974 struct f2fs_sb_info *sbi = F2FS_M_SB(mapping); 1975 struct blk_plug plug; 1976 long diff; 1977 1978 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) 1979 goto skip_write; 1980 1981 /* balancing f2fs's metadata in background */ | 1929 clear_inline_node(page); 1930 unlock_page(page); 1931 flush_inline_data(sbi, ino_of_node(page)); 1932 goto lock_node; 1933 } 1934 1935 /* flush dirty inode */ 1936 if (IS_INODE(page) && may_dirty) { --- 94 unchanged lines hidden (view full) --- 2031 struct f2fs_sb_info *sbi = F2FS_M_SB(mapping); 2032 struct blk_plug plug; 2033 long diff; 2034 2035 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING))) 2036 goto skip_write; 2037 2038 /* balancing f2fs's metadata in background */ |
1982 f2fs_balance_fs_bg(sbi); | 2039 f2fs_balance_fs_bg(sbi, true); |
1983 1984 /* collect a number of dirty node pages and write together */ 1985 if (wbc->sync_mode != WB_SYNC_ALL && 1986 get_pages(sbi, F2FS_DIRTY_NODES) < 1987 nr_pages_to_skip(sbi, NODE)) 1988 goto skip_write; 1989 1990 if (wbc->sync_mode == WB_SYNC_ALL) --- 489 unchanged lines hidden (view full) --- 2480 2481 if (need_free) 2482 kmem_cache_free(free_nid_slab, i); 2483} 2484 2485int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink) 2486{ 2487 struct f2fs_nm_info *nm_i = NM_I(sbi); | 2040 2041 /* collect a number of dirty node pages and write together */ 2042 if (wbc->sync_mode != WB_SYNC_ALL && 2043 get_pages(sbi, F2FS_DIRTY_NODES) < 2044 nr_pages_to_skip(sbi, NODE)) 2045 goto skip_write; 2046 2047 if (wbc->sync_mode == WB_SYNC_ALL) --- 489 unchanged lines hidden (view full) --- 2537 2538 if (need_free) 2539 kmem_cache_free(free_nid_slab, i); 2540} 2541 2542int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink) 2543{ 2544 struct f2fs_nm_info *nm_i = NM_I(sbi); |
2488 struct free_nid *i, *next; | |
2489 int nr = nr_shrink; 2490 2491 if (nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS) 2492 return 0; 2493 2494 if (!mutex_trylock(&nm_i->build_lock)) 2495 return 0; 2496 | 2545 int nr = nr_shrink; 2546 2547 if (nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS) 2548 return 0; 2549 2550 if (!mutex_trylock(&nm_i->build_lock)) 2551 return 0; 2552 |
2497 spin_lock(&nm_i->nid_list_lock); 2498 list_for_each_entry_safe(i, next, &nm_i->free_nid_list, list) { 2499 if (nr_shrink <= 0 || 2500 nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS) 2501 break; | 2553 while (nr_shrink && nm_i->nid_cnt[FREE_NID] > MAX_FREE_NIDS) { 2554 struct free_nid *i, *next; 2555 unsigned int batch = SHRINK_NID_BATCH_SIZE; |
2502 | 2556 |
2503 __remove_free_nid(sbi, i, FREE_NID); 2504 kmem_cache_free(free_nid_slab, i); 2505 nr_shrink--; | 2557 spin_lock(&nm_i->nid_list_lock); 2558 list_for_each_entry_safe(i, next, &nm_i->free_nid_list, list) { 2559 if (!nr_shrink || !batch || 2560 nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS) 2561 break; 2562 __remove_free_nid(sbi, i, FREE_NID); 2563 kmem_cache_free(free_nid_slab, i); 2564 nr_shrink--; 2565 batch--; 2566 } 2567 spin_unlock(&nm_i->nid_list_lock); |
2506 } | 2568 } |
2507 spin_unlock(&nm_i->nid_list_lock); | 2569 |
2508 mutex_unlock(&nm_i->build_lock); 2509 2510 return nr - nr_shrink; 2511} 2512 2513void f2fs_recover_inline_xattr(struct inode *inode, struct page *page) 2514{ 2515 void *src_addr, *dst_addr; --- 81 unchanged lines hidden (view full) --- 2597 if (err) 2598 return err; 2599 2600 if (unlikely(old_ni.blk_addr != NULL_ADDR)) 2601 return -EINVAL; 2602retry: 2603 ipage = f2fs_grab_cache_page(NODE_MAPPING(sbi), ino, false); 2604 if (!ipage) { | 2570 mutex_unlock(&nm_i->build_lock); 2571 2572 return nr - nr_shrink; 2573} 2574 2575void f2fs_recover_inline_xattr(struct inode *inode, struct page *page) 2576{ 2577 void *src_addr, *dst_addr; --- 81 unchanged lines hidden (view full) --- 2659 if (err) 2660 return err; 2661 2662 if (unlikely(old_ni.blk_addr != NULL_ADDR)) 2663 return -EINVAL; 2664retry: 2665 ipage = f2fs_grab_cache_page(NODE_MAPPING(sbi), ino, false); 2666 if (!ipage) { |
2605 congestion_wait(BLK_RW_ASYNC, HZ/50); | 2667 congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT); |
2606 goto retry; 2607 } 2608 2609 /* Should not use this inode from free nid list */ 2610 remove_free_nid(sbi, ino); 2611 2612 if (!PageUptodate(ipage)) 2613 SetPageUptodate(ipage); --- 312 unchanged lines hidden (view full) --- 2926 unsigned int i; 2927 __u64 cp_ver = cur_cp_version(ckpt); 2928 block_t nat_bits_addr; 2929 2930 if (!enabled_nat_bits(sbi, NULL)) 2931 return 0; 2932 2933 nm_i->nat_bits_blocks = F2FS_BLK_ALIGN((nat_bits_bytes << 1) + 8); | 2668 goto retry; 2669 } 2670 2671 /* Should not use this inode from free nid list */ 2672 remove_free_nid(sbi, ino); 2673 2674 if (!PageUptodate(ipage)) 2675 SetPageUptodate(ipage); --- 312 unchanged lines hidden (view full) --- 2988 unsigned int i; 2989 __u64 cp_ver = cur_cp_version(ckpt); 2990 block_t nat_bits_addr; 2991 2992 if (!enabled_nat_bits(sbi, NULL)) 2993 return 0; 2994 2995 nm_i->nat_bits_blocks = F2FS_BLK_ALIGN((nat_bits_bytes << 1) + 8); |
2934 nm_i->nat_bits = f2fs_kzalloc(sbi, | 2996 nm_i->nat_bits = f2fs_kvzalloc(sbi, |
2935 nm_i->nat_bits_blocks << F2FS_BLKSIZE_BITS, GFP_KERNEL); 2936 if (!nm_i->nat_bits) 2937 return -ENOMEM; 2938 2939 nat_bits_addr = __start_cp_addr(sbi) + sbi->blocks_per_seg - 2940 nm_i->nat_bits_blocks; 2941 for (i = 0; i < nm_i->nat_bits_blocks; i++) { 2942 struct page *page; --- 116 unchanged lines hidden (view full) --- 3059} 3060 3061static int init_free_nid_cache(struct f2fs_sb_info *sbi) 3062{ 3063 struct f2fs_nm_info *nm_i = NM_I(sbi); 3064 int i; 3065 3066 nm_i->free_nid_bitmap = | 2997 nm_i->nat_bits_blocks << F2FS_BLKSIZE_BITS, GFP_KERNEL); 2998 if (!nm_i->nat_bits) 2999 return -ENOMEM; 3000 3001 nat_bits_addr = __start_cp_addr(sbi) + sbi->blocks_per_seg - 3002 nm_i->nat_bits_blocks; 3003 for (i = 0; i < nm_i->nat_bits_blocks; i++) { 3004 struct page *page; --- 116 unchanged lines hidden (view full) --- 3121} 3122 3123static int init_free_nid_cache(struct f2fs_sb_info *sbi) 3124{ 3125 struct f2fs_nm_info *nm_i = NM_I(sbi); 3126 int i; 3127 3128 nm_i->free_nid_bitmap = |
3067 f2fs_kzalloc(sbi, array_size(sizeof(unsigned char *), 3068 nm_i->nat_blocks), 3069 GFP_KERNEL); | 3129 f2fs_kvzalloc(sbi, array_size(sizeof(unsigned char *), 3130 nm_i->nat_blocks), 3131 GFP_KERNEL); |
3070 if (!nm_i->free_nid_bitmap) 3071 return -ENOMEM; 3072 3073 for (i = 0; i < nm_i->nat_blocks; i++) { 3074 nm_i->free_nid_bitmap[i] = f2fs_kvzalloc(sbi, 3075 f2fs_bitmap_size(NAT_ENTRY_PER_BLOCK), GFP_KERNEL); 3076 if (!nm_i->free_nid_bitmap[i]) 3077 return -ENOMEM; --- 110 unchanged lines hidden (view full) --- 3188 kvfree(nm_i->nat_bitmap_mir); 3189#endif 3190 sbi->nm_info = NULL; 3191 kvfree(nm_i); 3192} 3193 3194int __init f2fs_create_node_manager_caches(void) 3195{ | 3132 if (!nm_i->free_nid_bitmap) 3133 return -ENOMEM; 3134 3135 for (i = 0; i < nm_i->nat_blocks; i++) { 3136 nm_i->free_nid_bitmap[i] = f2fs_kvzalloc(sbi, 3137 f2fs_bitmap_size(NAT_ENTRY_PER_BLOCK), GFP_KERNEL); 3138 if (!nm_i->free_nid_bitmap[i]) 3139 return -ENOMEM; --- 110 unchanged lines hidden (view full) --- 3250 kvfree(nm_i->nat_bitmap_mir); 3251#endif 3252 sbi->nm_info = NULL; 3253 kvfree(nm_i); 3254} 3255 3256int __init f2fs_create_node_manager_caches(void) 3257{ |
3196 nat_entry_slab = f2fs_kmem_cache_create("nat_entry", | 3258 nat_entry_slab = f2fs_kmem_cache_create("f2fs_nat_entry", |
3197 sizeof(struct nat_entry)); 3198 if (!nat_entry_slab) 3199 goto fail; 3200 | 3259 sizeof(struct nat_entry)); 3260 if (!nat_entry_slab) 3261 goto fail; 3262 |
3201 free_nid_slab = f2fs_kmem_cache_create("free_nid", | 3263 free_nid_slab = f2fs_kmem_cache_create("f2fs_free_nid", |
3202 sizeof(struct free_nid)); 3203 if (!free_nid_slab) 3204 goto destroy_nat_entry; 3205 | 3264 sizeof(struct free_nid)); 3265 if (!free_nid_slab) 3266 goto destroy_nat_entry; 3267 |
3206 nat_entry_set_slab = f2fs_kmem_cache_create("nat_entry_set", | 3268 nat_entry_set_slab = f2fs_kmem_cache_create("f2fs_nat_entry_set", |
3207 sizeof(struct nat_entry_set)); 3208 if (!nat_entry_set_slab) 3209 goto destroy_free_nid; 3210 | 3269 sizeof(struct nat_entry_set)); 3270 if (!nat_entry_set_slab) 3271 goto destroy_free_nid; 3272 |
3211 fsync_node_entry_slab = f2fs_kmem_cache_create("fsync_node_entry", | 3273 fsync_node_entry_slab = f2fs_kmem_cache_create("f2fs_fsync_node_entry", |
3212 sizeof(struct fsync_node_entry)); 3213 if (!fsync_node_entry_slab) 3214 goto destroy_nat_entry_set; 3215 return 0; 3216 3217destroy_nat_entry_set: 3218 kmem_cache_destroy(nat_entry_set_slab); 3219destroy_free_nid: --- 14 unchanged lines hidden --- | 3274 sizeof(struct fsync_node_entry)); 3275 if (!fsync_node_entry_slab) 3276 goto destroy_nat_entry_set; 3277 return 0; 3278 3279destroy_nat_entry_set: 3280 kmem_cache_destroy(nat_entry_set_slab); 3281destroy_free_nid: --- 14 unchanged lines hidden --- |