Eric Sandeen
37f13561de
xfs: recalculate leaf entry pointer after compacting a dir2 block
...
Dave Jones hit this assert when doing a compile on recent git, with
CONFIG_XFS_DEBUG enabled:
XFS: Assertion failed: (char *)dup - (char *)hdr == be16_to_cpu(*xfs_dir2_data_unused_tag_p(dup)), file: fs/xfs/xfs_dir2_data.c, line: 828
Upon further digging, the tag found by xfs_dir2_data_unused_tag_p(dup)
contained "2" and not the proper offset, and I found that this value was
changed after the memmoves under "Use a stale leaf for our new entry."
in xfs_dir2_block_addname(), i.e.
memmove(&blp[mid + 1], &blp[mid],
(highstale - mid) * sizeof(*blp));
overwrote it.
What has happened is that the previous call to xfs_dir2_block_compact()
has rearranged things; it changes btp->count as well as the
blp array. So after we make that call, we must recalculate the
proper pointer to the leaf entries by making another call to
xfs_dir2_block_leaf_p().
Dave provided a metadump image which led to a simple reproducer
(create a particular filename in the affected directory) and this
resolves the testcase as well as the bug on his live system.
Thanks also to dchinner for looking at this one with me.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Tested-by: Dave Jones <davej@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Mark Tinguely <tinguely@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
2013-01-16 16:08:55 -06:00
..
Kconfig
xfs: add CRC infrastructure
2012-11-19 20:11:24 -06:00
kmem.c
xfs: switch to proper __bitwise type for KM_... flags
2012-05-29 23:28:32 -04:00
kmem.h
xfs: switch to proper __bitwise type for KM_... flags
2012-05-29 23:28:32 -04:00
Makefile
xfs: remove xfs_flushinval_pages
2012-11-14 15:15:08 -06:00
mrlock.h
time.h
uuid.c
uuid.h
xfs: add CRC infrastructure
2012-11-19 20:11:24 -06:00
xfs.h
xfs_acl.c
userns: Pass a userns parameter into posix_acl_to_xattr and posix_acl_from_xattr
2012-09-18 01:01:35 -07:00
xfs_acl.h
xfs_ag.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_alloc.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_alloc.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_alloc_btree.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_alloc_btree.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_aops.c
xfs: fix direct IO nested transaction deadlock.
2012-11-29 14:22:56 -06:00
xfs_aops.h
Prefix IO_XX flags with XFS_IO_XX to avoid namespace colision.
2012-07-22 11:00:55 -05:00
xfs_attr.c
xfs: add xfs_da_node verification
2012-11-15 21:34:55 -06:00
xfs_attr.h
xfs_attr_leaf.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_attr_leaf.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_attr_sf.h
xfs_bit.c
xfs_bit.h
xfs_bmap.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_bmap.h
xfs: move allocation stack switch up to xfs_bmapi_allocate
2012-10-18 17:42:48 -05:00
xfs_bmap_btree.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_bmap_btree.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_btree.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_btree.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_buf.c
xfs: use b_maps[] for discontiguous buffers
2013-01-16 16:07:11 -06:00
xfs_buf.h
xfs: use b_maps[] for discontiguous buffers
2013-01-16 16:07:11 -06:00
xfs_buf_item.c
xfs: fix the multi-segment log buffer format
2013-01-16 16:08:08 -06:00
xfs_buf_item.h
xfs: rename bli_format to avoid confusion with bli_formats
2013-01-16 16:07:37 -06:00
xfs_cksum.h
xfs: add CRC infrastructure
2012-11-19 20:11:24 -06:00
xfs_da_btree.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_da_btree.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_dfrag.c
xfs: remove xfs_flushinval_pages
2012-11-14 15:15:08 -06:00
xfs_dfrag.h
xfs_dinode.h
xfs: fix typo in comment of xfs_dinode_t.
2012-06-14 12:28:26 -05:00
xfs_dir2.c
xfs: remove struct xfs_dabuf and infrastructure
2012-07-01 14:50:07 -05:00
xfs_dir2.h
xfs_dir2_block.c
xfs: recalculate leaf entry pointer after compacting a dir2 block
2013-01-16 16:08:55 -06:00
xfs_dir2_data.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_dir2_format.h
xfs_dir2_leaf.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_dir2_node.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_dir2_priv.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_dir2_sf.c
xfs: remove struct xfs_dabuf and infrastructure
2012-07-01 14:50:07 -05:00
xfs_discard.c
xfs: check for possible overflow in xfs_ioc_trim
2012-08-23 14:48:44 -05:00
xfs_discard.h
xfs_dquot.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_dquot.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_dquot_item.c
xfs_dquot_item.h
xfs_error.c
xfs_error.h
xfs_export.c
xfs: remove xfs_iget.c
2012-10-17 13:42:25 -05:00
xfs_export.h
xfs_extent_busy.c
xfs_extent_busy.h
xfs_extfree_item.c
xfs_extfree_item.h
xfs_file.c
xfs: byte range granularity for XFS_IOC_ZERO_RANGE
2012-11-29 14:21:46 -06:00
xfs_filestream.c
xfs_filestream.h
xfs_fs.h
xfs: add minimum file size filtering to eofblocks scan
2012-11-08 15:32:29 -06:00
xfs_fsops.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_fsops.h
xfs_globals.c
xfs: add background scanning to clear eofblocks inodes
2012-11-08 15:34:59 -06:00
xfs_ialloc.c
xfs: inode allocation should use unmapped buffers.
2012-11-26 16:01:31 -06:00
xfs_ialloc.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_ialloc_btree.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_ialloc_btree.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_icache.c
xfs: add background scanning to clear eofblocks inodes
2012-11-08 15:34:59 -06:00
xfs_icache.h
xfs: add background scanning to clear eofblocks inodes
2012-11-08 15:34:59 -06:00
xfs_inode.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_inode.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_inode_item.c
xfs: check for stale inode before acquiring iflock on push
2012-06-21 14:20:06 -05:00
xfs_inode_item.h
xfs_inum.h
xfs_ioctl.c
xfs: add inode id filtering to eofblocks scan
2012-11-08 15:29:14 -06:00
xfs_ioctl.h
xfs_ioctl32.c
xfs: Convert to new freezing code
2012-07-31 09:45:48 +04:00
xfs_ioctl32.h
xfs_iomap.c
xfs: add EOFBLOCKS inode tagging/untagging
2012-11-08 14:20:44 -06:00
xfs_iomap.h
xfs_iops.c
xfs: remove xfs_flush_pages
2012-11-14 15:12:45 -06:00
xfs_iops.h
xfs_itable.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_itable.h
xfs_linux.h
xfs: add CRC infrastructure
2012-11-19 20:11:24 -06:00
xfs_log.c
xfs: fix sparse reported log CRC endian issue
2012-12-03 12:10:59 -06:00
xfs_log.h
xfs: xfs_quiesce_attr() should quiesce the log like unmount
2012-10-17 13:39:14 -05:00
xfs_log_cil.c
xfs: rename log structure to xlog
2012-06-21 14:21:11 -05:00
xfs_log_priv.h
xfs: fix sparse reported log CRC endian issue
2012-12-03 12:10:59 -06:00
xfs_log_recover.c
xfs: fix sparse reported log CRC endian issue
2012-12-03 12:10:59 -06:00
xfs_log_recover.h
xfs_message.c
xfs_message.h
xfs_mount.c
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_mount.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_mru_cache.c
xfs_mru_cache.h
xfs_qm.c
xfs: fix stray dquot unlock when reclaiming dquots
2012-11-29 14:24:03 -06:00
xfs_qm.h
xfs_qm_bhv.c
xfs_qm_syscalls.c
xfs: remove int casts from debug dquot soft limit timer asserts
2013-01-16 16:08:40 -06:00
xfs_quota.h
xfs_quota_priv.h
xfs_quotaops.c
userns: Convert qutoactl
2012-09-18 01:01:39 -07:00
xfs_rename.c
xfs_rtalloc.c
xfs: uncached buffer reads need to return an error
2012-11-15 21:34:05 -06:00
xfs_rtalloc.h
xfs_sb.h
xfs: add CRC infrastructure
2012-11-19 20:11:24 -06:00
xfs_stats.c
xfs_stats.h
xfs_super.c
xfs: add background scanning to clear eofblocks inodes
2012-11-08 15:34:59 -06:00
xfs_super.h
xfs: xfs_sync_data is redundant.
2012-10-17 12:01:25 -05:00
xfs_sysctl.c
xfs: add background scanning to clear eofblocks inodes
2012-11-08 15:34:59 -06:00
xfs_sysctl.h
xfs: add background scanning to clear eofblocks inodes
2012-11-08 15:34:59 -06:00
xfs_trace.c
xfs_trace.h
xfs: add more attribute tree trace points.
2012-11-13 14:47:00 -06:00
xfs_trans.c
xfs: Convert to new freezing code
2012-07-31 09:45:48 +04:00
xfs_trans.h
xfs: convert buffer verifiers to an ops structure.
2012-11-15 21:35:12 -06:00
xfs_trans_ail.c
xfs: re-enable xfsaild idle mode and fix associated races
2012-07-29 16:27:57 -05:00
xfs_trans_buf.c
xfs: fix the multi-segment log buffer format
2013-01-16 16:08:08 -06:00
xfs_trans_dquot.c
userns: Convert quota netlink aka quota_send_warning
2012-09-18 01:01:40 -07:00
xfs_trans_extfree.c
xfs_trans_inode.c
xfs_trans_priv.h
xfs: re-enable xfsaild idle mode and fix associated races
2012-07-29 16:27:57 -05:00
xfs_trans_space.h
xfs_types.h
xfs: struct xfs_buf_log_format isn't variable sized.
2012-07-01 14:50:04 -05:00
xfs_utils.c
xfs: remove the alloc_done argument to xfs_dialloc
2012-07-29 16:00:31 -05:00
xfs_utils.h
xfs_vnode.h
xfs_vnodeops.c
xfs: byte range granularity for XFS_IOC_ZERO_RANGE
2012-11-29 14:21:46 -06:00
xfs_vnodeops.h
xfs: byte range granularity for XFS_IOC_ZERO_RANGE
2012-11-29 14:21:46 -06:00
xfs_xattr.c