mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	f2fs: handle dirty segments inside refresh_sit_entry
This patch cleans up the refresh_sit_entry to handle locate_dirty_segments. Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
This commit is contained in:
		
							parent
							
								
									744602cf45
								
							
						
					
					
						commit
						5e443818fa
					
				
					 2 changed files with 11 additions and 14 deletions
				
			
		| 
						 | 
					@ -1136,6 +1136,7 @@ void destroy_node_manager_caches(void);
 | 
				
			||||||
void f2fs_balance_fs(struct f2fs_sb_info *);
 | 
					void f2fs_balance_fs(struct f2fs_sb_info *);
 | 
				
			||||||
void f2fs_balance_fs_bg(struct f2fs_sb_info *);
 | 
					void f2fs_balance_fs_bg(struct f2fs_sb_info *);
 | 
				
			||||||
void invalidate_blocks(struct f2fs_sb_info *, block_t);
 | 
					void invalidate_blocks(struct f2fs_sb_info *, block_t);
 | 
				
			||||||
 | 
					void refresh_sit_entry(struct f2fs_sb_info *, block_t, block_t);
 | 
				
			||||||
void clear_prefree_segments(struct f2fs_sb_info *);
 | 
					void clear_prefree_segments(struct f2fs_sb_info *);
 | 
				
			||||||
int npages_for_summary_flush(struct f2fs_sb_info *);
 | 
					int npages_for_summary_flush(struct f2fs_sb_info *);
 | 
				
			||||||
void allocate_new_segments(struct f2fs_sb_info *);
 | 
					void allocate_new_segments(struct f2fs_sb_info *);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -434,12 +434,14 @@ static void update_sit_entry(struct f2fs_sb_info *sbi, block_t blkaddr, int del)
 | 
				
			||||||
		get_sec_entry(sbi, segno)->valid_blocks += del;
 | 
							get_sec_entry(sbi, segno)->valid_blocks += del;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void refresh_sit_entry(struct f2fs_sb_info *sbi,
 | 
					void refresh_sit_entry(struct f2fs_sb_info *sbi, block_t old, block_t new)
 | 
				
			||||||
			block_t old_blkaddr, block_t new_blkaddr)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	update_sit_entry(sbi, new_blkaddr, 1);
 | 
						update_sit_entry(sbi, new, 1);
 | 
				
			||||||
	if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO)
 | 
						if (GET_SEGNO(sbi, old) != NULL_SEGNO)
 | 
				
			||||||
		update_sit_entry(sbi, old_blkaddr, -1);
 | 
							update_sit_entry(sbi, old, -1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						locate_dirty_segment(sbi, GET_SEGNO(sbi, old));
 | 
				
			||||||
 | 
						locate_dirty_segment(sbi, GET_SEGNO(sbi, new));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr)
 | 
					void invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr)
 | 
				
			||||||
| 
						 | 
					@ -881,17 +883,15 @@ void allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	stat_inc_block_count(sbi, curseg);
 | 
						stat_inc_block_count(sbi, curseg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!__has_curseg_space(sbi, type))
 | 
				
			||||||
 | 
							sit_i->s_ops->allocate_segment(sbi, type, false);
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * SIT information should be updated before segment allocation,
 | 
						 * SIT information should be updated before segment allocation,
 | 
				
			||||||
	 * since SSR needs latest valid block information.
 | 
						 * since SSR needs latest valid block information.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	refresh_sit_entry(sbi, old_blkaddr, *new_blkaddr);
 | 
						refresh_sit_entry(sbi, old_blkaddr, *new_blkaddr);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!__has_curseg_space(sbi, type))
 | 
					 | 
				
			||||||
		sit_i->s_ops->allocate_segment(sbi, type, false);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	locate_dirty_segment(sbi, old_cursegno);
 | 
						locate_dirty_segment(sbi, old_cursegno);
 | 
				
			||||||
	locate_dirty_segment(sbi, GET_SEGNO(sbi, old_blkaddr));
 | 
					
 | 
				
			||||||
	mutex_unlock(&sit_i->sentry_lock);
 | 
						mutex_unlock(&sit_i->sentry_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (page && IS_NODESEG(type))
 | 
						if (page && IS_NODESEG(type))
 | 
				
			||||||
| 
						 | 
					@ -992,9 +992,7 @@ void recover_data_page(struct f2fs_sb_info *sbi,
 | 
				
			||||||
	__add_sum_entry(sbi, type, sum);
 | 
						__add_sum_entry(sbi, type, sum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	refresh_sit_entry(sbi, old_blkaddr, new_blkaddr);
 | 
						refresh_sit_entry(sbi, old_blkaddr, new_blkaddr);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	locate_dirty_segment(sbi, old_cursegno);
 | 
						locate_dirty_segment(sbi, old_cursegno);
 | 
				
			||||||
	locate_dirty_segment(sbi, GET_SEGNO(sbi, old_blkaddr));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mutex_unlock(&sit_i->sentry_lock);
 | 
						mutex_unlock(&sit_i->sentry_lock);
 | 
				
			||||||
	mutex_unlock(&curseg->curseg_mutex);
 | 
						mutex_unlock(&curseg->curseg_mutex);
 | 
				
			||||||
| 
						 | 
					@ -1045,9 +1043,7 @@ void rewrite_node_page(struct f2fs_sb_info *sbi,
 | 
				
			||||||
	f2fs_submit_page_mbio(sbi, page, new_blkaddr, &fio);
 | 
						f2fs_submit_page_mbio(sbi, page, new_blkaddr, &fio);
 | 
				
			||||||
	f2fs_submit_merged_bio(sbi, NODE, WRITE);
 | 
						f2fs_submit_merged_bio(sbi, NODE, WRITE);
 | 
				
			||||||
	refresh_sit_entry(sbi, old_blkaddr, new_blkaddr);
 | 
						refresh_sit_entry(sbi, old_blkaddr, new_blkaddr);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	locate_dirty_segment(sbi, old_cursegno);
 | 
						locate_dirty_segment(sbi, old_cursegno);
 | 
				
			||||||
	locate_dirty_segment(sbi, GET_SEGNO(sbi, old_blkaddr));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mutex_unlock(&sit_i->sentry_lock);
 | 
						mutex_unlock(&sit_i->sentry_lock);
 | 
				
			||||||
	mutex_unlock(&curseg->curseg_mutex);
 | 
						mutex_unlock(&curseg->curseg_mutex);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue