Running generic/475(filesystem consistent tests after power cut) could easily trigger unattached inode error while doing fsck: Unattached zero-length inode 39405. Clear? no Unattached inode 39405 Connect to /lost+found? no Above inconsistence is caused by following process: P1 P2 ext4_create inode = ext4_new_inode_start_handle // itable records nlink=1 ext4_add_nondir err = ext4_add_entry // ENOSPC ext4_append ext4_bread ext4_getblk ext4_map_blocks // returns ENOSPC drop_nlink(inode) // won't be updated into disk inode ext4_orphan_add(handle, inode) ext4_orphan_file_add ext4_journal_stop(handle) jbd2_journal_commit_transaction // commit success >> power cut << ext4_fill_super ext4_load_and_init_journal // itable records nlink=1 ext4_orphan_cleanup ext4_process_orphan if (inode->i_nlink) // true, inode won't be deleted
reproducer: 1. ./test.sh [ 73.704796] inject err for ino 13 creation [ 73.705523] wait commit journal [ 75.741472] commit trans [ 76.550550] reboot: Restarting system 2. mount /dev/sda temp umount temp [ 82.683096] orphan replay: reserve 13 3. fsck.ext4 -fn /dev/sda e2fsck 1.47.0 (5-Feb-2023) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Unattached zero-length inode 13. Clear? no Unattached inode 13 Connect to /lost+found? no Pass 5: Checking group summary information /dev/sda: ********** WARNING: Filesystem still has errors ********** /dev/sda: 13/25584 files (0.0% non-contiguous), 12113/102400 block
Created attachment 304497 [details] diff
Created attachment 304498 [details] test.sh
(In reply to Zhihao Cheng from comment #1) Apply diff first of all > reproducer: > 1. ./test.sh > [ 73.704796] inject err for ino 13 creation > [ 73.705523] wait commit journal > [ 75.741472] commit trans > [ 76.550550] reboot: Restarting system > > 2. mount /dev/sda temp > umount temp > [ 82.683096] orphan replay: reserve 13 > > 3. fsck.ext4 -fn /dev/sda > e2fsck 1.47.0 (5-Feb-2023) > Pass 1: Checking inodes, blocks, and sizes > Pass 2: Checking directory structure > Pass 3: Checking directory connectivity > Pass 4: Checking reference counts > Unattached zero-length inode 13. Clear? no > > Unattached inode 13 > Connect to /lost+found? no > > Pass 5: Checking group summary information > > /dev/sda: ********** WARNING: Filesystem still has errors ********** > > /dev/sda: 13/25584 files (0.0% non-contiguous), 12113/102400 block