[GIT PULL] xfs: 4.19 merge, part 2

From: Darrick J. Wong
Date: Tue Aug 14 2018 - 11:13:07 EST


Hi Linus,

This is the second part of the XFS changes for 4.19. The biggest
changes are the removal of buffer heads frm XFS, a massive reworking of
the deferred transaction operations handling code, the removal of the
long defunct barrier/nobarrier mount options, and the addition of a
few more online repair functions.

I started by merging the iomap-4.19-merge branch atop v4.18-rc4 and then
merging in all the development branches as they came ready. I hope that
won't mess up the pull process (it seemed to work fine with the current
master) but please let us know if there are any problems.

(FWIW I also sustained an eye injury last week so it may take a day to
respond.)

--D

The following changes since commit c2efdfc100af42cc04525ef0db74b176da59e1a4:

Merge branch 'iomap-4.19-merge' into xfs-4.19-merge (2018-07-11 22:24:40 -0700)

are available in the Git repository at:

git://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git tags/xfs-4.19-merge-6

for you to fetch changes up to 01239d77b9dd978863d1a75f0d095ab942a1fe66:

xfs: fix a null pointer dereference in xfs_bmap_extents_to_btree (2018-08-12 08:37:31 -0700)

----------------------------------------------------------------
Changes for 4.19:
- Use extent maps to track pagecache page status instead of bufferhead
state.
- Refactor pagecache read and write paths to use the new iomap library
functions, which enable us to drop the old bufferhead code for
pagesize == blocksize filesystems.
- Set up parallel per-block-per-page metadata to track subpage
information that was tracked by buffer heads, which enables us to drop
the old bufferhead code for pagesize > blocksize filesystems.
- Tie a deferred ops control structure to a transaction so that we can
take advantage of an upper-level dfops without having to plumb pointer
passing through the code.
- Refactor the deferred ops code to track deferred ops as part of the
transaction structure (instead of as a separate data structure) so
that we can simplify the scoping rules around defer_ops.
- Refactor twisty delwri buffer submission code to avoid deadlocks.
- Shorten and fix indenting problems in the scrub code.
- Detect obviously bad summary counts at mount and fix them.
- Directly associate deferred ops control structure with a transaction
so that callers no longer have to manage it themselves.
- Remove a couple of IRIX-era inode macros.
- Remove the long-deprecated 'barrier' and 'nobarrier' mount options.
- Clean up the inode fork structure a bit.
- Check for bad fs summary counter values in the superblock.
- Reduce COW fork lookups during writeback.
- Refactor the deferred ops control structures into the transaction
structure, thereby eliminating the need for transaction users to
handle the deferred ops as a separate data structure.
- Add the ability to repair AG headers online.
- Fix a crash due to insufficient return value checking.
- Various fixes and cleanups.

----------------------------------------------------------------
Andreas Gruenbacher (1):
iomap: Switch to offset_in_page for clarity

Bill O'Donnell (1):
libxfs: add more bounds checking to sb sanity checks

