Loading fs/f2fs/f2fs.h +2 −0 Original line number Diff line number Diff line Loading @@ -965,6 +965,7 @@ long f2fs_compat_ioctl(struct file *, unsigned int, unsigned long); */ void f2fs_set_inode_flags(struct inode *); struct inode *f2fs_iget(struct super_block *, unsigned long); int try_to_free_nats(struct f2fs_sb_info *, int); void update_inode(struct inode *, struct page *); int update_inode_page(struct inode *); int f2fs_write_inode(struct inode *, struct writeback_control *); Loading Loading @@ -1045,6 +1046,7 @@ void destroy_node_manager_caches(void); * segment.c */ void f2fs_balance_fs(struct f2fs_sb_info *); void f2fs_balance_fs_bg(struct f2fs_sb_info *); void invalidate_blocks(struct f2fs_sb_info *, block_t); void clear_prefree_segments(struct f2fs_sb_info *); int npages_for_summary_flush(struct f2fs_sb_info *); Loading fs/f2fs/gc.c +2 −3 Original line number Diff line number Diff line Loading @@ -83,9 +83,8 @@ static int gc_thread_func(void *data) if (f2fs_gc(sbi)) wait_ms = gc_th->no_gc_sleep_time; /* balancing prefree segments */ if (excess_prefree_segs(sbi)) f2fs_sync_fs(sbi->sb, true); /* balancing f2fs's metadata periodically */ f2fs_balance_fs_bg(sbi); } while (!kthread_should_stop()); return 0; Loading fs/f2fs/node.c +3 −7 Original line number Diff line number Diff line Loading @@ -240,7 +240,7 @@ static void set_node_addr(struct f2fs_sb_info *sbi, struct node_info *ni, write_unlock(&nm_i->nat_tree_lock); } static int try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink) int try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink) { struct f2fs_nm_info *nm_i = NM_I(sbi); Loading Loading @@ -1205,12 +1205,8 @@ static int f2fs_write_node_pages(struct address_space *mapping, struct f2fs_sb_info *sbi = F2FS_SB(mapping->host->i_sb); long nr_to_write = wbc->nr_to_write; /* First check balancing cached NAT entries */ if (try_to_free_nats(sbi, NAT_ENTRY_PER_BLOCK) || excess_prefree_segs(sbi)) { f2fs_sync_fs(sbi->sb, true); return 0; } /* balancing f2fs's metadata in background */ f2fs_balance_fs_bg(sbi); /* collect a number of dirty node pages and write together */ if (get_pages(sbi, F2FS_DIRTY_NODES) < COLLECT_DIRTY_NODES) Loading fs/f2fs/segment.c +8 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,14 @@ void f2fs_balance_fs(struct f2fs_sb_info *sbi) } } void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi) { /* check the # of cached NAT entries and prefree segments */ if (try_to_free_nats(sbi, NAT_ENTRY_PER_BLOCK) || excess_prefree_segs(sbi)) f2fs_sync_fs(sbi->sb, true); } static void __locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno, enum dirty_type dirty_type) { Loading Loading
fs/f2fs/f2fs.h +2 −0 Original line number Diff line number Diff line Loading @@ -965,6 +965,7 @@ long f2fs_compat_ioctl(struct file *, unsigned int, unsigned long); */ void f2fs_set_inode_flags(struct inode *); struct inode *f2fs_iget(struct super_block *, unsigned long); int try_to_free_nats(struct f2fs_sb_info *, int); void update_inode(struct inode *, struct page *); int update_inode_page(struct inode *); int f2fs_write_inode(struct inode *, struct writeback_control *); Loading Loading @@ -1045,6 +1046,7 @@ void destroy_node_manager_caches(void); * segment.c */ void f2fs_balance_fs(struct f2fs_sb_info *); void f2fs_balance_fs_bg(struct f2fs_sb_info *); void invalidate_blocks(struct f2fs_sb_info *, block_t); void clear_prefree_segments(struct f2fs_sb_info *); int npages_for_summary_flush(struct f2fs_sb_info *); Loading
fs/f2fs/gc.c +2 −3 Original line number Diff line number Diff line Loading @@ -83,9 +83,8 @@ static int gc_thread_func(void *data) if (f2fs_gc(sbi)) wait_ms = gc_th->no_gc_sleep_time; /* balancing prefree segments */ if (excess_prefree_segs(sbi)) f2fs_sync_fs(sbi->sb, true); /* balancing f2fs's metadata periodically */ f2fs_balance_fs_bg(sbi); } while (!kthread_should_stop()); return 0; Loading
fs/f2fs/node.c +3 −7 Original line number Diff line number Diff line Loading @@ -240,7 +240,7 @@ static void set_node_addr(struct f2fs_sb_info *sbi, struct node_info *ni, write_unlock(&nm_i->nat_tree_lock); } static int try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink) int try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink) { struct f2fs_nm_info *nm_i = NM_I(sbi); Loading Loading @@ -1205,12 +1205,8 @@ static int f2fs_write_node_pages(struct address_space *mapping, struct f2fs_sb_info *sbi = F2FS_SB(mapping->host->i_sb); long nr_to_write = wbc->nr_to_write; /* First check balancing cached NAT entries */ if (try_to_free_nats(sbi, NAT_ENTRY_PER_BLOCK) || excess_prefree_segs(sbi)) { f2fs_sync_fs(sbi->sb, true); return 0; } /* balancing f2fs's metadata in background */ f2fs_balance_fs_bg(sbi); /* collect a number of dirty node pages and write together */ if (get_pages(sbi, F2FS_DIRTY_NODES) < COLLECT_DIRTY_NODES) Loading
fs/f2fs/segment.c +8 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,14 @@ void f2fs_balance_fs(struct f2fs_sb_info *sbi) } } void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi) { /* check the # of cached NAT entries and prefree segments */ if (try_to_free_nats(sbi, NAT_ENTRY_PER_BLOCK) || excess_prefree_segs(sbi)) f2fs_sync_fs(sbi->sb, true); } static void __locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno, enum dirty_type dirty_type) { Loading