Bug 217605 - unttached inode after power cut with orphan file feature enabled
Summary: unttached inode after power cut with orphan file feature enabled
Status: NEW
Alias: None
Product: File System
Classification: Unclassified
Component: ext4 (show other bugs)
Hardware: All Linux
: P3 normal
Assignee: fs_ext4@kernel-bugs.osdl.org
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-06-28 13:19 UTC by Zhihao Cheng
Modified: 2023-06-28 13:20 UTC (History)
0 users

See Also:
Kernel Version:
Subsystem:
Regression: No
Bisected commit-id:


Attachments
diff (2.15 KB, patch)
2023-06-28 13:20 UTC, Zhihao Cheng
Details | Diff
test.sh (189 bytes, application/x-shellscript)
2023-06-28 13:20 UTC, Zhihao Cheng
Details

Description Zhihao Cheng 2023-06-28 13:19:02 UTC
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
Comment 1 Zhihao Cheng 2023-06-28 13:19:44 UTC
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
Comment 2 Zhihao Cheng 2023-06-28 13:20:00 UTC
Created attachment 304497 [details]
diff
Comment 3 Zhihao Cheng 2023-06-28 13:20:11 UTC
Created attachment 304498 [details]
test.sh
Comment 4 Zhihao Cheng 2023-06-28 13:20:31 UTC
(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

Note You need to log in before you can comment on or make changes to this bug.