Whamcloud - gitweb
LU-19121 ldiskfs: check fast symlink for ea_inode correctly 79/59879/2
authorAndreas Dilger <adilger@whamcloud.com>
Sat, 21 Jun 2025 14:55:51 +0000 (08:55 -0600)
committerOleg Drokin <green@whamcloud.com>
Tue, 8 Jul 2025 03:58:54 +0000 (03:58 +0000)
commitd0c75da783013e61c6c53bdd26337d72b3679961
treedb7e4e7036d1c3776cd3853a5195c754cb9b6298
parent98e2d3230ef02ea41f7999cfe395bb68e69976f1
LU-19121 ldiskfs: check fast symlink for ea_inode correctly

The check for a fast symlink in the presence of only an external
xattr inode is incorrect. If a fast symlink has no xattr block
(i_file_acl == 0), but has an external xattr inode that increases
inode i_blocks, then the check for a fast symlink will incorrectly
fail and __ext4_iget()->ext4_ind_check_inode() will report an error
when the inode is next loaded into memory:

    # ln -s foo /mnt/tmp/bar
    # setfattr -h -n trusted.test \
               -v "$(head -200 /etc/services)" /mnt/tmp/bar
    # umount /mnt/tmp
    # mount /mnt/tmp
    # ls -l /mnt/tmp
    ls: cannot access '/mnt/tmp/bar': Structure needs cleaning
    total 4
     ? l?????????? ? ?    ?        ?            ? bar
    # dmesg | tail -1
    EXT4-fs error (device dm-8): __ext4_iget:5098:
        inode #24578: block 7303014: comm ls: invalid block

The ext4_inode_is_fast_symlink() check should use the superblock
EA_INODE feature flag, not the inode EXT4_EA_INODE_FL flag, since
the latter is only set on the xattr inode itself, and not on the
inode that references it.

Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: Ia7c1c59fcc005a3be11435325a96b809592540e5
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/59879
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Li Dongyang <dongyangli@ddn.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
53 files changed:
ldiskfs/kernel_patches/patches/base/ext4-symlink-xattr-inode-fix.patch [new file with mode: 0644]
ldiskfs/kernel_patches/series/ldiskfs-4.12-sles15-22.series
ldiskfs/kernel_patches/series/ldiskfs-4.12-sles15.series
ldiskfs/kernel_patches/series/ldiskfs-4.12-sles15sp1-7.series
ldiskfs/kernel_patches/series/ldiskfs-4.12-sles15sp1.series
ldiskfs/kernel_patches/series/ldiskfs-4.15.0-20-ubuntu18.series
ldiskfs/kernel_patches/series/ldiskfs-4.15.0-24-ubuntu18.series
ldiskfs/kernel_patches/series/ldiskfs-4.18-rhel8.10-553.series
ldiskfs/kernel_patches/series/ldiskfs-4.18-rhel8.10.series
ldiskfs/kernel_patches/series/ldiskfs-4.18-rhel8.4.series
ldiskfs/kernel_patches/series/ldiskfs-4.18-rhel8.5.series
ldiskfs/kernel_patches/series/ldiskfs-4.18-rhel8.6.series
ldiskfs/kernel_patches/series/ldiskfs-4.18-rhel8.7.series
ldiskfs/kernel_patches/series/ldiskfs-4.18-rhel8.8.series
ldiskfs/kernel_patches/series/ldiskfs-4.18-rhel8.9.series
ldiskfs/kernel_patches/series/ldiskfs-5.0.0-13-ubuntu19.series
ldiskfs/kernel_patches/series/ldiskfs-5.10.0-ml.series
ldiskfs/kernel_patches/series/ldiskfs-5.10.0-oe2203.series
ldiskfs/kernel_patches/series/ldiskfs-5.10.0-oe2203sp1.series
ldiskfs/kernel_patches/series/ldiskfs-5.11.0-40-ubuntu20.series
ldiskfs/kernel_patches/series/ldiskfs-5.14-rhel9.1.series
ldiskfs/kernel_patches/series/ldiskfs-5.14-rhel9.2.series
ldiskfs/kernel_patches/series/ldiskfs-5.14-rhel9.3.series
ldiskfs/kernel_patches/series/ldiskfs-5.14-rhel9.4-427.13.series
ldiskfs/kernel_patches/series/ldiskfs-5.14-rhel9.4.series
ldiskfs/kernel_patches/series/ldiskfs-5.14-rhel9.5.series
ldiskfs/kernel_patches/series/ldiskfs-5.14-rhel9.6.series
ldiskfs/kernel_patches/series/ldiskfs-5.14-rhel9.series
ldiskfs/kernel_patches/series/ldiskfs-5.14.21-sles15sp4.series
ldiskfs/kernel_patches/series/ldiskfs-5.14.21-sles15sp5.series
ldiskfs/kernel_patches/series/ldiskfs-5.15.0-106-ubuntu20.series
ldiskfs/kernel_patches/series/ldiskfs-5.15.0-83-ubuntu20.series
ldiskfs/kernel_patches/series/ldiskfs-5.19.0-35-ubuntu.series
ldiskfs/kernel_patches/series/ldiskfs-5.3.18-sles15sp2.series
ldiskfs/kernel_patches/series/ldiskfs-5.3.18-sles15sp3-59.series
ldiskfs/kernel_patches/series/ldiskfs-5.3.18-sles15sp3.series
ldiskfs/kernel_patches/series/ldiskfs-5.4.0-42-ubuntu20.series
ldiskfs/kernel_patches/series/ldiskfs-5.4.0-66-ubuntu20.series
ldiskfs/kernel_patches/series/ldiskfs-5.4.0-80-ubuntu20.series
ldiskfs/kernel_patches/series/ldiskfs-5.4.0-90-ubuntu20.series
ldiskfs/kernel_patches/series/ldiskfs-5.4.0-ml.series
ldiskfs/kernel_patches/series/ldiskfs-5.4.136-ml.series
ldiskfs/kernel_patches/series/ldiskfs-5.4.21-ml.series
ldiskfs/kernel_patches/series/ldiskfs-5.8.0-53-ubuntu20.series
ldiskfs/kernel_patches/series/ldiskfs-5.8.0-63-ubuntu20.series
ldiskfs/kernel_patches/series/ldiskfs-6.1.38-ml.series
ldiskfs/kernel_patches/series/ldiskfs-6.10-ml.series
ldiskfs/kernel_patches/series/ldiskfs-6.11-ml.series
ldiskfs/kernel_patches/series/ldiskfs-6.12-ml.series
ldiskfs/kernel_patches/series/ldiskfs-6.6-ml.series
ldiskfs/kernel_patches/series/ldiskfs-6.7-ml.series
ldiskfs/kernel_patches/series/ldiskfs-6.8.0-45-ubuntu24.series
lustre/tests/sanity.sh