On 2019/1/14 22:05, Sheng Yong wrote: > When setting /sys/fs/f2fs/<DEV>/iostat_enable with non-boolean value, > UBSAN reports the following warning. > > [ 7562.295484] > ================================================================================ > [ 7562.296531] UBSAN: Undefined behaviour in fs/f2fs/f2fs.h:2776:10 > [ 7562.297651] load of value 64 is not a valid value for type '_Bool' > [ 7562.298642] CPU: 1 PID: 7487 Comm: dd Not tainted 4.20.0-rc4+ #79 > [ 7562.298653] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS > VirtualBox 12/01/2006 > [ 7562.298662] Call Trace: > [ 7562.298760] dump_stack+0x46/0x5b > [ 7562.298811] ubsan_epilogue+0x9/0x40 > [ 7562.298830] __ubsan_handle_load_invalid_value+0x72/0x90 > [ 7562.298863] f2fs_file_write_iter+0x29f/0x3f0 > [ 7562.298905] __vfs_write+0x115/0x160 > [ 7562.298922] vfs_write+0xa7/0x190 > [ 7562.298934] ksys_write+0x50/0xc0 > [ 7562.298973] do_syscall_64+0x4a/0xe0 > [ 7562.298992] entry_SYSCALL_64_after_hwframe+0x44/0xa9 > [ 7562.299001] RIP: 0033:0x7fa45ec19c00 > [ 7562.299004] Code: 73 01 c3 48 8b 0d 88 92 2c 00 f7 d8 64 89 01 48 83 c8 ff > c3 66 0f 1f 44 00 00 83 3d dd eb 2c 00 00 75 10 b8 01 00 00 00 0f 05 <48> 3d > 01 f0 ff ff 73 31 c3 48 83 ec 08 e8 ce 8f 01 00 48 89 04 24 > [ 7562.299044] RSP: 002b:00007ffca52b49e8 EFLAGS: 00000246 ORIG_RAX: > 0000000000000001 > [ 7562.299052] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: > 00007fa45ec19c00 > [ 7562.299059] RDX: 0000000000000400 RSI: 000000000093f000 RDI: > 0000000000000001 > [ 7562.299065] RBP: 000000000093f000 R08: 0000000000000004 R09: > 0000000000000000 > [ 7562.299071] R10: 00007ffca52b47b0 R11: 0000000000000246 R12: > 0000000000000400 > [ 7562.299077] R13: 000000000093f000 R14: 000000000093f400 R15: > 0000000000000000 > [ 7562.299091] > ================================================================================ > > So, if iostat_enable is enabled, set its value as `true'. > > Signed-off-by: Sheng Yong <shengyo...@huawei.com> > --- > fs/f2fs/sysfs.c | 13 ++++++++++--- > 1 file changed, 10 insertions(+), 3 deletions(-) > > diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c > index 0575edbe3ed6..b192627742a9 100644 > --- a/fs/f2fs/sysfs.c > +++ b/fs/f2fs/sysfs.c > @@ -278,10 +278,17 @@ static ssize_t __sbi_store(struct f2fs_attr *a, > return count; > } > > - *ui = t; > > - if (!strcmp(a->attr.name, "iostat_enable") && *ui == 0) > - f2fs_reset_iostat(sbi); > + if (!strcmp(a->attr.name, "iostat_enable")) {
bool enable = !!*ui; if (!enable) f2fs_reset_iostat(sbi); sbi->iostat_enable = enable; return count; > + if (t == 0) > + f2fs_reset_iostat(sbi); > + else > + sbi->iostat_enable = true; > + return count; > + } > + > + *ui = (unsigned int)t; > + > return count; > } > > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel