[Bug 200739] New: I/O error on read-ahead inode blocks does not get detected or reported

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

            Bug ID: 200739
           Summary: I/O error on read-ahead inode blocks does not get
                    detected or reported
           Product: File System
           Version: 2.5
    Kernel Version: 4.17.0-rc3+
          Hardware: All
                OS: Linux
              Tree: Mainline
            Status: NEW
          Severity: normal
          Priority: P1
         Component: ext4
          Assignee: fs_ext4@xxxxxxxxxxxxxxxxxxxx
          Reporter: shehbazjaffer007@xxxxxxxxx
        Regression: No

Created attachment 277693
  --> https://bugzilla.kernel.org/attachment.cgi?id=277693&action=edit
device mapper code

Hello!

Background
==========

I am checking how ext4 behaves in response to block level I/O injection errors.
I observe that ext4 file system reads multiple other inodes during an inode
block access. these inodes are read-ahead inodes and their count can be
modulated using the inode_readahead_blks parameter. For my experiments, I set
this parameter to 2, so 2 additional inodes were read for each primary inode
block access.

Issue
=====
When I inject I/O error on the first inode being accessed, I am able to see an
I/O error message in both the user space - for example:

stat: cannot stat
'/mnt/DZAORDJFHRPGQGRPG7VBLAWNXR61S/BFIE2JB9Q353PQBK/OT8YSP69Q9NI93P8J6UK1WK0DFWSNQ599FHC5DIA0BWW7YIDC6W/U/FULLFILE':
Input/output error

and the kernel space, for example:

EXT4-fs error (device dm-1): __ext4_get_inode_loc:4626: inode #568: block 156:
comm stat: unable to read itable block

However, if the I/O error takes place on all the subsequent read-ahead inodes,
I observe no such error.

Steps to Reproduce
==================

1. create a secondary ext2 file system with about 1.5GB space, preferably on
QEMU.
2. compile and run dm-io.c using Makefile attached. this is a device mapper
target that prints and optionally injects I/O error for a particular block.
3. run printAllBlocks.sh that would generate 2000 nested files and directories.
It then mounts ext4 as a dm-io target that runs a "stat" command on one of the
files. This also prints all blocks that were accessed in dmsg. We look for 3-4
consecutive blocks being read.

For example, on my setup, I get the following blocks:

140 READ
142 READ
141 READ
....
144 READ
146 READ
145 READ
....
157 READ
158 READ
156 READ

here, blocks 141,144,156 are primary inodes, and all other adjacent succeeding
blocks are read-ahead inodes.

4. run injectError.sh [errBlkNo] script that would rerun the stat command, but
this time it would inject I/O error when the erroBlkNo block number is returned
back to the file system. I set errBlkNo to any of the inode blocks read. For
each primary inode, I get an error. for all read ahead blocks, I do not get any
error, either in user space or kernel space, which should be reported. Hence, I
believe this is a bug.

Please find all related scripts attached for reference.

Thanks!

-- 
You are receiving this mail because:
You are watching the assignee of the bug.



[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux