diff options
author | Zhiguo Niu <zhiguo.niu@unisoc.com> | 2024-05-29 12:47:00 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2024-08-11 13:57:47 +0300 |
commit | 23b865a8f3fbdfae96c61b4f5c40f0687de28a56 (patch) | |
tree | 10e4a92ced54986ba35ef7a9b6445a4cbae39cdc /fs/f2fs | |
parent | 49dba573ef7cd8b8c589b63ce11f15edb509664c (diff) | |
download | linux-23b865a8f3fbdfae96c61b4f5c40f0687de28a56.tar.xz |
f2fs: fix to avoid use SSR allocate when do defragment
[ Upstream commit 21327a042dd94bc73181d7300e688699cb1f467e ]
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 11361238 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 <zhiguo.niu@unisoc.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Stable-dep-of: 8cb1f4080dd9 ("f2fs: assign CURSEG_ALL_DATA_ATGC if blkaddr is valid")
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'fs/f2fs')
-rw-r--r-- | fs/f2fs/segment.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 259e235becc5..92331f8dbe4e 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -3483,7 +3483,8 @@ static int __get_segment_type_6(struct f2fs_io_info *fio) if (page_private_gcing(fio->page)) { if (fio->sbi->am.atgc_enabled && (fio->io_type == FS_DATA_IO) && - (fio->sbi->gc_mode != GC_URGENT_HIGH)) + (fio->sbi->gc_mode != GC_URGENT_HIGH) && + !is_inode_flag_set(inode, FI_OPU_WRITE)) return CURSEG_ALL_DATA_ATGC; else return CURSEG_COLD_DATA; |