mbox series

[f2fs-dev,0/3] f2fs: fix panic issue in small capacity device

Message ID 1706523684-24540-1-git-send-email-zhiguo.niu@unisoc.com (mailing list archive)
Headers show
Series f2fs: fix panic issue in small capacity device | expand

Message

Zhiguo Niu Jan. 29, 2024, 10:21 a.m. UTC
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(-)

Comments

Jaegeuk Kim Feb. 6, 2024, 3:15 a.m. UTC | #1
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
Zhiguo Niu Feb. 6, 2024, 5:58 a.m. UTC | #2
On Tue, Feb 6, 2024 at 11:15 AM Jaegeuk Kim <jaegeuk@kernel.org> 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