Hi Linus, Here are a number of new features and bug fixes for 5.1. They've undergone a week's worth of fstesting and merge cleanly with master as of this morning. Most of the changes center on improving metadata validation and fixing problems with online fsck, though there's also a new cache to speed up unlinked inode handling and cleanup of the copy on write code in preparation for future features. Let me know if you encounter any problems with this merge. --D The following changes since commit d13937116f1e82bf508a6325111b322c30c85eb9: Linux 5.0-rc6 (2019-02-10 14:42:20 -0800) are available in the Git repository at: git://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git tags/xfs-5.1-merge-4 for you to fetch changes up to 1b9598c8fb9965fff901c4caa21fed9644c34df3: xfs: fix reporting supported extra file attributes for statx() (2019-03-01 08:57:25 -0800) ---------------------------------------------------------------- Changes for Linux 5.1: - Fix online fsck to handle inode btrees correctly on 64k block filesystems. - Teach online fsck to check directory and attribute names for invalid characters. - Miscellanous fixes for online fsck. - Introduce a new panic mask so that we can halt immediately on metadata corruption (for debugging purposes) - Fix a block mapping race during writeback. - Cache unlinked inode list backrefs in memory to speed up list processing. - Separate the bnobt/cntbt and inobt/finobt buffer verifiers so that we can detect crosslinked btrees. - Refactor magic number verification so that we can standardize it. - Strengthen ondisk metadata structure offset build time verification. - Fix a memory corruption problem in the listxattr code. - Fix a shutdown problem during log recovery due to unreserved finobt expansion. - Fix a referential integrity problem where O_TMPFILE inodes were put on the unlinked list with nlink > 0 which would cause asserts during log recovery if the system went down immediately. - Refactor the delayed allocation allocator to be more clever about the possibility that its mapping might be stale. - Various fixes to the copy on write mechanism. - Make CoW preallocation suitable for use even with writes that wouldn't otherwise require it. - Refactor an internal API. - Fix some statx implementation bugs. - Fix miscellaneous compiler and static checker complaints. ---------------------------------------------------------------- Brian Foster (15): xfs: update fork seq counter on data fork changes xfs: validate writeback mapping using data fork seq counter xfs: remove superfluous writeback mapping eof trimming xfs: create delalloc bmapi wrapper for full extent allocation xfs: use the latest extent at writeback delalloc conversion time xfs: clarify documentation for the function to reverify buffers xfs: always check magic values in on-disk byte order xfs: create a separate finobt verifier xfs: distinguish between inobt and finobt magic values xfs: split up allocation btree verifier xfs: distinguish between bnobt and cntbt magic values xfs: use verifier magic field in dir2 leaf verifiers xfs: miscellaneous verifier magic value fixups xfs: factor xfs_da3_blkinfo verification into common helper xfs: compile time offset checks for common v4/v5 metadata Christoph Hellwig (18): xfs: remove the io_type field from the writeback context and ioend xfs: remove the s_maxbytes checks in xfs_map_blocks xfs: simplify the xfs_bmap_btree_to_extents calling conventions xfs: factor out two helpers from xfs_bmapi_write xfs: split XFS_BMAPI_DELALLOC handling from xfs_bmapi_write xfs: move transaction handling to xfs_bmapi_convert_delalloc xfs: move stat accounting to xfs_bmapi_convert_delalloc xfs: move xfs_iomap_write_allocate to xfs_aops.c xfs: remove the truncate short cut in xfs_map_blocks xfs: retry COW fork delalloc conversion when no extent was found xfs: make xfs_bmbt_to_iomap more useful xfs: fix SEEK_DATA for speculative COW fork preallocation xfs: don't use delalloc extents for COW on files with extsize hints xfs: also truncate holes covered by COW blocks xfs: merge COW handling into xfs_file_iomap_begin_delay xfs: make COW fork unwritten extent conversions more robust xfs: report IOMAP_F_SHARED from xfs_file_iomap_begin_delay xfs: introduce an always_cow mode Colin Ian King (1): xfs: fix uninitialized error variable Darrick J. Wong (33): xfs: never try to scrub more than 64 inodes per inobt record xfs: check the ir_startino alignment directly xfs: check inobt record alignment on big block filesystems xfs: hoist inode cluster checks out of loop xfs: clean up the inode cluster checking in the inobt scrub xfs: scrub big block inode btrees correctly xfs: consolidate scrub dinode mapping code into a single function xfs: abort xattr scrub if fatal signals are pending xfs: scrub should flag dir/attr offsets that aren't mappable with xfs_dablk_t xfs: fix off-by-one error in rtbitmap cross-reference xfs: check directory name validity xfs: check attribute name validity xfs: clean up iunlink functions xfs: add xfs_verify_agino_or_null helper xfs: refactor AGI unlinked bucket updates xfs: strengthen AGI unlinked inode bucket pointer checks xfs: refactor inode unlinked pointer update functions xfs: refactor unlinked list search and mapping to a separate function xfs: refactor inode update in iunlink_remove xfs: add tracepoints for high level iunlink operations xfs: cache unlinked pointers in an rhashtable xfs: add inode magic to inode verifier xfs: add magic numbers to dquot buffer ops xfs: use buf ops magic to detect btree block type xfs: don't overflow xattr listent buffer xfs: rename m_inotbt_nores to m_finobt_nores xfs: reserve blocks for ifree transaction during log recovery xfs: don't ever put nlink > 0 inodes on the unlinked list xfs: fix xfs_buf magic number endian checks xfs: don't pass iomap flags to xfs_reflink_allocate_cow xfs: rework breaking of shared extents in xfs_file_iomap_begin xfs: fix uninitialized error variables xfs: fix backwards endian conversion in scrub Luis R. Rodriguez (1): xfs: fix reporting supported extra file attributes for statx() Marco Benatto (1): xfs: Introduce XFS_PTAG_VERIFIER_ERROR panic mask YueHaibing (1): xfs: remove duplicated xfs_defer.h Documentation/filesystems/xfs.txt | 3 +- fs/xfs/libxfs/xfs_ag.c | 6 +- fs/xfs/libxfs/xfs_ag_resv.c | 2 +- fs/xfs/libxfs/xfs_alloc.c | 12 +- fs/xfs/libxfs/xfs_alloc_btree.c | 74 ++-- fs/xfs/libxfs/xfs_attr.c | 17 + fs/xfs/libxfs/xfs_attr.h | 2 +- fs/xfs/libxfs/xfs_attr_leaf.c | 21 +- fs/xfs/libxfs/xfs_attr_remote.c | 8 +- fs/xfs/libxfs/xfs_bmap.c | 302 +++++++++------ fs/xfs/libxfs/xfs_bmap.h | 16 +- fs/xfs/libxfs/xfs_bmap_btree.c | 13 +- fs/xfs/libxfs/xfs_da_btree.c | 49 ++- fs/xfs/libxfs/xfs_da_format.h | 3 + fs/xfs/libxfs/xfs_dir2.c | 17 + fs/xfs/libxfs/xfs_dir2.h | 1 + fs/xfs/libxfs/xfs_dir2_block.c | 10 +- fs/xfs/libxfs/xfs_dir2_data.c | 12 +- fs/xfs/libxfs/xfs_dir2_leaf.c | 100 +---- fs/xfs/libxfs/xfs_dir2_node.c | 10 +- fs/xfs/libxfs/xfs_dquot_buf.c | 4 + fs/xfs/libxfs/xfs_errortag.h | 4 +- fs/xfs/libxfs/xfs_ialloc.c | 3 +- fs/xfs/libxfs/xfs_ialloc_btree.c | 29 +- fs/xfs/libxfs/xfs_iext_tree.c | 13 +- fs/xfs/libxfs/xfs_inode_buf.c | 11 +- fs/xfs/libxfs/xfs_inode_fork.h | 2 +- fs/xfs/libxfs/xfs_refcount_btree.c | 3 +- fs/xfs/libxfs/xfs_rmap_btree.c | 3 +- fs/xfs/libxfs/xfs_sb.c | 7 +- fs/xfs/libxfs/xfs_shared.h | 4 +- fs/xfs/libxfs/xfs_symlink_remote.c | 3 +- fs/xfs/libxfs/xfs_types.c | 24 ++ fs/xfs/libxfs/xfs_types.h | 3 + fs/xfs/scrub/agheader.c | 10 +- fs/xfs/scrub/agheader_repair.c | 12 +- fs/xfs/scrub/attr.c | 11 + fs/xfs/scrub/bmap.c | 27 ++ fs/xfs/scrub/dir.c | 6 + fs/xfs/scrub/ialloc.c | 330 +++++++++++----- fs/xfs/scrub/repair.c | 3 +- fs/xfs/scrub/repair.h | 3 - fs/xfs/scrub/rtbitmap.c | 5 +- fs/xfs/scrub/trace.h | 45 +++ fs/xfs/xfs_aops.c | 266 +++++++------ fs/xfs/xfs_aops.h | 24 +- fs/xfs/xfs_attr_list.c | 1 + fs/xfs/xfs_bmap_util.c | 9 +- fs/xfs/xfs_buf.c | 72 +++- fs/xfs/xfs_buf.h | 8 +- fs/xfs/xfs_error.c | 6 +- fs/xfs/xfs_error.h | 1 + fs/xfs/xfs_file.c | 31 +- fs/xfs/xfs_fsops.c | 1 + fs/xfs/xfs_globals.c | 2 +- fs/xfs/xfs_inode.c | 769 +++++++++++++++++++++++++++---------- fs/xfs/xfs_inode.h | 3 + fs/xfs/xfs_iomap.c | 518 ++++++++++++------------- fs/xfs/xfs_iomap.h | 7 +- fs/xfs/xfs_iops.c | 21 +- fs/xfs/xfs_log_recover.c | 14 +- fs/xfs/xfs_mount.c | 5 + fs/xfs/xfs_mount.h | 10 +- fs/xfs/xfs_ondisk.h | 21 + fs/xfs/xfs_pnfs.c | 2 +- fs/xfs/xfs_reflink.c | 150 +++----- fs/xfs/xfs_reflink.h | 18 +- fs/xfs/xfs_super.c | 22 +- fs/xfs/xfs_sysctl.h | 1 + fs/xfs/xfs_sysfs.c | 24 ++ fs/xfs/xfs_trace.h | 115 ++++-- fs/xfs/xfs_trans_bmap.c | 1 - fs/xfs/xfs_trans_buf.c | 2 +- fs/xfs/xfs_trans_extfree.c | 1 - fs/xfs/xfs_trans_refcount.c | 1 - fs/xfs/xfs_trans_rmap.c | 1 - fs/xfs/xfs_xattr.c | 3 + 77 files changed, 2134 insertions(+), 1239 deletions(-)