Re: [LTP] [f2fs] 02eb84b96b: ltp.swapon03.fail

2021-03-23 Thread Chao Yu

On 2021/3/11 4:49, Jaegeuk Kim wrote:

On 03/10, Huang Jianan wrote:

Hi Richard,

On 2021/3/9 12:01, Matthew Wilcox wrote:

On Tue, Mar 09, 2021 at 10:23:35AM +0800, Weichao Guo wrote:

Hi Richard,

On 2021/3/8 19:53, Richard Palethorpe wrote:

Hello,


kern  :err   : [  187.461914] F2FS-fs (sda1): Swapfile does not align to section
commit 02eb84b96bc1b382dd138bf60724edbefe77b025
Author: huangjia...@oppo.com 
Date:   Mon Mar 1 12:58:44 2021 +0800
   f2fs: check if swapfile is section-alligned
   If the swapfile isn't created by pin and fallocate, it can't be
   guaranteed section-aligned, so it may be selected by f2fs gc. When
   gc_pin_file_threshold is reached, the address of swapfile may change,
   but won't be synchronized to swap_extent, so swap will write to wrong
   address, which will cause data corruption.
   Signed-off-by: Huang Jianan 
   Signed-off-by: Guo Weichao 
   Reviewed-by: Chao Yu 
   Signed-off-by: Jaegeuk Kim 

The test uses fallocate to preallocate the swap file and writes zeros to
it. I'm not sure what pin refers to?

'pin' refers to pinned file feature in F2FS, the LBA(Logical Block Address)
of a file is fixed after pinned. Without this operation before fallocate,
the LBA may not align with section(F2FS GC unit), some LBA of the file may
be changed by F2FS GC in some extreme cases.

For this test case, how about pin the swap file before fallocate for F2FS as
following:

ioctl(fd, F2FS_IOC_SET_PIN_FILE, true);

No special ioctl should be needed.  f2fs_swap_activate() should pin the
file, just like it converts inline inodes and disables compression.


Now f2fs_swap_activate() will pin the file. The problem is that when
f2fs_swap_activate()

is executed, the file has been created and may not be section-aligned.

So I think it would be better to consider aligning the swapfile during
f2fs_swap_activate()?


Does it make sense to reallocate blocks like
in f2fs_swap_activate(),
set_inode_flag(inode, FI_PIN_FILE);
truncate_pagecache(inode, 0);
f2fs_truncate_blocks(inode, 0, true);


It will corrupt swap header info while relocating whole swapfile...


expand_inode_data();
.



Re: [LTP] [f2fs] 02eb84b96b: ltp.swapon03.fail

2021-03-10 Thread Jaegeuk Kim
On 03/10, Huang Jianan wrote:
> Hi Richard,
> 
> On 2021/3/9 12:01, Matthew Wilcox wrote:
> > On Tue, Mar 09, 2021 at 10:23:35AM +0800, Weichao Guo wrote:
> > > Hi Richard,
> > > 
> > > On 2021/3/8 19:53, Richard Palethorpe wrote:
> > > > Hello,
> > > > 
> > > > > kern  :err   : [  187.461914] F2FS-fs (sda1): Swapfile does not align 
> > > > > to section
> > > > > commit 02eb84b96bc1b382dd138bf60724edbefe77b025
> > > > > Author: huangjia...@oppo.com 
> > > > > Date:   Mon Mar 1 12:58:44 2021 +0800
> > > > >   f2fs: check if swapfile is section-alligned
> > > > >   If the swapfile isn't created by pin and fallocate, it can't be
> > > > >   guaranteed section-aligned, so it may be selected by f2fs gc. 
> > > > > When
> > > > >   gc_pin_file_threshold is reached, the address of swapfile may 
> > > > > change,
> > > > >   but won't be synchronized to swap_extent, so swap will write to 
> > > > > wrong
> > > > >   address, which will cause data corruption.
> > > > >   Signed-off-by: Huang Jianan 
> > > > >   Signed-off-by: Guo Weichao 
> > > > >   Reviewed-by: Chao Yu 
> > > > >   Signed-off-by: Jaegeuk Kim 
> > > > The test uses fallocate to preallocate the swap file and writes zeros to
> > > > it. I'm not sure what pin refers to?
> > > 'pin' refers to pinned file feature in F2FS, the LBA(Logical Block 
> > > Address)
> > > of a file is fixed after pinned. Without this operation before fallocate,
> > > the LBA may not align with section(F2FS GC unit), some LBA of the file may
> > > be changed by F2FS GC in some extreme cases.
> > > 
> > > For this test case, how about pin the swap file before fallocate for F2FS 
> > > as
> > > following:
> > > 
> > > ioctl(fd, F2FS_IOC_SET_PIN_FILE, true);
> > No special ioctl should be needed.  f2fs_swap_activate() should pin the
> > file, just like it converts inline inodes and disables compression.
> 
> Now f2fs_swap_activate() will pin the file. The problem is that when
> f2fs_swap_activate()
> 
> is executed, the file has been created and may not be section-aligned.
> 
> So I think it would be better to consider aligning the swapfile during
> f2fs_swap_activate()?