Brian Foster (84):
xfs: cow unwritten conversion uses uninitialized dfops
xfs: rename xfs_trans ->t_agfl_dfops to ->t_dfops
xfs: remove dfops parameter from ifree call stack
xfs: remove dfops param from high level dirname calls
xfs: use ->t_dfops for recovery of [b|c]ui log items
xfs: use ->t_dfops for attr set/remove operations
xfs: remove dfops param in attr fork add path
xfs: use ->t_dfops in extent split tx and remove param
xfs: replace xfs_da_args->dfops accesses with ->t_dfops and remove
xfs: use ->t_dfops in dqalloc transaction
xfs: use ->t_dfops for all xfs_bmapi_write() callers
xfs: remove xfs_bmapi_write() dfops param
xfs: use ->t_dfops for all xfs_bunmapi() callers
xfs: remove xfs_bunmapi() dfops param
xfs: remove xfs_bmapi_remap() dfops param
xfs: remove struct xfs_bmalloca dfops field
xfs: use ->t_dfops for collapse/insert range operations
xfs: remove dfops param from internal bmap extent helpers
xfs: remove xfs_btree_cur bmbt dfops field
xfs: remove unused btree cursor bc_private.a.dfops field
xfs: use ->t_dfops for rmap extent swap operations
xfs: use ->t_dfops in cancel cow blocks operation
xfs: use ->t_dfops in reflink cow recover path
xfs: refactor dfops init to attach to transaction
xfs: allow null firstblock in xfs_bmapi_write() when tp is null
xfs: add firstblock field to xfs_trans
xfs: use ->t_firstblock in dir ops
xfs: remove firstblock param from xfs dir ops
xfs: use ->t_firstblock in attrfork add
xfs: use ->t_firstblock in xattr ops
xfs: use ->t_firstblock for all xfs_bmapi_write() callers
xfs: use ->t_firstblock for all xfs_bunmapi() callers
xfs: use ->t_firstblock in xfs_bmapi_remap()
xfs: use ->t_firstblock in insert/collapse range
xfs: remove xfs_bmapi_write() firstblock param
xfs: remove xfs_bunmapi() firstblock param
xfs: remove bmap insert/collapse firstblock param
xfs: use ->t_firstblock in bmap extent split
xfs: remove xfs_bmalloca firstblock field
xfs: remove bmap extent add helper firstblock params
xfs: remove bmap format helpers firstblock params
xfs: remove xfs_btree_cur private firstblock field
xfs: remove xfs_alloc_arg firstblock field
xfs: use ->t_firstblock in dq alloc
xfs: replace no-op firstblock init with ->t_firstblock
xfs: use ->t_firstblock in reflink cow block cancel
xfs: use ->t_firstblock in extent swap
xfs: use ->t_firstblock in inode inactivate
xfs: remove xfs_defer_init() firstblock param
xfs: refactor buffer submission into a common helper
xfs: use sync buffer I/O for sync delwri queue submission
xfs: combine [a]sync buffer submission apis
xfs: kill __xfs_buf_submit_common()
xfs: pull up dfops from xfs_itruncate_extents()
xfs: use ->t_dfops in log recovery intent processing
xfs: fix transaction leak on remote attr set/remove failure
xfs: make deferred processing safe for embedded dfops
xfs: remove unused deferred ops committed field
xfs: reset dfops to initial state after finish
xfs: pack holes in xfs_defer_ops and xfs_trans
xfs: support embedded dfops in transaction
xfs: use internal dfops in cow blocks cancel
xfs: use internal dfops in attr code
xfs: use internal dfops during [b|c]ui recovery
xfs: remove all boilerplate defer init/finish code
xfs: remove unnecessary dfops init calls in xattr code
xfs: drop unnecessary xfs_defer_finish() dfops parameter
xfs: bypass final dfops roll in trans commit path
xfs: refactor internal dfops initialization
xfs: use transaction for intent recovery instead of raw dfops
xfs: remove unused __xfs_defer_cancel() internal helper
xfs: pass transaction to dfops reset/move helpers
xfs: replace dop_low with transaction flag
xfs: add missing defer ijoins for held inodes
xfs: automatic dfops buffer relogging
xfs: automatic dfops inode relogging
xfs: drop dop param from xfs_defer_op_type ->finish_item() callback
xfs: clean out superfluous dfops dop params/vars
xfs: cancel dfops on xfs_defer_finish() error
xfs: replace xfs_defer_ops ->dop_pending with on-stack list
xfs: pass transaction to xfs_defer_add()
xfs: always defer agfl block frees
xfs: fold dfops into the transaction
xfs: remove dead error handling code in xfs_dquot_disk_alloc()

Carlos Maiolino (2):
xfs: Initialize variables in xfs_alloc_get_rec before using them
libxfs: Fix a couple of sparse complaintis

