Re: [LTP] [f2fs] 02eb84b96b: ltp.swapon03.fail
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
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
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
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
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
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.