Does it make sense to reallocate blocks like
in f2fs_swap_activate(),
set_inode_flag(inode, FI_PIN_FILE);
truncate_pagecache(inode, 0);
f2fs_truncate_blocks(inode, 0, true);
expand_inode_data();


Re: [LTP] [f2fs] 02eb84b96b: ltp.swapon03.fail

2021-03-09 Thread Huang Jianan

Hi Richard,

On 2021/3/9 12:01, Matthew Wilcox wrote:

On Tue, Mar 09, 2021 at 10:23:35AM +0800, Weichao Guo wrote:

Hi Richard,

On 2021/3/8 19:53, Richard Palethorpe wrote:

Hello,


kern  :err   : [  187.461914] F2FS-fs (sda1): Swapfile does not align to section
commit 02eb84b96bc1b382dd138bf60724edbefe77b025
Author: huangjia...@oppo.com 
Date:   Mon Mar 1 12:58:44 2021 +0800
  f2fs: check if swapfile is section-alligned
  If the swapfile isn't created by pin and fallocate, it can't be
  guaranteed section-aligned, so it may be selected by f2fs gc. When
  gc_pin_file_threshold is reached, the address of swapfile may change,
  but won't be synchronized to swap_extent, so swap will write to wrong
  address, which will cause data corruption.
  Signed-off-by: Huang Jianan 
  Signed-off-by: Guo Weichao 
  Reviewed-by: Chao Yu 
  Signed-off-by: Jaegeuk Kim 

The test uses fallocate to preallocate the swap file and writes zeros to
it. I'm not sure what pin refers to?

'pin' refers to pinned file feature in F2FS, the LBA(Logical Block Address)
of a file is fixed after pinned. Without this operation before fallocate,
the LBA may not align with section(F2FS GC unit), some LBA of the file may
be changed by F2FS GC in some extreme cases.

For this test case, how about pin the swap file before fallocate for F2FS as
following:

ioctl(fd, F2FS_IOC_SET_PIN_FILE, true);

No special ioctl should be needed.  f2fs_swap_activate() should pin the
file, just like it converts inline inodes and disables compression.


Now f2fs_swap_activate() will pin the file. The problem is that when 
f2fs_swap_activate()


is executed, the file has been created and may not be section-aligned.

So I think it would be better to consider aligning the swapfile during 
f2fs_swap_activate()?




Re: [LTP] [f2fs] 02eb84b96b: ltp.swapon03.fail

