• Tao Ma's avatar
    ext4: use s_csum_seed instead of i_csum_seed for xattr block · 41eb70dd
    Tao Ma authored
    In xattr block operation, we use h_refcount to indicate whether the
    xattr block is shared among many inodes. And xattr block csum uses
    s_csum_seed if it is shared and i_csum_seed if it belongs to
    one inode. But this has a problem. So consider the block is shared
    first bewteen inode A and B, and B has some xattr update and CoW
    the xattr block. When it updates the *old* xattr block(because
    of the h_refcount change) and calls ext4_xattr_release_block, we
    has no idea that inode A is the real owner of the *old* xattr
    block and we can't use the i_csum_seed of inode A either in xattr
    block csum calculation. And I don't think we have an easy way to
    find inode A.
    
    So this patch just removes the tricky i_csum_seed and we now uses
    s_csum_seed every time for the xattr block csum. The corresponding
    patch for the e2fsprogs will be sent in another patch.
    
    This is spotted by xfstests 117.
    Signed-off-by: default avatarTao Ma <boyu.mt@taobao.com>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    Acked-by: default avatarDarrick J. Wong <djwong@us.ibm.com>
    41eb70dd
xattr.c 43.7 KB