···766766 unsigned int nid_cnt[MAX_NID_STATE]; /* the number of free node id */767767 spinlock_t nid_list_lock; /* protect nid lists ops */768768 struct mutex build_lock; /* lock for build free nids */769769- unsigned char (*free_nid_bitmap)[NAT_ENTRY_BITMAP_SIZE];769769+ unsigned char **free_nid_bitmap;770770 unsigned char *nat_block_bitmap;771771 unsigned short *free_nid_count; /* free nid count of NAT block */772772
+17-3
fs/f2fs/node.c
···27082708static int init_free_nid_cache(struct f2fs_sb_info *sbi)27092709{27102710 struct f2fs_nm_info *nm_i = NM_I(sbi);27112711+ int i;2711271227122712- nm_i->free_nid_bitmap = f2fs_kvzalloc(sbi, nm_i->nat_blocks *27132713- NAT_ENTRY_BITMAP_SIZE, GFP_KERNEL);27132713+ nm_i->free_nid_bitmap = f2fs_kzalloc(sbi, nm_i->nat_blocks *27142714+ sizeof(unsigned char *), GFP_KERNEL);27142715 if (!nm_i->free_nid_bitmap)27152716 return -ENOMEM;27172717+27182718+ for (i = 0; i < nm_i->nat_blocks; i++) {27192719+ nm_i->free_nid_bitmap[i] = f2fs_kvzalloc(sbi,27202720+ NAT_ENTRY_BITMAP_SIZE_ALIGNED, GFP_KERNEL);27212721+ if (!nm_i->free_nid_bitmap)27222722+ return -ENOMEM;27232723+ }2716272427172725 nm_i->nat_block_bitmap = f2fs_kvzalloc(sbi, nm_i->nat_blocks / 8,27182726 GFP_KERNEL);···28122804 up_write(&nm_i->nat_tree_lock);2813280528142806 kvfree(nm_i->nat_block_bitmap);28152815- kvfree(nm_i->free_nid_bitmap);28072807+ if (nm_i->free_nid_bitmap) {28082808+ int i;28092809+28102810+ for (i = 0; i < nm_i->nat_blocks; i++)28112811+ kvfree(nm_i->free_nid_bitmap[i]);28122812+ kfree(nm_i->free_nid_bitmap);28132813+ }28162814 kvfree(nm_i->free_nid_count);2817281528182816 kfree(nm_i->nat_bitmap);