2021-03-08 Thread Matthew Wilcox
On Tue, Mar 09, 2021 at 10:23:35AM +0800, Weichao Guo wrote:
> Hi Richard,
> 
> On 2021/3/8 19:53, Richard Palethorpe wrote:
> > Hello,
> > 
> > > kern  :err   : [  187.461914] F2FS-fs (sda1): Swapfile does not align to 
> > > section
> > > commit 02eb84b96bc1b382dd138bf60724edbefe77b025
> > > Author: huangjia...@oppo.com 
> > > Date:   Mon Mar 1 12:58:44 2021 +0800
> > >  f2fs: check if swapfile is section-alligned
> > >  If the swapfile isn't created by pin and fallocate, it can't be
> > >  guaranteed section-aligned, so it may be selected by f2fs gc. When
> > >  gc_pin_file_threshold is reached, the address of swapfile may change,
> > >  but won't be synchronized to swap_extent, so swap will write to wrong
> > >  address, which will cause data corruption.
> > >  Signed-off-by: Huang Jianan 
> > >  Signed-off-by: Guo Weichao 
> > >  Reviewed-by: Chao Yu 
> > >  Signed-off-by: Jaegeuk Kim 
> > The test uses fallocate to preallocate the swap file and writes zeros to
> > it. I'm not sure what pin refers to?
> 
> 'pin' refers to pinned file feature in F2FS, the LBA(Logical Block Address)
> of a file is fixed after pinned. Without this operation before fallocate,
> the LBA may not align with section(F2FS GC unit), some LBA of the file may
> be changed by F2FS GC in some extreme cases.
> 
> For this test case, how about pin the swap file before fallocate for F2FS as
> following:
> 
> ioctl(fd, F2FS_IOC_SET_PIN_FILE, true);

No special ioctl should be needed.  f2fs_swap_activate() should pin the
file, just like it converts inline inodes and disables compression.


Re: [LTP] [f2fs] 02eb84b96b: ltp.swapon03.fail

2021-03-08 Thread Weichao Guo

Hi Richard,

On 2021/3/8 19:53, Richard Palethorpe wrote:

Hello,


kern  :err   : [  187.461914] F2FS-fs (sda1): Swapfile does not align to section
commit 02eb84b96bc1b382dd138bf60724edbefe77b025
Author: huangjia...@oppo.com 
Date:   Mon Mar 1 12:58:44 2021 +0800
 f2fs: check if swapfile is section-alligned
 If the swapfile isn't created by pin and fallocate, it can't be
 guaranteed section-aligned, so it may be selected by f2fs gc. When
 gc_pin_file_threshold is reached, the address of swapfile may change,
 but won't be synchronized to swap_extent, so swap will write to wrong
 address, which will cause data corruption.
 Signed-off-by: Huang Jianan 
 Signed-off-by: Guo Weichao 
 Reviewed-by: Chao Yu 
 Signed-off-by: Jaegeuk Kim 

The test uses fallocate to preallocate the swap file and writes zeros to
it. I'm not sure what pin refers to?


'pin' refers to pinned file feature in F2FS, the LBA(Logical Block 
Address) of a file is fixed after pinned. Without this operation before 
fallocate, the LBA may not align with section(F2FS GC unit), some LBA of 
the file may be changed by F2FS GC in some extreme cases.


For this test case, how about pin the swap file before fallocate for 
F2FS as following:


ioctl(fd, F2FS_IOC_SET_PIN_FILE, true);


BR,

Weichao



Re: [LTP] [f2fs] 02eb84b96b: ltp.swapon03.fail

2021-03-08 Thread Richard Palethorpe
Hello,

> kern  :err   : [  187.461914] F2FS-fs (sda1): Swapfile does not align to 
> section

> commit 02eb84b96bc1b382dd138bf60724edbefe77b025
> Author: huangjia...@oppo.com 
> Date:   Mon Mar 1 12:58:44 2021 +0800

> f2fs: check if swapfile is section-alligned

> If the swapfile isn't created by pin and fallocate, it can't be
> guaranteed section-aligned, so it may be selected by f2fs gc. When
> gc_pin_file_threshold is reached, the address of swapfile may change,
> but won't be synchronized to swap_extent, so swap will write to wrong
> address, which will cause data corruption.

> Signed-off-by: Huang Jianan 
> Signed-off-by: Guo Weichao 
> Reviewed-by: Chao Yu 
> Signed-off-by: Jaegeuk Kim 

The test uses fallocate to preallocate the swap file and writes zeros to
it. I'm not sure what pin refers to?

-- 
Thank you,
Richard.