Skip to content

Commit 21327a0

Browse files
Zhiguo NiuJaegeuk Kim
authored andcommitted
f2fs: fix to avoid use SSR allocate when do defragment
SSR allocate mode will be used when doing file defragment if ATGC is working at the same time, that is because set_page_private_gcing may make CURSEG_ALL_DATA_ATGC segment type got in f2fs_allocate_data_block when defragment page is writeback, which may cause file fragmentation is worse. A file with 2 fragmentations is changed as following after defragment: ----------------file info------------------- sensorsdata : -------------------------------------------- dev [254:48] ino [0x 3029 : 12329] mode [0x 81b0 : 33200] nlink [0x 1 : 1] uid [0x 27e6 : 10214] gid [0x 27e6 : 10214] size [0x 242000 : 2367488] blksize [0x 1000 : 4096] blocks [0x 1210 : 4624] -------------------------------------------- file_pos start_blk end_blk blks 0 11361121 11361207 87 356352 11361215 11361216 2 364544 11361218 11361218 1 368640 11361220 11361221 2 376832 11361224 11361225 2 385024 11361227 1136123 12 434176 11361240 11361252 13 487424 11361254 11361254 1 491520 11361271 11361279 9 528384 3681794 3681795 2 536576 3681797 3681797 1 540672 3681799 3681799 1 544768 3681803 3681803 1 548864 3681805 3681805 1 552960 3681807 3681807 1 557056 3681809 3681809 1 Signed-off-by: Zhiguo Niu <[email protected]> Reviewed-by: Chao Yu <[email protected]> Signed-off-by: Jaegeuk Kim <[email protected]>
1 parent 5c8764f commit 21327a0

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

fs/f2fs/segment.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3483,7 +3483,8 @@ static int __get_segment_type_6(struct f2fs_io_info *fio)
34833483
if (page_private_gcing(fio->page)) {
34843484
if (fio->sbi->am.atgc_enabled &&
34853485
(fio->io_type == FS_DATA_IO) &&
3486-
(fio->sbi->gc_mode != GC_URGENT_HIGH))
3486+
(fio->sbi->gc_mode != GC_URGENT_HIGH) &&
3487+
!is_inode_flag_set(inode, FI_OPU_WRITE))
34873488
return CURSEG_ALL_DATA_ATGC;
34883489
else
34893490
return CURSEG_COLD_DATA;

0 commit comments

Comments
 (0)