* [f2fs-dev] [PATCH v2 1/2] f2fs: fix zero-sized extent for precache extents
@ 2025-09-15 3:52 wangzijie
2025-09-15 3:52 ` [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree() wangzijie
2025-09-15 8:05 ` [f2fs-dev] [PATCH v2 1/2] f2fs: fix zero-sized extent for precache extents Chao Yu via Linux-f2fs-devel
0 siblings, 2 replies; 14+ messages in thread
From: wangzijie @ 2025-09-15 3:52 UTC (permalink / raw)
To: jaegeuk, chao; +Cc: wangzijie, linux-kernel, feng.han, linux-f2fs-devel
Script to reproduce:
f2fs_io write 1 0 1881 rand dsync testfile
f2fs_io fallocate 0 7708672 4096 testfile
f2fs_io write 1 1881 1 rand buffered testfile
fsync testfile
umount
mount
f2fs_io precache_extents testfile
When the data layout is something like this:
dnode1: dnode2:
[0] A [0] NEW_ADDR
[1] A+1 [1] 0x0
...
[1016] A+1016
[1017] B (B!=A+1017) [1017] 0x0
During precache_extents, we map the last block(valid blkaddr) in dnode1:
map->m_flags |= F2FS_MAP_MAPPED;
map->m_pblk = blkaddr(valid blkaddr);
map->m_len = 1;
then we goto next_dnode, meet the first block in dnode2(hole), goto sync_out:
map->m_flags & F2FS_MAP_MAPPED == true, and we make zero-sized extent.
Rebased on patch[1], this patch can cover these cases to avoid zero-sized extent:
A,B,C is valid blkaddr
case1:
dnode1: dnode2:
[0] A [0] NEW_ADDR
[1] A+1 [1] 0x0
... ....
[1016] A+1016
[1017] B (B!=A+1017) [1017] 0x0
case2:
dnode1: dnode2:
[0] A [0] C (C!=B+1)
[1] A+1 [1] C+1
... ....
[1016] A+1016
[1017] B (B!=A+1017) [1017] 0x0
case3:
dnode1: dnode2:
[0] A [0] C (C!=B+2)
[1] A+1 [1] C+1
... ....
[1015] A+1015
[1016] B (B!=A+1016)
[1017] B+1 [1017] 0x0
[1] https://lore.kernel.org/linux-f2fs-devel/20250912081250.44383-1-chao@kernel.org/
Fixes: c4020b2da4c9 ("f2fs: support F2FS_IOC_PRECACHE_EXTENTS")
Signed-off-by: wangzijie <wangzijie1@honor.com>
---
Rebased on:
https://lore.kernel.org/linux-f2fs-devel/20250912081250.44383-1-chao@kernel.org/
v1:
https://lore.kernel.org/linux-f2fs-devel/20250912103915.3597413-1-wangzijie1@honor.com
---
fs/f2fs/data.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 838eae39d..7a5170b32 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1778,9 +1778,10 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map, int flag)
if (map->m_flags & F2FS_MAP_MAPPED) {
unsigned int ofs = start_pgofs - map->m_lblk;
- f2fs_update_read_extent_cache_range(&dn,
- start_pgofs, map->m_pblk + ofs,
- map->m_len - ofs);
+ if (map->m_len - ofs > 0)
+ f2fs_update_read_extent_cache_range(&dn,
+ start_pgofs, map->m_pblk + ofs,
+ map->m_len - ofs);
}
if (map->m_next_extent)
*map->m_next_extent = is_hole ? pgofs + 1 : pgofs;
--
2.25.1
_______________________________________________
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] 14+ messages in thread
* [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree()
2025-09-15 3:52 [f2fs-dev] [PATCH v2 1/2] f2fs: fix zero-sized extent for precache extents wangzijie
@ 2025-09-15 3:52 ` wangzijie
2025-09-15 8:05 ` Chao Yu via Linux-f2fs-devel
` (2 more replies)
2025-09-15 8:05 ` [f2fs-dev] [PATCH v2 1/2] f2fs: fix zero-sized extent for precache extents Chao Yu via Linux-f2fs-devel
1 sibling, 3 replies; 14+ messages in thread
From: wangzijie @ 2025-09-15 3:52 UTC (permalink / raw)
To: jaegeuk, chao; +Cc: wangzijie, linux-kernel, feng.han, linux-f2fs-devel
When we get wrong extent info data, and look up extent_node in rb tree,
it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
return NULL.
Signed-off-by: wangzijie <wangzijie1@honor.com>
---
fs/f2fs/extent_cache.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index 199c1e7a8..6ed6f3d1d 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -605,6 +605,7 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
leftmost = false;
} else {
f2fs_bug_on(sbi, 1);
+ return NULL;
}
}
--
2.25.1
_______________________________________________
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] 14+ messages in thread
* Re: [f2fs-dev] [PATCH v2 1/2] f2fs: fix zero-sized extent for precache extents
2025-09-15 3:52 [f2fs-dev] [PATCH v2 1/2] f2fs: fix zero-sized extent for precache extents wangzijie
2025-09-15 3:52 ` [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree() wangzijie
@ 2025-09-15 8:05 ` Chao Yu via Linux-f2fs-devel
1 sibling, 0 replies; 14+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-09-15 8:05 UTC (permalink / raw)
To: wangzijie, jaegeuk; +Cc: linux-kernel, feng.han, linux-f2fs-devel
On 9/15/25 11:52, wangzijie wrote:
> Script to reproduce:
> f2fs_io write 1 0 1881 rand dsync testfile
> f2fs_io fallocate 0 7708672 4096 testfile
> f2fs_io write 1 1881 1 rand buffered testfile
> fsync testfile
> umount
> mount
> f2fs_io precache_extents testfile
>
> When the data layout is something like this:
> dnode1: dnode2:
> [0] A [0] NEW_ADDR
> [1] A+1 [1] 0x0
> ...
> [1016] A+1016
> [1017] B (B!=A+1017) [1017] 0x0
>
> During precache_extents, we map the last block(valid blkaddr) in dnode1:
> map->m_flags |= F2FS_MAP_MAPPED;
> map->m_pblk = blkaddr(valid blkaddr);
> map->m_len = 1;
> then we goto next_dnode, meet the first block in dnode2(hole), goto sync_out:
> map->m_flags & F2FS_MAP_MAPPED == true, and we make zero-sized extent.
>
> Rebased on patch[1], this patch can cover these cases to avoid zero-sized extent:
> A,B,C is valid blkaddr
> case1:
> dnode1: dnode2:
> [0] A [0] NEW_ADDR
> [1] A+1 [1] 0x0
> ... ....
> [1016] A+1016
> [1017] B (B!=A+1017) [1017] 0x0
>
> case2:
> dnode1: dnode2:
> [0] A [0] C (C!=B+1)
> [1] A+1 [1] C+1
> ... ....
> [1016] A+1016
> [1017] B (B!=A+1017) [1017] 0x0
>
> case3:
> dnode1: dnode2:
> [0] A [0] C (C!=B+2)
> [1] A+1 [1] C+1
> ... ....
> [1015] A+1015
> [1016] B (B!=A+1016)
> [1017] B+1 [1017] 0x0
>
> [1] https://lore.kernel.org/linux-f2fs-devel/20250912081250.44383-1-chao@kernel.org/
>
> Fixes: c4020b2da4c9 ("f2fs: support F2FS_IOC_PRECACHE_EXTENTS")
> Signed-off-by: wangzijie <wangzijie1@honor.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Thanks,
_______________________________________________
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] 14+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree()
2025-09-15 3:52 ` [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree() wangzijie
@ 2025-09-15 8:05 ` Chao Yu via Linux-f2fs-devel
2025-09-16 2:21 ` Jaegeuk Kim via Linux-f2fs-devel
2025-09-16 12:12 ` Chao Yu via Linux-f2fs-devel
2 siblings, 0 replies; 14+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-09-15 8:05 UTC (permalink / raw)
To: wangzijie, jaegeuk; +Cc: linux-kernel, feng.han, linux-f2fs-devel
On 9/15/25 11:52, wangzijie wrote:
> When we get wrong extent info data, and look up extent_node in rb tree,
> it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
> return NULL.
>
> Signed-off-by: wangzijie <wangzijie1@honor.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Thanks,
_______________________________________________
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] 14+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree()
2025-09-15 3:52 ` [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree() wangzijie
2025-09-15 8:05 ` Chao Yu via Linux-f2fs-devel
@ 2025-09-16 2:21 ` Jaegeuk Kim via Linux-f2fs-devel
2025-09-16 5:22 ` wangzijie
2025-09-16 12:12 ` Chao Yu via Linux-f2fs-devel
2 siblings, 1 reply; 14+ messages in thread
From: Jaegeuk Kim via Linux-f2fs-devel @ 2025-09-16 2:21 UTC (permalink / raw)
To: wangzijie; +Cc: linux-kernel, feng.han, linux-f2fs-devel
On 09/15, wangzijie wrote:
> When we get wrong extent info data, and look up extent_node in rb tree,
> it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
> return NULL.
This is the exact buggy case which we should fix the original one. Have
you seen this error? In that case, can we consider writing some kernel
message and handle the error properly?
>
> Signed-off-by: wangzijie <wangzijie1@honor.com>
> ---
> fs/f2fs/extent_cache.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
> index 199c1e7a8..6ed6f3d1d 100644
> --- a/fs/f2fs/extent_cache.c
> +++ b/fs/f2fs/extent_cache.c
> @@ -605,6 +605,7 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
> leftmost = false;
> } else {
> f2fs_bug_on(sbi, 1);
> + return NULL;
> }
> }
>
> --
> 2.25.1
_______________________________________________
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] 14+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree()
2025-09-16 2:21 ` Jaegeuk Kim via Linux-f2fs-devel
@ 2025-09-16 5:22 ` wangzijie
2025-09-16 6:46 ` Chao Yu via Linux-f2fs-devel
0 siblings, 1 reply; 14+ messages in thread
From: wangzijie @ 2025-09-16 5:22 UTC (permalink / raw)
To: jaegeuk; +Cc: feng.han, linux-kernel, linux-f2fs-devel, wangzijie1
>On 09/15, wangzijie wrote:
>> When we get wrong extent info data, and look up extent_node in rb tree,
>> it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
>> return NULL.
>
>This is the exact buggy case which we should fix the original one. Have
>you seen this error? In that case, can we consider writing some kernel
>message and handle the error properly?
Hi Jaegeuk,
The original one is the bug I mentioned in the first patch of this patch set
("f2fs: fix zero-sized extent for precache extents").
When we use a wrong extent_info(zero-sized) to do update, and there exists a
extent_node which has same fofs as the wrong one, we will skip "invalidate all extent
nodes in range [fofs, fofs + len - 1]"(en->ei.fofs = end = tei->fofs + tei->len = tei->fofs),
which cause the infinite loop in __insert_extent_tree().
So we can add f2fs_bug_on() when there occurs zero-sized extent
in f2fs_update_read_extent_cache_range(), and give up this zero-sized
extent update to handle other unknown buggy cases. Do you think this will be better?
And do we need to solve this infinite loop?
>>
>> Signed-off-by: wangzijie <wangzijie1@honor.com>
>> ---
>> fs/f2fs/extent_cache.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
>> index 199c1e7a8..6ed6f3d1d 100644
>> --- a/fs/f2fs/extent_cache.c
>> +++ b/fs/f2fs/extent_cache.c
>> @@ -605,6 +605,7 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
>> leftmost = false;
>> } else {
>> f2fs_bug_on(sbi, 1);
>> + return NULL;
>> }
>> }
>>
>> --
>> 2.25.1
_______________________________________________
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] 14+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree()
2025-09-16 5:22 ` wangzijie
@ 2025-09-16 6:46 ` Chao Yu via Linux-f2fs-devel
2025-09-16 7:09 ` wangzijie
0 siblings, 1 reply; 14+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-09-16 6:46 UTC (permalink / raw)
To: wangzijie, jaegeuk; +Cc: linux-kernel, feng.han, linux-f2fs-devel
On 9/16/25 13:22, wangzijie wrote:
>> On 09/15, wangzijie wrote:
>>> When we get wrong extent info data, and look up extent_node in rb tree,
>>> it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
>>> return NULL.
>>
>> This is the exact buggy case which we should fix the original one. Have
>> you seen this error? In that case, can we consider writing some kernel
>> message and handle the error properly?
>
> Hi Jaegeuk,
> The original one is the bug I mentioned in the first patch of this patch set
> ("f2fs: fix zero-sized extent for precache extents").
Zijie,
Did you suffer this problem in product? right?
>
> When we use a wrong extent_info(zero-sized) to do update, and there exists a
> extent_node which has same fofs as the wrong one, we will skip "invalidate all extent
> nodes in range [fofs, fofs + len - 1]"(en->ei.fofs = end = tei->fofs + tei->len = tei->fofs),
> which cause the infinite loop in __insert_extent_tree().
>
> So we can add f2fs_bug_on() when there occurs zero-sized extent
> in f2fs_update_read_extent_cache_range(), and give up this zero-sized
> extent update to handle other unknown buggy cases. Do you think this will be better?
>
> And do we need to solve this infinite loop?
IMO, it's worth to end such loop if there is any corrupted extent in rbtree to
avoid kernel hang, no matter it is caused by software bug or hardware flaw
potentially.
Thanks,
>
>
>>>
>>> Signed-off-by: wangzijie <wangzijie1@honor.com>
>>> ---
>>> fs/f2fs/extent_cache.c | 1 +
>>> 1 file changed, 1 insertion(+)
>>>
>>> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
>>> index 199c1e7a8..6ed6f3d1d 100644
>>> --- a/fs/f2fs/extent_cache.c
>>> +++ b/fs/f2fs/extent_cache.c
>>> @@ -605,6 +605,7 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
>>> leftmost = false;
>>> } else {
>>> f2fs_bug_on(sbi, 1);
>>> + return NULL;
>>> }
>>> }
>>>
>>> --
>>> 2.25.1
_______________________________________________
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] 14+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree()
2025-09-16 6:46 ` Chao Yu via Linux-f2fs-devel
@ 2025-09-16 7:09 ` wangzijie
2025-09-16 7:28 ` Chao Yu via Linux-f2fs-devel
0 siblings, 1 reply; 14+ messages in thread
From: wangzijie @ 2025-09-16 7:09 UTC (permalink / raw)
To: chao; +Cc: feng.han, linux-kernel, linux-f2fs-devel, jaegeuk, wangzijie1
>On 9/16/25 13:22, wangzijie wrote:
>>> On 09/15, wangzijie wrote:
>>>> When we get wrong extent info data, and look up extent_node in rb tree,
>>>> it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
>>>> return NULL.
>>>
>>> This is the exact buggy case which we should fix the original one. Have
>>> you seen this error? In that case, can we consider writing some kernel
>>> message and handle the error properly?
>>
>> Hi Jaegeuk,
>> The original one is the bug I mentioned in the first patch of this patch set
>> ("f2fs: fix zero-sized extent for precache extents").
>
>Zijie,
>
>Did you suffer this problem in product? right?
Hi Chao,
Yes, and I can confirm that infinite loop cases I suffered are caused by the bug I
mentioned in the first patch of this patch set. But I'm not sure if there are
other cases that can cause this infinite loop.
>>
>> When we use a wrong extent_info(zero-sized) to do update, and there exists a
>> extent_node which has same fofs as the wrong one, we will skip "invalidate all extent
>> nodes in range [fofs, fofs + len - 1]"(en->ei.fofs = end = tei->fofs + tei->len = tei->fofs),
>> which cause the infinite loop in __insert_extent_tree().
>>
>> So we can add f2fs_bug_on() when there occurs zero-sized extent
>> in f2fs_update_read_extent_cache_range(), and give up this zero-sized
>> extent update to handle other unknown buggy cases. Do you think this will be better?
>>
>> And do we need to solve this infinite loop?
>
>IMO, it's worth to end such loop if there is any corrupted extent in rbtree to
>avoid kernel hang, no matter it is caused by software bug or hardware flaw
>potentially.
>
>Thanks,
And do you think we need this?
"add f2fs_bug_on() when there occurs zero-sized extent in f2fs_update_read_extent_cache_range(),
and give up this zero-sized extent update to handle other unknown buggy cases".
>>
>>
>>>>
>>>> Signed-off-by: wangzijie <wangzijie1@honor.com>
>>>> ---
>>>> fs/f2fs/extent_cache.c | 1 +
>>>> 1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
>>>> index 199c1e7a8..6ed6f3d1d 100644
>>>> --- a/fs/f2fs/extent_cache.c
>>>> +++ b/fs/f2fs/extent_cache.c
>>>> @@ -605,6 +605,7 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
>>>> leftmost = false;
>>>> } else {
>>>> f2fs_bug_on(sbi, 1);
>>>> + return NULL;
>>>> }
>>>> }
>>>>
>>>> --
>>>> 2.25.1
_______________________________________________
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] 14+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree()
2025-09-16 7:09 ` wangzijie
@ 2025-09-16 7:28 ` Chao Yu via Linux-f2fs-devel
2025-09-16 8:26 ` wangzijie
0 siblings, 1 reply; 14+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-09-16 7:28 UTC (permalink / raw)
To: wangzijie; +Cc: feng.han, linux-kernel, linux-f2fs-devel, jaegeuk
On 9/16/25 15:09, wangzijie wrote:
>> On 9/16/25 13:22, wangzijie wrote:
>>>> On 09/15, wangzijie wrote:
>>>>> When we get wrong extent info data, and look up extent_node in rb tree,
>>>>> it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
>>>>> return NULL.
>>>>
>>>> This is the exact buggy case which we should fix the original one. Have
>>>> you seen this error? In that case, can we consider writing some kernel
>>>> message and handle the error properly?
>>>
>>> Hi Jaegeuk,
>>> The original one is the bug I mentioned in the first patch of this patch set
>>> ("f2fs: fix zero-sized extent for precache extents").
>>
>> Zijie,
>>
>> Did you suffer this problem in product? right?
>
> Hi Chao,
> Yes, and I can confirm that infinite loop cases I suffered are caused by the bug I
> mentioned in the first patch of this patch set. But I'm not sure if there are
> other cases that can cause this infinite loop.
>
>>>
>>> When we use a wrong extent_info(zero-sized) to do update, and there exists a
>>> extent_node which has same fofs as the wrong one, we will skip "invalidate all extent
>>> nodes in range [fofs, fofs + len - 1]"(en->ei.fofs = end = tei->fofs + tei->len = tei->fofs),
>>> which cause the infinite loop in __insert_extent_tree().
>>>
>>> So we can add f2fs_bug_on() when there occurs zero-sized extent
>>> in f2fs_update_read_extent_cache_range(), and give up this zero-sized
>>> extent update to handle other unknown buggy cases. Do you think this will be better?
>>>
>>> And do we need to solve this infinite loop?
>>
>> IMO, it's worth to end such loop if there is any corrupted extent in rbtree to
>> avoid kernel hang, no matter it is caused by software bug or hardware flaw
>> potentially.
>>
>> Thanks,
>
> And do you think we need this?
> "add f2fs_bug_on() when there occurs zero-sized extent in f2fs_update_read_extent_cache_range(),
> and give up this zero-sized extent update to handle other unknown buggy cases".
Oh, I was testing below patch..., does this what you want to do?
I think we can keep all your patches, and appending below patch to detect any
potential cases who will update a zero-sized extent.
From 439d61ef3715fafa5c9f2d1b7f8026cdd2564ca7 Mon Sep 17 00:00:00 2001
From: Chao Yu <chao@kernel.org>
Date: Tue, 16 Sep 2025 11:52:30 +0800
Subject: [PATCH] f2fs: add sanity check on ei.len in
__update_extent_tree_range()
Add a sanity check in __update_extent_tree_range() to detect any
zero-sized extent update.
Signed-off-by: Chao Yu <chao@kernel.org>
---
fs/f2fs/extent_cache.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index 199c1e7a83ef..9544323767be 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -664,6 +664,15 @@ static void __update_extent_tree_range(struct inode *inode,
if (!et)
return;
+ if (unlikely(len == 0)) {
+ f2fs_bug_on(sbi, 1);
+ f2fs_err_ratelimited(sbi, "%s: extent len is zero, type: %d, "
+ "extent [%u, %u, %u], age [%llu, %llu]",
+ __func__, type, tei->fofs, tei->blk, tei->len,
+ tei->age, tei->last_blocks);
+ return;
+ }
+
if (type == EX_READ)
trace_f2fs_update_read_extent_tree_range(inode, fofs, len,
tei->blk, 0);
--
2.49.0
>
>
>
>>>
>>>
>>>>>
>>>>> Signed-off-by: wangzijie <wangzijie1@honor.com>
>>>>> ---
>>>>> fs/f2fs/extent_cache.c | 1 +
>>>>> 1 file changed, 1 insertion(+)
>>>>>
>>>>> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
>>>>> index 199c1e7a8..6ed6f3d1d 100644
>>>>> --- a/fs/f2fs/extent_cache.c
>>>>> +++ b/fs/f2fs/extent_cache.c
>>>>> @@ -605,6 +605,7 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
>>>>> leftmost = false;
>>>>> } else {
>>>>> f2fs_bug_on(sbi, 1);
>>>>> + return NULL;
>>>>> }
>>>>> }
>>>>>
>>>>> --
>>>>> 2.25.1
>
_______________________________________________
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] 14+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree()
2025-09-16 7:28 ` Chao Yu via Linux-f2fs-devel
@ 2025-09-16 8:26 ` wangzijie
2025-09-16 8:49 ` Chao Yu via Linux-f2fs-devel
0 siblings, 1 reply; 14+ messages in thread
From: wangzijie @ 2025-09-16 8:26 UTC (permalink / raw)
To: chao; +Cc: feng.han, linux-kernel, linux-f2fs-devel, jaegeuk, wangzijie1
>On 9/16/25 15:09, wangzijie wrote:
>>> On 9/16/25 13:22, wangzijie wrote:
>>>>> On 09/15, wangzijie wrote:
>>>>>> When we get wrong extent info data, and look up extent_node in rb tree,
>>>>>> it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
>>>>>> return NULL.
>>>>>
>>>>> This is the exact buggy case which we should fix the original one. Have
>>>>> you seen this error? In that case, can we consider writing some kernel
>>>>> message and handle the error properly?
>>>>
>>>> Hi Jaegeuk,
>>>> The original one is the bug I mentioned in the first patch of this patch set
>>>> ("f2fs: fix zero-sized extent for precache extents").
>>>
>>> Zijie,
>>>
>>> Did you suffer this problem in product? right?
>>
>> Hi Chao,
>> Yes, and I can confirm that infinite loop cases I suffered are caused by the bug I
>> mentioned in the first patch of this patch set. But I'm not sure if there are
>> other cases that can cause this infinite loop.
>>
>>>>
>>>> When we use a wrong extent_info(zero-sized) to do update, and there exists a
>>>> extent_node which has same fofs as the wrong one, we will skip "invalidate all extent
>>>> nodes in range [fofs, fofs + len - 1]"(en->ei.fofs = end = tei->fofs + tei->len = tei->fofs),
>>>> which cause the infinite loop in __insert_extent_tree().
>>>>
>>>> So we can add f2fs_bug_on() when there occurs zero-sized extent
>>>> in f2fs_update_read_extent_cache_range(), and give up this zero-sized
>>>> extent update to handle other unknown buggy cases. Do you think this will be better?
>>>>
>>>> And do we need to solve this infinite loop?
>>>
>>> IMO, it's worth to end such loop if there is any corrupted extent in rbtree to
>>> avoid kernel hang, no matter it is caused by software bug or hardware flaw
>>> potentially.
>>>
>>> Thanks,
>>
>> And do you think we need this?
>> "add f2fs_bug_on() when there occurs zero-sized extent in f2fs_update_read_extent_cache_range(),
>> and give up this zero-sized extent update to handle other unknown buggy cases".
>
>Oh, I was testing below patch..., does this what you want to do?
>
>I think we can keep all your patches, and appending below patch to detect any
>potential cases who will update a zero-sized extent.
>
>>From 439d61ef3715fafa5c9f2d1b7f8026cdd2564ca7 Mon Sep 17 00:00:00 2001
>From: Chao Yu <chao@kernel.org>
>Date: Tue, 16 Sep 2025 11:52:30 +0800
>Subject: [PATCH] f2fs: add sanity check on ei.len in
> __update_extent_tree_range()
>
>Add a sanity check in __update_extent_tree_range() to detect any
>zero-sized extent update.
>
>Signed-off-by: Chao Yu <chao@kernel.org>
>---
> fs/f2fs/extent_cache.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
>diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
>index 199c1e7a83ef..9544323767be 100644
>--- a/fs/f2fs/extent_cache.c
>+++ b/fs/f2fs/extent_cache.c
>@@ -664,6 +664,15 @@ static void __update_extent_tree_range(struct inode *inode,
> if (!et)
> return;
>
>+ if (unlikely(len == 0)) {
>+ f2fs_bug_on(sbi, 1);
>+ f2fs_err_ratelimited(sbi, "%s: extent len is zero, type: %d, "
>+ "extent [%u, %u, %u], age [%llu, %llu]",
>+ __func__, type, tei->fofs, tei->blk, tei->len,
>+ tei->age, tei->last_blocks);
>+ return;
>+ }
>+
> if (type == EX_READ)
> trace_f2fs_update_read_extent_tree_range(inode, fofs, len,
> tei->blk, 0);
>--
>2.49.0
Yes, that's exactly what I want to do.
Maybe we should relocate f2fs_bug_on()?
if (unlikely(len == 0)) {
f2fs_err_ratelimited(sbi, "%s: extent len is zero, type: %d, "
"extent [%u, %u, %u], age [%llu, %llu]",
__func__, type, tei->fofs, tei->blk, tei->len,
tei->age, tei->last_blocks);
f2fs_bug_on(sbi, 1);
return;
}
>>
>>
>>
>>>>
>>>>
>>>>>>
>>>>>> Signed-off-by: wangzijie <wangzijie1@honor.com>
>>>>>> ---
>>>>>> fs/f2fs/extent_cache.c | 1 +
>>>>>> 1 file changed, 1 insertion(+)
>>>>>>
>>>>>> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
>>>>>> index 199c1e7a8..6ed6f3d1d 100644
>>>>>> --- a/fs/f2fs/extent_cache.c
>>>>>> +++ b/fs/f2fs/extent_cache.c
>>>>>> @@ -605,6 +605,7 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
>>>>>> leftmost = false;
>>>>>> } else {
>>>>>> f2fs_bug_on(sbi, 1);
>>>>>> + return NULL;
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> --
>>>>>> 2.25.1
>>
_______________________________________________
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] 14+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree()
2025-09-16 8:26 ` wangzijie
@ 2025-09-16 8:49 ` Chao Yu via Linux-f2fs-devel
2025-09-16 9:02 ` wangzijie
0 siblings, 1 reply; 14+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-09-16 8:49 UTC (permalink / raw)
To: wangzijie; +Cc: feng.han, linux-kernel, linux-f2fs-devel, jaegeuk
On 9/16/25 16:26, wangzijie wrote:
>> On 9/16/25 15:09, wangzijie wrote:
>>>> On 9/16/25 13:22, wangzijie wrote:
>>>>>> On 09/15, wangzijie wrote:
>>>>>>> When we get wrong extent info data, and look up extent_node in rb tree,
>>>>>>> it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
>>>>>>> return NULL.
>>>>>>
>>>>>> This is the exact buggy case which we should fix the original one. Have
>>>>>> you seen this error? In that case, can we consider writing some kernel
>>>>>> message and handle the error properly?
>>>>>
>>>>> Hi Jaegeuk,
>>>>> The original one is the bug I mentioned in the first patch of this patch set
>>>>> ("f2fs: fix zero-sized extent for precache extents").
>>>>
>>>> Zijie,
>>>>
>>>> Did you suffer this problem in product? right?
>>>
>>> Hi Chao,
>>> Yes, and I can confirm that infinite loop cases I suffered are caused by the bug I
>>> mentioned in the first patch of this patch set. But I'm not sure if there are
>>> other cases that can cause this infinite loop.
>>>
>>>>>
>>>>> When we use a wrong extent_info(zero-sized) to do update, and there exists a
>>>>> extent_node which has same fofs as the wrong one, we will skip "invalidate all extent
>>>>> nodes in range [fofs, fofs + len - 1]"(en->ei.fofs = end = tei->fofs + tei->len = tei->fofs),
>>>>> which cause the infinite loop in __insert_extent_tree().
>>>>>
>>>>> So we can add f2fs_bug_on() when there occurs zero-sized extent
>>>>> in f2fs_update_read_extent_cache_range(), and give up this zero-sized
>>>>> extent update to handle other unknown buggy cases. Do you think this will be better?
>>>>>
>>>>> And do we need to solve this infinite loop?
>>>>
>>>> IMO, it's worth to end such loop if there is any corrupted extent in rbtree to
>>>> avoid kernel hang, no matter it is caused by software bug or hardware flaw
>>>> potentially.
>>>>
>>>> Thanks,
>>>
>>> And do you think we need this?
>>> "add f2fs_bug_on() when there occurs zero-sized extent in f2fs_update_read_extent_cache_range(),
>>> and give up this zero-sized extent update to handle other unknown buggy cases".
>>
>> Oh, I was testing below patch..., does this what you want to do?
>>
>> I think we can keep all your patches, and appending below patch to detect any
>> potential cases who will update a zero-sized extent.
>>
>> >From 439d61ef3715fafa5c9f2d1b7f8026cdd2564ca7 Mon Sep 17 00:00:00 2001
>> From: Chao Yu <chao@kernel.org>
>> Date: Tue, 16 Sep 2025 11:52:30 +0800
>> Subject: [PATCH] f2fs: add sanity check on ei.len in
>> __update_extent_tree_range()
>>
>> Add a sanity check in __update_extent_tree_range() to detect any
>> zero-sized extent update.
>>
>> Signed-off-by: Chao Yu <chao@kernel.org>
>> ---
>> fs/f2fs/extent_cache.c | 9 +++++++++
>> 1 file changed, 9 insertions(+)
>>
>> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
>> index 199c1e7a83ef..9544323767be 100644
>> --- a/fs/f2fs/extent_cache.c
>> +++ b/fs/f2fs/extent_cache.c
>> @@ -664,6 +664,15 @@ static void __update_extent_tree_range(struct inode *inode,
>> if (!et)
>> return;
>>
>> + if (unlikely(len == 0)) {
>> + f2fs_bug_on(sbi, 1);
>> + f2fs_err_ratelimited(sbi, "%s: extent len is zero, type: %d, "
>> + "extent [%u, %u, %u], age [%llu, %llu]",
>> + __func__, type, tei->fofs, tei->blk, tei->len,
>> + tei->age, tei->last_blocks);
>> + return;
>> + }
>> +
>> if (type == EX_READ)
>> trace_f2fs_update_read_extent_tree_range(inode, fofs, len,
>> tei->blk, 0);
>> --
>> 2.49.0
>
> Yes, that's exactly what I want to do.
> Maybe we should relocate f2fs_bug_on()?
>
> if (unlikely(len == 0)) {
> f2fs_err_ratelimited(sbi, "%s: extent len is zero, type: %d, "
> "extent [%u, %u, %u], age [%llu, %llu]",
> __func__, type, tei->fofs, tei->blk, tei->len,
> tei->age, tei->last_blocks);
> f2fs_bug_on(sbi, 1);
> return;
> }
Yeah, looks better.
I don't see any problem in my test, will send a formal patch, let me add
Signed-off-by of you if you don't mind. :)
Thanks,
>
>>>
>>>
>>>
>>>>>
>>>>>
>>>>>>>
>>>>>>> Signed-off-by: wangzijie <wangzijie1@honor.com>
>>>>>>> ---
>>>>>>> fs/f2fs/extent_cache.c | 1 +
>>>>>>> 1 file changed, 1 insertion(+)
>>>>>>>
>>>>>>> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
>>>>>>> index 199c1e7a8..6ed6f3d1d 100644
>>>>>>> --- a/fs/f2fs/extent_cache.c
>>>>>>> +++ b/fs/f2fs/extent_cache.c
>>>>>>> @@ -605,6 +605,7 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
>>>>>>> leftmost = false;
>>>>>>> } else {
>>>>>>> f2fs_bug_on(sbi, 1);
>>>>>>> + return NULL;
>>>>>>> }
>>>>>>> }
>>>>>>>
>>>>>>> --
>>>>>>> 2.25.1
>>>
>
_______________________________________________
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] 14+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree()
2025-09-16 8:49 ` Chao Yu via Linux-f2fs-devel
@ 2025-09-16 9:02 ` wangzijie
0 siblings, 0 replies; 14+ messages in thread
From: wangzijie @ 2025-09-16 9:02 UTC (permalink / raw)
To: chao; +Cc: feng.han, linux-kernel, linux-f2fs-devel, jaegeuk, wangzijie1
>On 9/16/25 16:26, wangzijie wrote:
>>> On 9/16/25 15:09, wangzijie wrote:
>>>>> On 9/16/25 13:22, wangzijie wrote:
>>>>>>> On 09/15, wangzijie wrote:
>>>>>>>> When we get wrong extent info data, and look up extent_node in rb tree,
>>>>>>>> it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
>>>>>>>> return NULL.
>>>>>>>
>>>>>>> This is the exact buggy case which we should fix the original one. Have
>>>>>>> you seen this error? In that case, can we consider writing some kernel
>>>>>>> message and handle the error properly?
>>>>>>
>>>>>> Hi Jaegeuk,
>>>>>> The original one is the bug I mentioned in the first patch of this patch set
>>>>>> ("f2fs: fix zero-sized extent for precache extents").
>>>>>
>>>>> Zijie,
>>>>>
>>>>> Did you suffer this problem in product? right?
>>>>
>>>> Hi Chao,
>>>> Yes, and I can confirm that infinite loop cases I suffered are caused by the bug I
>>>> mentioned in the first patch of this patch set. But I'm not sure if there are
>>>> other cases that can cause this infinite loop.
>>>>
>>>>>>
>>>>>> When we use a wrong extent_info(zero-sized) to do update, and there exists a
>>>>>> extent_node which has same fofs as the wrong one, we will skip "invalidate all extent
>>>>>> nodes in range [fofs, fofs + len - 1]"(en->ei.fofs = end = tei->fofs + tei->len = tei->fofs),
>>>>>> which cause the infinite loop in __insert_extent_tree().
>>>>>>
>>>>>> So we can add f2fs_bug_on() when there occurs zero-sized extent
>>>>>> in f2fs_update_read_extent_cache_range(), and give up this zero-sized
>>>>>> extent update to handle other unknown buggy cases. Do you think this will be better?
>>>>>>
>>>>>> And do we need to solve this infinite loop?
>>>>>
>>>>> IMO, it's worth to end such loop if there is any corrupted extent in rbtree to
>>>>> avoid kernel hang, no matter it is caused by software bug or hardware flaw
>>>>> potentially.
>>>>>
>>>>> Thanks,
>>>>
>>>> And do you think we need this?
>>>> "add f2fs_bug_on() when there occurs zero-sized extent in f2fs_update_read_extent_cache_range(),
>>>> and give up this zero-sized extent update to handle other unknown buggy cases".
>>>
>>> Oh, I was testing below patch..., does this what you want to do?
>>>
>>> I think we can keep all your patches, and appending below patch to detect any
>>> potential cases who will update a zero-sized extent.
>>>
>>> >From 439d61ef3715fafa5c9f2d1b7f8026cdd2564ca7 Mon Sep 17 00:00:00 2001
>>> From: Chao Yu <chao@kernel.org>
>>> Date: Tue, 16 Sep 2025 11:52:30 +0800
>>> Subject: [PATCH] f2fs: add sanity check on ei.len in
>>> __update_extent_tree_range()
>>>
>>> Add a sanity check in __update_extent_tree_range() to detect any
>>> zero-sized extent update.
>>>
>>> Signed-off-by: Chao Yu <chao@kernel.org>
>>> ---
>>> fs/f2fs/extent_cache.c | 9 +++++++++
>>> 1 file changed, 9 insertions(+)
>>>
>>> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
>>> index 199c1e7a83ef..9544323767be 100644
>>> --- a/fs/f2fs/extent_cache.c
>>> +++ b/fs/f2fs/extent_cache.c
>>> @@ -664,6 +664,15 @@ static void __update_extent_tree_range(struct inode *inode,
>>> if (!et)
>>> return;
>>>
>>> + if (unlikely(len == 0)) {
>>> + f2fs_bug_on(sbi, 1);
>>> + f2fs_err_ratelimited(sbi, "%s: extent len is zero, type: %d, "
>>> + "extent [%u, %u, %u], age [%llu, %llu]",
>>> + __func__, type, tei->fofs, tei->blk, tei->len,
>>> + tei->age, tei->last_blocks);
>>> + return;
>>> + }
>>> +
>>> if (type == EX_READ)
>>> trace_f2fs_update_read_extent_tree_range(inode, fofs, len,
>>> tei->blk, 0);
>>> --
>>> 2.49.0
>>
>> Yes, that's exactly what I want to do.
>> Maybe we should relocate f2fs_bug_on()?
>>
>> if (unlikely(len == 0)) {
>> f2fs_err_ratelimited(sbi, "%s: extent len is zero, type: %d, "
>> "extent [%u, %u, %u], age [%llu, %llu]",
>> __func__, type, tei->fofs, tei->blk, tei->len,
>> tei->age, tei->last_blocks);
>> f2fs_bug_on(sbi, 1);
>> return;
>> }
>
>Yeah, looks better.
>
>I don't see any problem in my test, will send a formal patch, let me add
>Signed-off-by of you if you don't mind. :)
>
>Thanks,
OK, thanks for your help.
>>
>>>>
>>>>
>>>>
>>>>>>
>>>>>>
>>>>>>>>
>>>>>>>> Signed-off-by: wangzijie <wangzijie1@honor.com>
>>>>>>>> ---
>>>>>>>> fs/f2fs/extent_cache.c | 1 +
>>>>>>>> 1 file changed, 1 insertion(+)
>>>>>>>>
>>>>>>>> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
>>>>>>>> index 199c1e7a8..6ed6f3d1d 100644
>>>>>>>> --- a/fs/f2fs/extent_cache.c
>>>>>>>> +++ b/fs/f2fs/extent_cache.c
>>>>>>>> @@ -605,6 +605,7 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
>>>>>>>> leftmost = false;
>>>>>>>> } else {
>>>>>>>> f2fs_bug_on(sbi, 1);
>>>>>>>> + return NULL;
>>>>>>>> }
>>>>>>>> }
>>>>>>>>
>>>>>>>> --
>>>>>>>> 2.25.1
>>>>
>>
_______________________________________________
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] 14+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree()
2025-09-15 3:52 ` [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree() wangzijie
2025-09-15 8:05 ` Chao Yu via Linux-f2fs-devel
2025-09-16 2:21 ` Jaegeuk Kim via Linux-f2fs-devel
@ 2025-09-16 12:12 ` Chao Yu via Linux-f2fs-devel
2025-09-16 12:36 ` wangzijie
2 siblings, 1 reply; 14+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-09-16 12:12 UTC (permalink / raw)
To: wangzijie, jaegeuk; +Cc: linux-kernel, feng.han, linux-f2fs-devel
On 9/15/25 11:52, wangzijie wrote:
> When we get wrong extent info data, and look up extent_node in rb tree,
> it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
> return NULL.
>
> Signed-off-by: wangzijie <wangzijie1@honor.com>
> ---
> fs/f2fs/extent_cache.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
> index 199c1e7a8..6ed6f3d1d 100644
> --- a/fs/f2fs/extent_cache.c
> +++ b/fs/f2fs/extent_cache.c
> @@ -605,6 +605,7 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
> leftmost = false;
> } else {
Need to print some messages here as Jaegeuk suggested, IIUC.
Thanks,
> f2fs_bug_on(sbi, 1);
> + return NULL;
> }
> }
>
_______________________________________________
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] 14+ messages in thread
* Re: [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree()
2025-09-16 12:12 ` Chao Yu via Linux-f2fs-devel
@ 2025-09-16 12:36 ` wangzijie
0 siblings, 0 replies; 14+ messages in thread
From: wangzijie @ 2025-09-16 12:36 UTC (permalink / raw)
To: chao; +Cc: feng.han, linux-kernel, linux-f2fs-devel, jaegeuk, wangzijie1
>On 9/15/25 11:52, wangzijie wrote:
>> When we get wrong extent info data, and look up extent_node in rb tree,
>> it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
>> return NULL.
>>
>> Signed-off-by: wangzijie <wangzijie1@honor.com>
>> ---
>> fs/f2fs/extent_cache.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
>> index 199c1e7a8..6ed6f3d1d 100644
>> --- a/fs/f2fs/extent_cache.c
>> +++ b/fs/f2fs/extent_cache.c
>> @@ -605,6 +605,7 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
>> leftmost = false;
>> } else {
>
>Need to print some messages here as Jaegeuk suggested, IIUC.
>
>Thanks,
OK, I will update it in next version.
>> f2fs_bug_on(sbi, 1);
>> + return NULL;
>> }
>> }
>>
_______________________________________________
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] 14+ messages in thread
end of thread, other threads:[~2025-09-16 12:37 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-15 3:52 [f2fs-dev] [PATCH v2 1/2] f2fs: fix zero-sized extent for precache extents wangzijie
2025-09-15 3:52 ` [f2fs-dev] [PATCH v2 2/2] f2fs: fix infinite loop in __insert_extent_tree() wangzijie
2025-09-15 8:05 ` Chao Yu via Linux-f2fs-devel
2025-09-16 2:21 ` Jaegeuk Kim via Linux-f2fs-devel
2025-09-16 5:22 ` wangzijie
2025-09-16 6:46 ` Chao Yu via Linux-f2fs-devel
2025-09-16 7:09 ` wangzijie
2025-09-16 7:28 ` Chao Yu via Linux-f2fs-devel
2025-09-16 8:26 ` wangzijie
2025-09-16 8:49 ` Chao Yu via Linux-f2fs-devel
2025-09-16 9:02 ` wangzijie
2025-09-16 12:12 ` Chao Yu via Linux-f2fs-devel
2025-09-16 12:36 ` wangzijie
2025-09-15 8:05 ` [f2fs-dev] [PATCH v2 1/2] f2fs: fix zero-sized extent for precache extents Chao Yu 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).