Loading fs/f2fs/f2fs.h +1 −1 Original line number Diff line number Diff line Loading @@ -766,7 +766,7 @@ struct f2fs_nm_info { unsigned int nid_cnt[MAX_NID_STATE]; /* the number of free node id */ spinlock_t nid_list_lock; /* protect nid lists ops */ struct mutex build_lock; /* lock for build free nids */ unsigned char (*free_nid_bitmap)[NAT_ENTRY_BITMAP_SIZE]; unsigned char **free_nid_bitmap; unsigned char *nat_block_bitmap; unsigned short *free_nid_count; /* free nid count of NAT block */ Loading fs/f2fs/node.c +17 −3 Original line number Diff line number Diff line Loading @@ -2708,12 +2708,20 @@ static int init_node_manager(struct f2fs_sb_info *sbi) static int init_free_nid_cache(struct f2fs_sb_info *sbi) { struct f2fs_nm_info *nm_i = NM_I(sbi); int i; nm_i->free_nid_bitmap = f2fs_kvzalloc(sbi, nm_i->nat_blocks * NAT_ENTRY_BITMAP_SIZE, GFP_KERNEL); nm_i->free_nid_bitmap = f2fs_kzalloc(sbi, nm_i->nat_blocks * sizeof(unsigned char *), GFP_KERNEL); if (!nm_i->free_nid_bitmap) return -ENOMEM; for (i = 0; i < nm_i->nat_blocks; i++) { nm_i->free_nid_bitmap[i] = f2fs_kvzalloc(sbi, NAT_ENTRY_BITMAP_SIZE_ALIGNED, GFP_KERNEL); if (!nm_i->free_nid_bitmap) return -ENOMEM; } nm_i->nat_block_bitmap = f2fs_kvzalloc(sbi, nm_i->nat_blocks / 8, GFP_KERNEL); if (!nm_i->nat_block_bitmap) Loading Loading @@ -2804,7 +2812,13 @@ void destroy_node_manager(struct f2fs_sb_info *sbi) up_write(&nm_i->nat_tree_lock); kvfree(nm_i->nat_block_bitmap); kvfree(nm_i->free_nid_bitmap); if (nm_i->free_nid_bitmap) { int i; for (i = 0; i < nm_i->nat_blocks; i++) kvfree(nm_i->free_nid_bitmap[i]); kfree(nm_i->free_nid_bitmap); } kvfree(nm_i->free_nid_count); kfree(nm_i->nat_bitmap); Loading include/linux/f2fs_fs.h +4 −0 Original line number Diff line number Diff line Loading @@ -305,6 +305,10 @@ struct f2fs_node { */ #define NAT_ENTRY_PER_BLOCK (PAGE_SIZE / sizeof(struct f2fs_nat_entry)) #define NAT_ENTRY_BITMAP_SIZE ((NAT_ENTRY_PER_BLOCK + 7) / 8) #define NAT_ENTRY_BITMAP_SIZE_ALIGNED \ ((NAT_ENTRY_BITMAP_SIZE + BITS_PER_LONG - 1) / \ BITS_PER_LONG * BITS_PER_LONG) struct f2fs_nat_entry { __u8 version; /* latest version of cached nat entry */ Loading Loading
fs/f2fs/f2fs.h +1 −1 Original line number Diff line number Diff line Loading @@ -766,7 +766,7 @@ struct f2fs_nm_info { unsigned int nid_cnt[MAX_NID_STATE]; /* the number of free node id */ spinlock_t nid_list_lock; /* protect nid lists ops */ struct mutex build_lock; /* lock for build free nids */ unsigned char (*free_nid_bitmap)[NAT_ENTRY_BITMAP_SIZE]; unsigned char **free_nid_bitmap; unsigned char *nat_block_bitmap; unsigned short *free_nid_count; /* free nid count of NAT block */ Loading
fs/f2fs/node.c +17 −3 Original line number Diff line number Diff line Loading @@ -2708,12 +2708,20 @@ static int init_node_manager(struct f2fs_sb_info *sbi) static int init_free_nid_cache(struct f2fs_sb_info *sbi) { struct f2fs_nm_info *nm_i = NM_I(sbi); int i; nm_i->free_nid_bitmap = f2fs_kvzalloc(sbi, nm_i->nat_blocks * NAT_ENTRY_BITMAP_SIZE, GFP_KERNEL); nm_i->free_nid_bitmap = f2fs_kzalloc(sbi, nm_i->nat_blocks * sizeof(unsigned char *), GFP_KERNEL); if (!nm_i->free_nid_bitmap) return -ENOMEM; for (i = 0; i < nm_i->nat_blocks; i++) { nm_i->free_nid_bitmap[i] = f2fs_kvzalloc(sbi, NAT_ENTRY_BITMAP_SIZE_ALIGNED, GFP_KERNEL); if (!nm_i->free_nid_bitmap) return -ENOMEM; } nm_i->nat_block_bitmap = f2fs_kvzalloc(sbi, nm_i->nat_blocks / 8, GFP_KERNEL); if (!nm_i->nat_block_bitmap) Loading Loading @@ -2804,7 +2812,13 @@ void destroy_node_manager(struct f2fs_sb_info *sbi) up_write(&nm_i->nat_tree_lock); kvfree(nm_i->nat_block_bitmap); kvfree(nm_i->free_nid_bitmap); if (nm_i->free_nid_bitmap) { int i; for (i = 0; i < nm_i->nat_blocks; i++) kvfree(nm_i->free_nid_bitmap[i]); kfree(nm_i->free_nid_bitmap); } kvfree(nm_i->free_nid_count); kfree(nm_i->nat_bitmap); Loading
include/linux/f2fs_fs.h +4 −0 Original line number Diff line number Diff line Loading @@ -305,6 +305,10 @@ struct f2fs_node { */ #define NAT_ENTRY_PER_BLOCK (PAGE_SIZE / sizeof(struct f2fs_nat_entry)) #define NAT_ENTRY_BITMAP_SIZE ((NAT_ENTRY_PER_BLOCK + 7) / 8) #define NAT_ENTRY_BITMAP_SIZE_ALIGNED \ ((NAT_ENTRY_BITMAP_SIZE + BITS_PER_LONG - 1) / \ BITS_PER_LONG * BITS_PER_LONG) struct f2fs_nat_entry { __u8 version; /* latest version of cached nat entry */ Loading