Subject: [f2fs-dev] [PATCH 1/2] f2fs: fix to skip GC if type in SSA and SIT is 
inconsistent
Date: Thu, 28 Jun 2018 18:25:58 +0800
From: Chao Yu <[email protected]>
To: [email protected]
CC: [email protected], [email protected]

If segment type in SSA and SIT is inconsistent, we will encounter below BUG_ON 
during GC, to avoid this panic, let's just skip doing GC on such segment.

The bug is triggered with image reported in below link:

https://bugzilla.kernel.org/show_bug.cgi?id=200223

[  388.060262] ------------[ cut here ]------------ [  388.060268] kernel BUG 
at /home/y00370721/git/devf2fs/gc.c:989!
[  388.061172] invalid opcode: 0000 [#1] SMP [  388.061773] Modules linked in: 
f2fs(O) bluetooth ecdh_generic xt_tcpudp iptable_filter ip_tables x_tables lp 
ttm drm_kms_helper drm intel_rapl sb_edac crct10dif_pclmul crc32_pclmul 
ghash_clmulni_intel pcbc aesni_intel fb_sys_fops ppdev aes_x86_64 syscopyarea 
crypto_simd sysfillrect parport_pc joydev sysimgblt glue_helper parport cryptd 
i2c_piix4 serio_raw mac_hid btrfs hid_generic usbhid hid raid6_pq psmouse 
pata_acpi floppy
[  388.064247] CPU: 7 PID: 4151 Comm: f2fs_gc-7:0 Tainted: G           O    
4.13.0-rc1+ #26
[  388.065306] Hardware name: Xen HVM domU, BIOS 4.1.2_115-900.260_ 11/06/2015 
[  388.066058] task: ffff880201583b80 task.stack: ffffc90004d7c000 [  
388.069948] RIP: 0010:do_garbage_collect+0xcc8/0xcd0 [f2fs] [  388.070766] RSP: 
0018:ffffc90004d7fc68 EFLAGS: 00010202 [  388.071783] RAX: ffff8801ed227000 
RBX: 0000000000000001 RCX: ffffea0007b489c0 [  388.072700] RDX: 
ffff880000000000 RSI: 0000000000000001 RDI: ffffea0007b489c0 [  388.073607] 
RBP: ffffc90004d7fd58 R08: 0000000000000003 R09: ffffea0007b489dc [  
388.074619] R10: 0000000000000000 R11: 0052782ab317138d R12: 0000000000000018 [ 
 388.075625] R13: 0000000000000018 R14: ffff880211ceb000 R15: ffff880211ceb000 
[  388.076687] FS:  0000000000000000(0000) GS:ffff880214fc0000(0000) 
knlGS:0000000000000000 [  388.083277] CS:  0010 DS: 0000 ES: 0000 CR0: 
0000000080050033 [  388.084536] CR2: 0000000000e18c60 CR3: 00000001ecf2e000 
CR4: 00000000001406e0 [  388.085748] Call Trace:
[  388.086690]  ? find_next_bit+0xb/0x10 [  388.088091]  f2fs_gc+0x1a8/0x9d0 
[f2fs] [  388.088888]  ? lock_timer_base+0x7d/0xa0 [  388.090213]  ? 
try_to_del_timer_sync+0x44/0x60 [  388.091698]  gc_thread_func+0x342/0x4b0 
[f2fs] [  388.092892]  ? wait_woken+0x80/0x80 [  388.094098]  
kthread+0x109/0x140 [  388.095010]  ? f2fs_gc+0x9d0/0x9d0 [f2fs] [  388.096043] 
 ? kthread_park+0x60/0x60 [  388.097281]  ret_from_fork+0x25/0x30 [  
388.098401] Code: ff ff 48 83 e8 01 48 89 44 24 58 e9 27 f8 ff ff 48 83 e8 01 
e9 78 fc ff ff 48 8d 78 ff e9 17 fb ff ff 48 83 ef 01 e9 4d f4 ff ff <0f> 0b 66 
0f 1f 44 00 00 0f 1f 44 00 00 55 48 89 e5 41 56 41 55 [  388.100864] RIP: 
do_garbage_collect+0xcc8/0xcd0 [f2fs] RSP: ffffc90004d7fc68 [  388.101810] ---[ 
end trace 81c73d6e6b7da61d ]---

Signed-off-by: Chao Yu <[email protected]>
---
 fs/f2fs/gc.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index da2a71eb7ee2..f3a0e2f62ce6 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -986,7 +986,12 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
                        goto next;
                sum = page_address(sum_page);
-               f2fs_bug_on(sbi, type != GET_SUM_TYPE((&sum->footer)));
+               if (type != GET_SUM_TYPE((&sum->footer))) {
+                       f2fs_msg(sbi->sb, KERN_ERR, "Inconsistent segment (%u) "
+                               "type [%d, %d] in SSA and SIT",
+                               segno, type, GET_SUM_TYPE((&sum->footer)));

SBI_NEED_FSCK may be writed for checking disk.


+                       goto next;
+               }
                /*
                 * this is to avoid deadlock:
--
2.18.0.rc1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

.


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to