Bug 217888

Summary: jbd2: potential data lost in recovering journal raced with synchronizing fs bdev
Product: File System Reporter: Zhihao Cheng (chengzhihao1)
Component: ext4Assignee: fs_ext4 (fs_ext4)
Status: NEW ---    
Severity: normal    
Priority: P3    
Hardware: All   
OS: Linux   
Kernel Version: Subsystem:
Regression: No Bisected commit-id:
Attachments: diff
diff_v2
disk

Description Zhihao Cheng 2023-09-08 08:12:58 UTC
1. Apply diff and compile kernel
2. dd if=disk_1 of=/dev/sda bs=1M
   dd if=disk_1 of=/dev/sda bs=1M seek=43
3. mount /dev/sda temp # will stuck
4. sync /dev/sda # Type this command in another terminal, finish it in 5s when you see "wait sync" from dmesg.
4. umount temp
5. fsck.ext4 -fn /dev/sda


Unattached inode 13
Connect to /lost+found? no

Pass 5: Checking group summary information

/dev/sda: ********** WARNING: Filesystem still has errors **********



===============
'touch file' is recorded in journal of sda, and the journal is not replayed yet.

journal in sda:

Journal starts at block 1, transaction 2
Found expected sequence 2, type 1 (descriptor block) at block 1
Dumping descriptor block, sequence 2, at block 1:
  FS block 266 logged at journal block 2 (flags 0x0)
  FS block 2 logged at journal block 3 (flags 0x2)
  FS block 276 logged at journal block 4 (flags 0x2)   # new inode
  FS block 273 logged at journal block 5 (flags 0x2)
  FS block 3479 logged at journal block 6 (flags 0x2)  # new dentry
  FS block 1 logged at journal block 7 (flags 0xa)
Found expected sequence 2, type 2 (commit block) at block 8
Comment 1 Zhihao Cheng 2023-09-08 08:13:28 UTC
Created attachment 305067 [details]
diff
Comment 2 Zhihao Cheng 2023-09-08 09:28:24 UTC
1. Apply diff_v2 and compile kernel
2. dd if=disk of=/dev/sda bs=1M
3. mount /dev/sda temp # will stuck
4. sync /dev/sda # Type this command in another terminal, finish it in 5s when you see "wait sync" from dmesg.
4. umount temp
5. fsck.ext4 -fa /dev/sda
/dev/sda: Unattached inode 13


/dev/sda: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
	(i.e., without -a or -p options)


===============
'touch file' is recorded in journal of sda, and the journal is not replayed yet.

journal in sda:

Journal starts at block 1, transaction 2
Found expected sequence 2, type 1 (descriptor block) at block 1
Dumping descriptor block, sequence 2, at block 1:
  FS block 84 logged at journal block 2 (flags 0x0)
  FS block 2 logged at journal block 3 (flags 0x2)
  FS block 89 logged at journal block 4 (flags 0x2)  # new inode
  FS block 86 logged at journal block 5 (flags 0x2)
  FS block 726 logged at journal block 6 (flags 0x2) # new dentry
  FS block 1 logged at journal block 7 (flags 0x2)
  FS block 83 logged at journal block 8 (flags 0xa)
Comment 3 Zhihao Cheng 2023-09-08 09:29:20 UTC
Created attachment 305068 [details]
diff_v2
Comment 4 Zhihao Cheng 2023-09-08 09:30:29 UTC
Created attachment 305069 [details]
disk