2024-01-29 10:22:56

by 牛志国 (Zhiguo Niu)

[permalink] [raw]
Subject: [PATCH 0/3] f2fs: fix panic issue in small capacity device

A panic issue happened in a reboot test in small capacity device
as following:
1.The device size is 64MB, and main area has 24 segments, and
CONFIG_F2FS_CHECK_FS is not enabled.
2.There is no any free segments left shown in free_segmap_info,
then another write request cause get_new_segment get a out-of-bound
segment with segno 24.
3.panic happen in update_sit_entry because access invalid bitmap
pointer.

More detail shown in following three patches.
The three patches are splited here because the modifications are
relatively independent and more readable.

Zhiguo Niu (3):
f2fs: correct counting methods of free_segments in __set_inuse
f2fs: fix panic issue in update_sit_entry
f2fs: enhance judgment conditions of GET_SEGNO

fs/f2fs/file.c | 7 ++++++-
fs/f2fs/segment.c | 9 ++++++---
fs/f2fs/segment.h | 7 ++++---
3 files changed, 16 insertions(+), 7 deletions(-)

--
1.9.1



2024-02-06 03:16:00

by Jaegeuk Kim

[permalink] [raw]
Subject: Re: [PATCH 0/3] f2fs: fix panic issue in small capacity device

On 01/29, Zhiguo Niu wrote:
> A panic issue happened in a reboot test in small capacity device
> as following:
> 1.The device size is 64MB, and main area has 24 segments, and
> CONFIG_F2FS_CHECK_FS is not enabled.
> 2.There is no any free segments left shown in free_segmap_info,
> then another write request cause get_new_segment get a out-of-bound
> segment with segno 24.
> 3.panic happen in update_sit_entry because access invalid bitmap
> pointer.

The goal here is to stop f2fs when it hits no space to write anymore?
And, we need f2fs_stop_checkpoint() at the end?

>
> More detail shown in following three patches.
> The three patches are splited here because the modifications are
> relatively independent and more readable.
>
> Zhiguo Niu (3):
> f2fs: correct counting methods of free_segments in __set_inuse
> f2fs: fix panic issue in update_sit_entry
> f2fs: enhance judgment conditions of GET_SEGNO
>
> fs/f2fs/file.c | 7 ++++++-
> fs/f2fs/segment.c | 9 ++++++---
> fs/f2fs/segment.h | 7 ++++---
> 3 files changed, 16 insertions(+), 7 deletions(-)
>
> --
> 1.9.1

2024-02-06 05:58:25

by Zhiguo Niu

[permalink] [raw]
Subject: Re: [PATCH 0/3] f2fs: fix panic issue in small capacity device

On Tue, Feb 6, 2024 at 11:15 AM Jaegeuk Kim <[email protected]> wrote:
>
> On 01/29, Zhiguo Niu wrote:
> > A panic issue happened in a reboot test in small capacity device
> > as following:
> > 1.The device size is 64MB, and main area has 24 segments, and
> > CONFIG_F2FS_CHECK_FS is not enabled.
> > 2.There is no any free segments left shown in free_segmap_info,
> > then another write request cause get_new_segment get a out-of-bound
> > segment with segno 24.
> > 3.panic happen in update_sit_entry because access invalid bitmap
> > pointer.
>
> The goal here is to stop f2fs when it hits no space to write anymore?
Do not let the system crash now , and add some sanity check to avoid
accessing illegal memory
> And, we need f2fs_stop_checkpoint() at the end?
I think it need indeed.
thanks!
>
> >
> > More detail shown in following three patches.
> > The three patches are splited here because the modifications are
> > relatively independent and more readable.
> >
> > Zhiguo Niu (3):
> > f2fs: correct counting methods of free_segments in __set_inuse
> > f2fs: fix panic issue in update_sit_entry
> > f2fs: enhance judgment conditions of GET_SEGNO
> >
> > fs/f2fs/file.c | 7 ++++++-
> > fs/f2fs/segment.c | 9 ++++++---
> > fs/f2fs/segment.h | 7 ++++---
> > 3 files changed, 16 insertions(+), 7 deletions(-)
> >
> > --
> > 1.9.1