f2fs: split f2fs_allocate_new_segments()
to two independent functions: - f2fs_allocate_new_segment() for specified type segment allocation - f2fs_allocate_new_segments() for all data type segments allocation Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
9039d8355d
commit
901d745f8e
|
@ -3335,7 +3335,8 @@ void f2fs_release_discard_addrs(struct f2fs_sb_info *sbi);
|
||||||
int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra);
|
int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra);
|
||||||
void f2fs_allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
|
void f2fs_allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
|
||||||
unsigned int start, unsigned int end);
|
unsigned int start, unsigned int end);
|
||||||
void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi, int type);
|
void f2fs_allocate_new_segment(struct f2fs_sb_info *sbi, int type);
|
||||||
|
void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi);
|
||||||
int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range);
|
int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range);
|
||||||
bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi,
|
bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi,
|
||||||
struct cp_control *cpc);
|
struct cp_control *cpc);
|
||||||
|
|
|
@ -1658,7 +1658,7 @@ next_alloc:
|
||||||
map.m_seg_type = CURSEG_COLD_DATA_PINNED;
|
map.m_seg_type = CURSEG_COLD_DATA_PINNED;
|
||||||
|
|
||||||
f2fs_lock_op(sbi);
|
f2fs_lock_op(sbi);
|
||||||
f2fs_allocate_new_segments(sbi, CURSEG_COLD_DATA);
|
f2fs_allocate_new_segment(sbi, CURSEG_COLD_DATA);
|
||||||
f2fs_unlock_op(sbi);
|
f2fs_unlock_op(sbi);
|
||||||
|
|
||||||
err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_DIO);
|
err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_DIO);
|
||||||
|
|
|
@ -742,7 +742,7 @@ next:
|
||||||
f2fs_put_page(page, 1);
|
f2fs_put_page(page, 1);
|
||||||
}
|
}
|
||||||
if (!err)
|
if (!err)
|
||||||
f2fs_allocate_new_segments(sbi, NO_CHECK_TYPE);
|
f2fs_allocate_new_segments(sbi);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2733,28 +2733,35 @@ unlock:
|
||||||
up_read(&SM_I(sbi)->curseg_lock);
|
up_read(&SM_I(sbi)->curseg_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi, int type)
|
static void __allocate_new_segment(struct f2fs_sb_info *sbi, int type)
|
||||||
{
|
{
|
||||||
struct curseg_info *curseg;
|
struct curseg_info *curseg = CURSEG_I(sbi, type);
|
||||||
unsigned int old_segno;
|
unsigned int old_segno;
|
||||||
|
|
||||||
|
if (!curseg->next_blkoff &&
|
||||||
|
!get_valid_blocks(sbi, curseg->segno, false) &&
|
||||||
|
!get_ckpt_valid_blocks(sbi, curseg->segno))
|
||||||
|
return;
|
||||||
|
|
||||||
|
old_segno = curseg->segno;
|
||||||
|
SIT_I(sbi)->s_ops->allocate_segment(sbi, type, true);
|
||||||
|
locate_dirty_segment(sbi, old_segno);
|
||||||
|
}
|
||||||
|
|
||||||
|
void f2fs_allocate_new_segment(struct f2fs_sb_info *sbi, int type)
|
||||||
|
{
|
||||||
|
down_write(&SIT_I(sbi)->sentry_lock);
|
||||||
|
__allocate_new_segment(sbi, type);
|
||||||
|
up_write(&SIT_I(sbi)->sentry_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi)
|
||||||
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
down_write(&SIT_I(sbi)->sentry_lock);
|
down_write(&SIT_I(sbi)->sentry_lock);
|
||||||
|
for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++)
|
||||||
for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
|
__allocate_new_segment(sbi, i);
|
||||||
if (type != NO_CHECK_TYPE && i != type)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
curseg = CURSEG_I(sbi, i);
|
|
||||||
if (type == NO_CHECK_TYPE || curseg->next_blkoff ||
|
|
||||||
get_valid_blocks(sbi, curseg->segno, false) ||
|
|
||||||
get_ckpt_valid_blocks(sbi, curseg->segno)) {
|
|
||||||
old_segno = curseg->segno;
|
|
||||||
SIT_I(sbi)->s_ops->allocate_segment(sbi, i, true);
|
|
||||||
locate_dirty_segment(sbi, old_segno);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
up_write(&SIT_I(sbi)->sentry_lock);
|
up_write(&SIT_I(sbi)->sentry_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue