|
@@ -1346,25 +1346,21 @@ static void allocate_segment_by_default(struct f2fs_sb_info *sbi,
|
|
|
stat_inc_seg_type(sbi, curseg);
|
|
|
}
|
|
|
|
|
|
-static void __allocate_new_segments(struct f2fs_sb_info *sbi, int type)
|
|
|
-{
|
|
|
- struct curseg_info *curseg = CURSEG_I(sbi, type);
|
|
|
- unsigned int old_segno;
|
|
|
-
|
|
|
- old_segno = curseg->segno;
|
|
|
- SIT_I(sbi)->s_ops->allocate_segment(sbi, type, true);
|
|
|
- locate_dirty_segment(sbi, old_segno);
|
|
|
-}
|
|
|
-
|
|
|
void allocate_new_segments(struct f2fs_sb_info *sbi)
|
|
|
{
|
|
|
+ struct curseg_info *curseg;
|
|
|
+ unsigned int old_segno;
|
|
|
int i;
|
|
|
|
|
|
if (test_opt(sbi, LFS))
|
|
|
return;
|
|
|
|
|
|
- for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++)
|
|
|
- __allocate_new_segments(sbi, i);
|
|
|
+ for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
|
|
|
+ curseg = CURSEG_I(sbi, i);
|
|
|
+ old_segno = curseg->segno;
|
|
|
+ SIT_I(sbi)->s_ops->allocate_segment(sbi, i, true);
|
|
|
+ locate_dirty_segment(sbi, old_segno);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static const struct segment_allocation default_salloc_ops = {
|
|
@@ -1498,25 +1494,11 @@ void allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
|
|
|
struct f2fs_summary *sum, int type)
|
|
|
{
|
|
|
struct sit_info *sit_i = SIT_I(sbi);
|
|
|
- struct curseg_info *curseg;
|
|
|
- bool direct_io = (type == CURSEG_DIRECT_IO);
|
|
|
-
|
|
|
- if (direct_io) {
|
|
|
- if (sbi->active_logs <= 4)
|
|
|
- type = CURSEG_HOT_DATA;
|
|
|
- else
|
|
|
- type = CURSEG_WARM_DATA;
|
|
|
- }
|
|
|
- curseg = CURSEG_I(sbi, type);
|
|
|
+ struct curseg_info *curseg = CURSEG_I(sbi, type);
|
|
|
|
|
|
mutex_lock(&curseg->curseg_mutex);
|
|
|
mutex_lock(&sit_i->sentry_lock);
|
|
|
|
|
|
- /* direct_io'ed data is aligned to the segment for better performance */
|
|
|
- if (direct_io && curseg->next_blkoff &&
|
|
|
- !has_not_enough_free_secs(sbi, 0, 0))
|
|
|
- __allocate_new_segments(sbi, type);
|
|
|
-
|
|
|
*new_blkaddr = NEXT_FREE_BLKADDR(sbi, curseg);
|
|
|
|
|
|
/*
|