* [f2fs-dev] [PATCH 1/3] f2fs: fix to update upper_p in __get_secs_required() correctly
@ 2025-07-24 8:01 Chao Yu via Linux-f2fs-devel
2025-07-24 8:01 ` [f2fs-dev] [PATCH 2/3] f2fs: fix to calculate dirty data during has_not_enough_free_secs() Chao Yu via Linux-f2fs-devel
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-07-24 8:01 UTC (permalink / raw)
To: jaegeuk; +Cc: Daeho Jeong, linux-kernel, linux-f2fs-devel
Commit 1acd73edbbfe ("f2fs: fix to account dirty data in __get_secs_required()")
missed to calculate upper_p w/ data_secs, fix it.
Fixes: 1acd73edbbfe ("f2fs: fix to account dirty data in __get_secs_required()")
Cc: Daeho Jeong <daehojeong@google.com>
Signed-off-by: Chao Yu <chao@kernel.org>
---
fs/f2fs/segment.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
index d2c73f641134..2123645cf175 100644
--- a/fs/f2fs/segment.h
+++ b/fs/f2fs/segment.h
@@ -678,7 +678,7 @@ static inline void __get_secs_required(struct f2fs_sb_info *sbi,
if (lower_p)
*lower_p = node_secs + dent_secs + data_secs;
if (upper_p)
- *upper_p = node_secs + dent_secs +
+ *upper_p = node_secs + dent_secs + data_secs +
(node_blocks ? 1 : 0) + (dent_blocks ? 1 : 0) +
(data_blocks ? 1 : 0);
if (curseg_p)
--
2.49.0
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [f2fs-dev] [PATCH 2/3] f2fs: fix to calculate dirty data during has_not_enough_free_secs()
2025-07-24 8:01 [f2fs-dev] [PATCH 1/3] f2fs: fix to update upper_p in __get_secs_required() correctly Chao Yu via Linux-f2fs-devel
@ 2025-07-24 8:01 ` Chao Yu via Linux-f2fs-devel
2025-07-24 8:01 ` [f2fs-dev] [PATCH 3/3] f2fs: fix to trigger foreground gc during f2fs_map_blocks() in lfs mode Chao Yu via Linux-f2fs-devel
2025-07-28 16:50 ` [f2fs-dev] [PATCH 1/3] f2fs: fix to update upper_p in __get_secs_required() correctly patchwork-bot+f2fs--- via Linux-f2fs-devel
2 siblings, 0 replies; 4+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-07-24 8:01 UTC (permalink / raw)
To: jaegeuk; +Cc: Daeho Jeong, linux-kernel, linux-f2fs-devel
In lfs mode, dirty data needs OPU, we'd better calculate lower_p and
upper_p w/ them during has_not_enough_free_secs(), otherwise we may
encounter out-of-space issue due to we missed to reclaim enough
free section w/ foreground gc.
Fixes: 36abef4e796d ("f2fs: introduce mode=lfs mount option")
Cc: Daeho Jeong <daehojeong@google.com>
Signed-off-by: Chao Yu <chao@kernel.org>
---
fs/f2fs/segment.h | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
index 2123645cf175..5e2ee5c686b1 100644
--- a/fs/f2fs/segment.h
+++ b/fs/f2fs/segment.h
@@ -668,8 +668,7 @@ static inline void __get_secs_required(struct f2fs_sb_info *sbi,
unsigned int dent_blocks = total_dent_blocks % CAP_BLKS_PER_SEC(sbi);
unsigned int data_blocks = 0;
- if (f2fs_lfs_mode(sbi) &&
- unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
+ if (f2fs_lfs_mode(sbi)) {
total_data_blocks = get_pages(sbi, F2FS_DIRTY_DATA);
data_secs = total_data_blocks / CAP_BLKS_PER_SEC(sbi);
data_blocks = total_data_blocks % CAP_BLKS_PER_SEC(sbi);
--
2.49.0
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [f2fs-dev] [PATCH 3/3] f2fs: fix to trigger foreground gc during f2fs_map_blocks() in lfs mode
2025-07-24 8:01 [f2fs-dev] [PATCH 1/3] f2fs: fix to update upper_p in __get_secs_required() correctly Chao Yu via Linux-f2fs-devel
2025-07-24 8:01 ` [f2fs-dev] [PATCH 2/3] f2fs: fix to calculate dirty data during has_not_enough_free_secs() Chao Yu via Linux-f2fs-devel
@ 2025-07-24 8:01 ` Chao Yu via Linux-f2fs-devel
2025-07-28 16:50 ` [f2fs-dev] [PATCH 1/3] f2fs: fix to update upper_p in __get_secs_required() correctly patchwork-bot+f2fs--- via Linux-f2fs-devel
2 siblings, 0 replies; 4+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-07-24 8:01 UTC (permalink / raw)
To: jaegeuk; +Cc: Daeho Jeong, linux-kernel, linux-f2fs-devel
w/ "mode=lfs" mount option, generic/299 will cause system panic as below:
------------[ cut here ]------------
kernel BUG at fs/f2fs/segment.c:2835!
Call Trace:
<TASK>
f2fs_allocate_data_block+0x6f4/0xc50
f2fs_map_blocks+0x970/0x1550
f2fs_iomap_begin+0xb2/0x1e0
iomap_iter+0x1d6/0x430
__iomap_dio_rw+0x208/0x9a0
f2fs_file_write_iter+0x6b3/0xfa0
aio_write+0x15d/0x2e0
io_submit_one+0x55e/0xab0
__x64_sys_io_submit+0xa5/0x230
do_syscall_64+0x84/0x2f0
entry_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0010:new_curseg+0x70f/0x720
The root cause of we run out-of-space is: in f2fs_map_blocks(), f2fs may
trigger foreground gc only if it allocates any physical block, it will be
a little bit later when there is multiple threads writing data w/
aio/dio/bufio method in parallel, since we always use OPU in lfs mode, so
f2fs_map_blocks() does block allocations aggressively.
In order to fix this issue, let's give a chance to trigger foreground
gc in prior to block allocation in f2fs_map_blocks().
Fixes: 36abef4e796d ("f2fs: introduce mode=lfs mount option")
Cc: Daeho Jeong <daehojeong@google.com>
Signed-off-by: Chao Yu <chao@kernel.org>
---
fs/f2fs/data.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 4e62f7f00b70..ffcaf91c1703 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1573,8 +1573,11 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map, int flag)
end = pgofs + maxblocks;
next_dnode:
- if (map->m_may_create)
+ if (map->m_may_create) {
+ if (f2fs_lfs_mode(sbi))
+ f2fs_balance_fs(sbi, true);
f2fs_map_lock(sbi, flag);
+ }
/* When reading holes, we need its node page */
set_new_dnode(&dn, inode, NULL, NULL, 0);
--
2.49.0
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [f2fs-dev] [PATCH 1/3] f2fs: fix to update upper_p in __get_secs_required() correctly
2025-07-24 8:01 [f2fs-dev] [PATCH 1/3] f2fs: fix to update upper_p in __get_secs_required() correctly Chao Yu via Linux-f2fs-devel
2025-07-24 8:01 ` [f2fs-dev] [PATCH 2/3] f2fs: fix to calculate dirty data during has_not_enough_free_secs() Chao Yu via Linux-f2fs-devel
2025-07-24 8:01 ` [f2fs-dev] [PATCH 3/3] f2fs: fix to trigger foreground gc during f2fs_map_blocks() in lfs mode Chao Yu via Linux-f2fs-devel
@ 2025-07-28 16:50 ` patchwork-bot+f2fs--- via Linux-f2fs-devel
2 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+f2fs--- via Linux-f2fs-devel @ 2025-07-28 16:50 UTC (permalink / raw)
To: Chao Yu; +Cc: jaegeuk, linux-f2fs-devel, daehojeong, linux-kernel
Hello:
This series was applied to jaegeuk/f2fs.git (dev)
by Jaegeuk Kim <jaegeuk@kernel.org>:
On Thu, 24 Jul 2025 16:01:42 +0800 you wrote:
> Commit 1acd73edbbfe ("f2fs: fix to account dirty data in __get_secs_required()")
> missed to calculate upper_p w/ data_secs, fix it.
>
> Fixes: 1acd73edbbfe ("f2fs: fix to account dirty data in __get_secs_required()")
> Cc: Daeho Jeong <daehojeong@google.com>
> Signed-off-by: Chao Yu <chao@kernel.org>
>
> [...]
Here is the summary with links:
- [f2fs-dev,1/3] f2fs: fix to update upper_p in __get_secs_required() correctly
https://git.kernel.org/jaegeuk/f2fs/c/6840faddb656
- [f2fs-dev,2/3] f2fs: fix to calculate dirty data during has_not_enough_free_secs()
https://git.kernel.org/jaegeuk/f2fs/c/e194e140ab7d
- [f2fs-dev,3/3] f2fs: fix to trigger foreground gc during f2fs_map_blocks() in lfs mode
https://git.kernel.org/jaegeuk/f2fs/c/1005a3ca28e9
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-07-28 16:50 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-24 8:01 [f2fs-dev] [PATCH 1/3] f2fs: fix to update upper_p in __get_secs_required() correctly Chao Yu via Linux-f2fs-devel
2025-07-24 8:01 ` [f2fs-dev] [PATCH 2/3] f2fs: fix to calculate dirty data during has_not_enough_free_secs() Chao Yu via Linux-f2fs-devel
2025-07-24 8:01 ` [f2fs-dev] [PATCH 3/3] f2fs: fix to trigger foreground gc during f2fs_map_blocks() in lfs mode Chao Yu via Linux-f2fs-devel
2025-07-28 16:50 ` [f2fs-dev] [PATCH 1/3] f2fs: fix to update upper_p in __get_secs_required() correctly patchwork-bot+f2fs--- via Linux-f2fs-devel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).