Christoph Hellwig (28):
xfs: use iomap for blocksize == PAGE_SIZE readpage and readpages
xfs: simplify xfs_aops_discard_page
xfs: move locking into xfs_bmap_punch_delalloc_range
xfs: do not set the page uptodate in xfs_writepage_map
xfs: don't clear imap_valid for a non-uptodate buffers
xfs: don't use XFS_BMAPI_IGSTATE in xfs_map_blocks
xfs: remove xfs_reflink_trim_irec_to_next_cow
xfs: remove xfs_map_cow
xfs: rename the offset variable in xfs_writepage_map
xfs: remove the now unused XFS_BMAPI_IGSTATE flag
xfs: remove xfs_reflink_find_cow_mapping
xfs: simplify xfs_map_blocks by using xfs_iext_lookup_extent directly
xfs: remove the imap_valid flag
xfs: don't look at buffer heads in xfs_add_to_ioend
xfs: move all writeback buffer_head manipulation into xfs_map_at_offset
xfs: remove xfs_start_page_writeback
xfs: refactor the tail of xfs_writepage_map
xfs: allow writeback on pages without buffer heads
iomap: add support for sub-pagesize buffered I/O without buffer heads
xfs: add support for sub-pagesize writeback without buffer_heads
xfs: update my copyrights for the writeback and iomap code
xfs: remove if_real_bytes
xfs: simplify xfs_idata_realloc
xfs: remove the xfs_ifork_t typedef
xfs: introduce a new xfs_inode_has_cow_data helper
xfs: maintain a sequence count for inode fork manipulations
xfs: avoid COW fork extent lookups in writeback if the fork didn't change
xfs: use WRITE_ONCE to update if_seq

Darrick J. Wong (28):
xfs: don't assume a left rmap when allocating a new rmap
xfs: check leaf attribute block freemap in verifier
xfs: return from _defer_finish with a clean transaction
xfs: trivial xfs_btree_del_cursor cleanups
xfs: clean up xfs_btree_del_cursor callers
xfs: shorten xfs_scrub_ prefix
xfs: shorten xfs_repair_ prefix to xrep_
xfs: shorten struct xfs_scrub_context to struct xfs_scrub
xfs: fix indentation and other whitespace problems in scrub/repair
xfs: detect and fix bad summary counts at mount
xfs: refactor unmount record write
xfs: force summary counter recalc at next mount
xfs: kill IHOLD
xfs: clean up IRELE/iput callsites
xfs: pass transaction lock while setting up agresv on cyclic metadata
xfs: move the repair extent list into its own file
xfs: refactor the xrep_extent_list into xfs_bitmap
xfs: refactor superblock verifiers
xfs: verify icount in superblock write
xfs: check for unknown v5 feature bits in superblock write verifier
xfs: move extent busy tree initialization to xfs_initialize_perag
xfs: refactor log recovery check
xfs: use a local variable for magic number in xfs_da3_node_lookup_int
xfs: check da node magic in _node_lookup_int
xfs: only validate summary counts on primary superblock
xfs: repair the AGF
xfs: repair the AGFL
xfs: repair the AGI

Dave Chinner (1):
xfs: make xfs_writepage_map extent map centric

Dave Jiang (1):
xfs: Close race between direct IO and xfs_break_layouts()

Eric Sandeen (3):
xfs: remove unused iolock arg from xfs_break_dax_layouts
xfs: remove deprecated barrier/nobarrier mount
xfs: remove b_last_holder & associated macros

Gustavo A. R. Silva (3):
xfs_attr_leaf: use swap macro in xfs_attr3_leaf_rebalance
xfs_bmap_util: use swap macro
xfs: use swap macro in xfs_dir2_leafn_rebalance

Huang Chong (1):
xfs: fix a comment in xfs_log_reserve

Shan Hai (1):
xfs: fix a null pointer dereference in xfs_bmap_extents_to_btree

Thomas Bianchi (1):
xfs: substitute spaces with tabs

