XFS has a per-inode xattr extent counter which is 16 bits wide. A workload which 1. Creates 1,000,000 255-byte sized xattrs, 2. Deletes 50% of these xattrs in an alternating manner, 3. Tries to create 400,000 new 255-byte sized xattrs causes the following message to be printed on the console, XFS (loop0): xfs_iflush_int: detected corrupt incore inode 131, total extents = -19916, nblocks = 102937, ptr ffff9ce33b098c00 XFS (loop0): xfs_do_force_shutdown(0x8) called from line 3739 of file fs/xfs/xfs_inode.c. Return address = ffffffffa4a94173 This indicates that we overflowed the 16-bits wide xattr extent counter. I have been informed that there are instances where a single file has > 100 million hardlinks. With parent pointers being stored in xattr, we will overflow the 16-bits wide xattr extent counter when large number of hardlinks are created. This patchset also includes the previously posted "Fix log reservation calculation for xattr insert operation" patch as a bug fix. It now replaces the xattr set "mount" and "runtime" reservations with just one static reservation. Hence we don't need the funcationality to calculate maximum sized 'xattr set' reservation separately anymore. The patches can also be obtained from https://github.com/chandanr/linux.git at branch 32bit-anextents-v0. Chandan Rajendra (2): xfs: Fix log reservation calculation for xattr insert operation xfs: Extend xattr extent counter to 32-bits fs/xfs/libxfs/xfs_attr.c | 6 +--- fs/xfs/libxfs/xfs_format.h | 28 ++++++++++++----- fs/xfs/libxfs/xfs_inode_buf.c | 27 ++++++++++++----- fs/xfs/libxfs/xfs_inode_fork.c | 3 +- fs/xfs/libxfs/xfs_log_format.h | 5 +-- fs/xfs/libxfs/xfs_log_rlimit.c | 29 ------------------ fs/xfs/libxfs/xfs_trans_resv.c | 54 +++++++++++++++------------------ fs/xfs/libxfs/xfs_trans_resv.h | 5 +-- fs/xfs/libxfs/xfs_trans_space.h | 8 ++++- fs/xfs/libxfs/xfs_types.h | 4 +-- fs/xfs/scrub/inode.c | 7 +++-- fs/xfs/xfs_inode_item.c | 3 +- fs/xfs/xfs_log_recover.c | 13 ++++++-- 13 files changed, 96 insertions(+), 96 deletions(-) -- 2.19.1