Revision 37f13561de6039b3a916d1510086030d097dea0f authored by Eric Sandeen on 10 January 2013, 16:41:48 UTC, committed by Ben Myers on 16 January 2013, 22:08:55 UTC
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>
1 parent ab7eac2
Raw File
Kconfig.debug
menu "Kernel hacking"

source "lib/Kconfig.debug"

config FULLDEBUG
	bool "Full Symbolic/Source Debugging support"
	help
	  Enable debugging symbols on kernel build.

config HIGHPROFILE
	bool "Use fast second timer for profiling"
	help
	  Use a fast secondary clock to produce profiling information.

config NO_KERNEL_MSG
	bool "Suppress Kernel BUG Messages"
	help
	  Do not output any debug BUG messages within the kernel.

config GDB_MAGICPRINT
	bool "Message Output for GDB MagicPrint service"
	depends on (H8300H_SIM || H8S_SIM)
	help
	  kernel messages output using MagicPrint service from GDB

config SYSCALL_PRINT
	bool "SystemCall trace print"
	help
	  output history of systemcall

config GDB_DEBUG
   	bool "Use gdb stub"
	depends on (!H8300H_SIM && !H8S_SIM)
	help
	  gdb stub exception support

config SH_STANDARD_BIOS
	bool "Use gdb protocol serial console"
	depends on (!H8300H_SIM && !H8S_SIM)
	help
	  serial console output using GDB protocol.
	  Require eCos/RedBoot

config DEFAULT_CMDLINE
	bool "Use builtin commandline"
	default n
	help
	  builtin kernel commandline enabled.

config KERNEL_COMMAND
	string "Buildin command string"
	depends on DEFAULT_CMDLINE
	help
	  builtin kernel commandline strings.

config BLKDEV_RESERVE
	bool "BLKDEV Reserved Memory"
	default n
	help
	  Reserved BLKDEV area.

config BLKDEV_RESERVE_ADDRESS
	hex 'start address'
	depends on BLKDEV_RESERVE
	help
	  BLKDEV start address.

endmenu
back to top