Documentation/filesystems/xfs.txt | 4 +-
fs/iomap.c | 292 ++++++++++-
fs/xfs/Makefile | 1 +
fs/xfs/libxfs/xfs_ag_resv.c | 13 +-
fs/xfs/libxfs/xfs_ag_resv.h | 4 +-
fs/xfs/libxfs/xfs_alloc.c | 46 +-
fs/xfs/libxfs/xfs_alloc.h | 1 -
fs/xfs/libxfs/xfs_attr.c | 120 ++---
fs/xfs/libxfs/xfs_attr_leaf.c | 70 +--
fs/xfs/libxfs/xfs_attr_remote.c | 26 +-
fs/xfs/libxfs/xfs_bmap.c | 444 ++++++----------
fs/xfs/libxfs/xfs_bmap.h | 48 +-
fs/xfs/libxfs/xfs_bmap_btree.c | 22 +-
fs/xfs/libxfs/xfs_btree.h | 4 -
fs/xfs/libxfs/xfs_da_btree.c | 37 +-
fs/xfs/libxfs/xfs_da_btree.h | 3 -
fs/xfs/libxfs/xfs_defer.c | 323 ++++++------
fs/xfs/libxfs/xfs_defer.h | 41 +-
fs/xfs/libxfs/xfs_dir2.c | 74 ++-
fs/xfs/libxfs/xfs_dir2.h | 10 +-
fs/xfs/libxfs/xfs_dir2_node.c | 17 +-
fs/xfs/libxfs/xfs_errortag.h | 4 +-
fs/xfs/libxfs/xfs_ialloc.c | 33 +-
fs/xfs/libxfs/xfs_ialloc.h | 1 -
fs/xfs/libxfs/xfs_ialloc_btree.c | 12 +-
fs/xfs/libxfs/xfs_ialloc_btree.h | 4 +-
fs/xfs/libxfs/xfs_iext_tree.c | 20 +
fs/xfs/libxfs/xfs_inode_fork.c | 74 +--
fs/xfs/libxfs/xfs_inode_fork.h | 6 +-
fs/xfs/libxfs/xfs_log_format.h | 13 +
fs/xfs/libxfs/xfs_refcount.c | 107 ++--
fs/xfs/libxfs/xfs_refcount.h | 25 +-
fs/xfs/libxfs/xfs_refcount_btree.c | 13 +-
fs/xfs/libxfs/xfs_refcount_btree.h | 7 +-
fs/xfs/libxfs/xfs_rmap.c | 99 ++--
fs/xfs/libxfs/xfs_rmap.h | 22 +-
fs/xfs/libxfs/xfs_rmap_btree.c | 5 +-
fs/xfs/libxfs/xfs_rmap_btree.h | 2 +-
fs/xfs/libxfs/xfs_sb.c | 278 ++++++----
fs/xfs/libxfs/xfs_shared.h | 12 +
fs/xfs/libxfs/xfs_types.c | 34 ++
fs/xfs/libxfs/xfs_types.h | 1 +
fs/xfs/scrub/agheader.c | 518 +++++++++----------
fs/xfs/scrub/agheader_repair.c | 889 ++++++++++++++++++++++++++++++-
fs/xfs/scrub/alloc.c | 116 ++---
fs/xfs/scrub/attr.c | 130 ++---
fs/xfs/scrub/bitmap.c | 303 +++++++++++
fs/xfs/scrub/bitmap.h | 36 ++
fs/xfs/scrub/bmap.c | 331 ++++++------
fs/xfs/scrub/btree.c | 334 ++++++------
fs/xfs/scrub/btree.h | 45 +-
fs/xfs/scrub/common.c | 394 +++++++-------
fs/xfs/scrub/common.h | 115 ++--
fs/xfs/scrub/dabtree.c | 170 +++---
fs/xfs/scrub/dabtree.h | 33 +-
fs/xfs/scrub/dir.c | 264 +++++-----
fs/xfs/scrub/ialloc.c | 214 ++++----
fs/xfs/scrub/inode.c | 282 +++++-----
fs/xfs/scrub/parent.c | 132 ++---
fs/xfs/scrub/quota.c | 140 ++---
fs/xfs/scrub/refcount.c | 194 +++----
fs/xfs/scrub/repair.c | 519 ++++++-------------
fs/xfs/scrub/repair.h | 95 ++--
fs/xfs/scrub/rmap.c | 172 +++---
fs/xfs/scrub/rtbitmap.c | 78 +--
fs/xfs/scrub/scrub.c | 210 ++++----
fs/xfs/scrub/scrub.h | 134 +++--
fs/xfs/scrub/symlink.c | 28 +-
fs/xfs/scrub/trace.c | 6 +-
fs/xfs/scrub/trace.h | 141 +++--
fs/xfs/xfs.h | 1 -
fs/xfs/xfs_aops.c | 1007 ++++++++++--------------------------
fs/xfs/xfs_aops.h | 4 +-
fs/xfs/xfs_attr_inactive.c | 1 +
fs/xfs/xfs_attr_list.c | 2 +-
fs/xfs/xfs_bmap_item.c | 25 +-
fs/xfs/xfs_bmap_item.h | 3 +-
fs/xfs/xfs_bmap_util.c | 118 ++---
fs/xfs/xfs_buf.c | 212 +++-----
fs/xfs/xfs_buf.h | 15 +-
fs/xfs/xfs_discard.c | 2 +-
fs/xfs/xfs_dquot.c | 49 +-
fs/xfs/xfs_error.c | 3 +
fs/xfs/xfs_export.c | 2 +-
fs/xfs/xfs_file.c | 12 +-
fs/xfs/xfs_filestream.c | 8 +-
fs/xfs/xfs_fsmap.c | 4 +-
fs/xfs/xfs_fsops.c | 2 +-
fs/xfs/xfs_icache.c | 16 +-
fs/xfs/xfs_inode.c | 177 ++-----
fs/xfs/xfs_inode.h | 32 +-
fs/xfs/xfs_inode_item.c | 4 -
fs/xfs/xfs_iomap.c | 54 +-
fs/xfs/xfs_iomap.h | 2 +-
fs/xfs/xfs_iops.c | 5 +-
fs/xfs/xfs_itable.c | 8 +-
fs/xfs/xfs_log.c | 156 +++---
fs/xfs/xfs_log.h | 1 +
fs/xfs/xfs_log_recover.c | 68 +--
fs/xfs/xfs_mount.c | 100 +++-
fs/xfs/xfs_mount.h | 3 +-
fs/xfs/xfs_qm.c | 22 +-
fs/xfs/xfs_qm_syscalls.c | 9 +-
fs/xfs/xfs_quotaops.c | 2 +-
fs/xfs/xfs_refcount_item.c | 28 +-
fs/xfs/xfs_refcount_item.h | 3 +-
fs/xfs/xfs_reflink.c | 173 ++-----
fs/xfs/xfs_reflink.h | 4 -
fs/xfs/xfs_rtalloc.c | 20 +-
fs/xfs/xfs_super.c | 38 +-
fs/xfs/xfs_symlink.c | 51 +-
fs/xfs/xfs_trace.h | 78 +--
fs/xfs/xfs_trans.c | 26 +-
fs/xfs/xfs_trans.h | 21 +-
fs/xfs/xfs_trans_bmap.c | 6 +-
fs/xfs/xfs_trans_extfree.c | 2 -
fs/xfs/xfs_trans_refcount.c | 6 +-
fs/xfs/xfs_trans_rmap.c | 1 -
include/linux/iomap.h | 31 ++
119 files changed, 5676 insertions(+), 5336 deletions(-)
create mode 100644 fs/xfs/scrub/bitmap.c
create mode 100644 fs/xfs/scrub/bitmap.h