[GIT PULL] xfs: new code for 5.16

From: Darrick J. Wong
Date: Tue Nov 02 2021 - 14:47:08 EST


Hi Linus,

Please pull this branch containing new code for 5.16. This cycle we've
worked on fixing bugs and improving XFS' memory footprint.

The most notable fixes include: fixing a corruption warning (and
free space accounting skew) if copy on write fails; fixing slab cache
misuse if SLOB is enabled, which apparently was broken for years without
anybody noticing; and fixing a potential race with online shrinkfs.

Otherwise, the bulk of the changes here involve setting up separate slab
caches for frequently used items such as btree cursors and log intent
items, and compacting the structures to reduce memory usage of those
items substantially. This also sets us up to support larger btrees in
future kernels. We also switch parts of online fsck to allocate scrub
context information from the heap instead of using stack space.

The branch merges cleanly against upstream as of a few minutes ago.
Please let me know if anything else strange happens during the merge
process. There will probably be a second pull request next week with
a few more minor cleanups and bug fixes.

As a side note: the only iomap changes for 5.16 that I know of are
Andreas' gfs2 mmap pagefault deadlock fixes, which I think he's already
sent you separately.

--D

The following changes since commit 9e1ff307c779ce1f0f810c7ecce3d95bbae40896:

Linux 5.15-rc4 (2021-10-03 14:08:47 -0700)

are available in the Git repository at:

git://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git tags/xfs-5.16-merge-4

for you to fetch changes up to 2a09b575074ff3ed23907b6f6f3da87af41f592b:

xfs: use swap() to make code cleaner (2021-10-30 09:28:55 -0700)

----------------------------------------------------------------
New code for 5.16:
* Bug fixes and cleanups for kernel memory allocation usage, this time
without touching the mm code.
* Refactor the log recovery mechanism that preserves held resources
across a transaction roll so that it uses the exact same mechanism
that we use for that during regular runtime.
* Fix bugs and tighten checking around btree heights.
* Remove more old typedefs.
* Fix perag reference leaks when racing with growfs.
* Remove unused fields from xfs_btree_cur.
* Allocate various scrub structures on the heap to reduce stack usage.
* Pack xfs_btree_cur fields and rearrange to support arbitrary heights.
* Compute maximum possible heights for each btree height, and use that
to set up slab caches for each btree type.
* Finally remove kmem_zone_t, since these have always been struct
kmem_cache on Linux.
* Compact the structures used to coordinate work intent items.
* Set up slab caches for each work intent item type.
* Rename the "bmap_add_free" function to "free_extent_later", which
more accurately describes what it does.
* Fix corruption warning on unmount when a CoW preallocation covers a
data fork delalloc reservation but then the CoW fails.
* Add some more minor code improvements.

----------------------------------------------------------------
Brian Foster (5):
xfs: fold perag loop iteration logic into helper function
xfs: rename the next_agno perag iteration variable
xfs: terminate perag iteration reliably on agcount
xfs: fix perag reference leak on iteration race with growfs
xfs: punch out data fork delalloc blocks on COW writeback failure

Changcheng Deng (1):
xfs: use swap() to make code cleaner

Christoph Hellwig (3):
xfs: remove the xfs_dinode_t typedef
xfs: remove the xfs_dsb_t typedef
xfs: remove the xfs_dqblk_t typedef

Darrick J. Wong (32):
xfs: formalize the process of holding onto resources across a defer roll
xfs: port the defer ops capture and continue to resource capture
xfs: fix maxlevels comparisons in the btree staging code
xfs: remove xfs_btree_cur_t typedef
xfs: don't allocate scrub contexts on the stack
xfs: stricter btree height checking when looking for errors
xfs: stricter btree height checking when scanning for btree roots
xfs: check that bc_nlevels never overflows
xfs: fix incorrect decoding in xchk_btree_cur_fsbno
xfs: remove xfs_btree_cur.bc_blocklog
xfs: reduce the size of nr_ops for refcount btree cursors
xfs: don't track firstrec/firstkey separately in xchk_btree
xfs: dynamically allocate btree scrub context structure
xfs: prepare xfs_btree_cur for dynamic cursor heights
xfs: rearrange xfs_btree_cur fields for better packing
xfs: refactor btree cursor allocation function
xfs: encode the max btree height in the cursor
xfs: dynamically allocate cursors based on maxlevels
xfs: rename m_ag_maxlevels to m_allocbt_maxlevels
xfs: compute maximum AG btree height for critical reservation calculation
xfs: clean up xfs_btree_{calc_size,compute_maxlevels}
xfs: compute the maximum height of the rmap btree when reflink enabled
xfs: kill XFS_BTREE_MAXLEVELS
xfs: compute absolute maximum nlevels for each btree type
xfs: use separate btree cursor cache for each btree type
xfs: remove kmem_zone typedef
xfs: rename _zone variables to _cache
xfs: compact deferred intent item structures
xfs: create slab caches for frequently-used deferred items
xfs: rename xfs_bmap_add_free to xfs_free_extent_later
xfs: reduce the size of struct xfs_extent_free_item
xfs: remove unused parameter from refcount code

Gustavo A. R. Silva (1):
xfs: Use kvcalloc() instead of kvzalloc()

Qing Wang (1):
xfs: replace snprintf in show functions with sysfs_emit

Rustam Kovhaev (1):
xfs: use kmem_cache_free() for kmem_cache objects

Wan Jiabing (1):
xfs: Remove duplicated include in xfs_super

fs/xfs/kmem.h | 4 -
fs/xfs/libxfs/xfs_ag.c | 2 +-
fs/xfs/libxfs/xfs_ag.h | 36 ++--
fs/xfs/libxfs/xfs_ag_resv.c | 3 +-
fs/xfs/libxfs/xfs_alloc.c | 120 ++++++++++---
fs/xfs/libxfs/xfs_alloc.h | 38 ++++-
fs/xfs/libxfs/xfs_alloc_btree.c | 63 +++++--
fs/xfs/libxfs/xfs_alloc_btree.h | 5 +
fs/xfs/libxfs/xfs_attr_leaf.c | 2 +-
fs/xfs/libxfs/xfs_bmap.c | 101 ++++-------
fs/xfs/libxfs/xfs_bmap.h | 35 +---
fs/xfs/libxfs/xfs_bmap_btree.c | 62 +++++--
fs/xfs/libxfs/xfs_bmap_btree.h | 5 +
fs/xfs/libxfs/xfs_btree.c | 333 +++++++++++++++++++++++--------------
fs/xfs/libxfs/xfs_btree.h | 99 ++++++++---
fs/xfs/libxfs/xfs_btree_staging.c | 8 +-
fs/xfs/libxfs/xfs_da_btree.c | 6 +-
fs/xfs/libxfs/xfs_da_btree.h | 3 +-
fs/xfs/libxfs/xfs_defer.c | 241 ++++++++++++++++++++-------
fs/xfs/libxfs/xfs_defer.h | 41 ++++-
fs/xfs/libxfs/xfs_dquot_buf.c | 4 +-
fs/xfs/libxfs/xfs_format.h | 12 +-
fs/xfs/libxfs/xfs_fs.h | 2 +
fs/xfs/libxfs/xfs_ialloc.c | 5 +-
fs/xfs/libxfs/xfs_ialloc_btree.c | 90 +++++++++-
fs/xfs/libxfs/xfs_ialloc_btree.h | 5 +
fs/xfs/libxfs/xfs_inode_buf.c | 6 +-
fs/xfs/libxfs/xfs_inode_fork.c | 24 +--
fs/xfs/libxfs/xfs_inode_fork.h | 2 +-
fs/xfs/libxfs/xfs_refcount.c | 46 +++--
fs/xfs/libxfs/xfs_refcount.h | 7 +-
fs/xfs/libxfs/xfs_refcount_btree.c | 73 ++++++--
fs/xfs/libxfs/xfs_refcount_btree.h | 5 +
fs/xfs/libxfs/xfs_rmap.c | 21 ++-
fs/xfs/libxfs/xfs_rmap.h | 7 +-
fs/xfs/libxfs/xfs_rmap_btree.c | 116 ++++++++++---
fs/xfs/libxfs/xfs_rmap_btree.h | 5 +
fs/xfs/libxfs/xfs_sb.c | 4 +-
fs/xfs/libxfs/xfs_trans_resv.c | 18 +-
fs/xfs/libxfs/xfs_trans_space.h | 9 +-
fs/xfs/scrub/agheader.c | 13 +-
fs/xfs/scrub/agheader_repair.c | 8 +-
fs/xfs/scrub/bitmap.c | 22 +--
fs/xfs/scrub/bmap.c | 2 +-
fs/xfs/scrub/btree.c | 121 +++++++-------
fs/xfs/scrub/btree.h | 17 +-
fs/xfs/scrub/dabtree.c | 62 +++----
fs/xfs/scrub/repair.h | 3 +
fs/xfs/scrub/scrub.c | 64 +++----
fs/xfs/scrub/trace.c | 11 +-
fs/xfs/scrub/trace.h | 10 +-
fs/xfs/xfs_aops.c | 15 +-
fs/xfs/xfs_attr_inactive.c | 2 +-
fs/xfs/xfs_bmap_item.c | 18 +-
fs/xfs/xfs_bmap_item.h | 6 +-
fs/xfs/xfs_buf.c | 14 +-
fs/xfs/xfs_buf_item.c | 8 +-
fs/xfs/xfs_buf_item.h | 2 +-
fs/xfs/xfs_buf_item_recover.c | 2 +-
fs/xfs/xfs_dquot.c | 28 ++--
fs/xfs/xfs_extfree_item.c | 33 ++--
fs/xfs/xfs_extfree_item.h | 6 +-
fs/xfs/xfs_icache.c | 10 +-
fs/xfs/xfs_icreate_item.c | 6 +-
fs/xfs/xfs_icreate_item.h | 2 +-
fs/xfs/xfs_inode.c | 12 +-
fs/xfs/xfs_inode.h | 2 +-
fs/xfs/xfs_inode_item.c | 6 +-
fs/xfs/xfs_inode_item.h | 2 +-
fs/xfs/xfs_ioctl.c | 6 +-
fs/xfs/xfs_log.c | 6 +-
fs/xfs/xfs_log_priv.h | 2 +-
fs/xfs/xfs_log_recover.c | 12 +-
fs/xfs/xfs_mount.c | 14 ++
fs/xfs/xfs_mount.h | 5 +-
fs/xfs/xfs_mru_cache.c | 2 +-
fs/xfs/xfs_qm.c | 2 +-
fs/xfs/xfs_qm.h | 2 +-
fs/xfs/xfs_refcount_item.c | 18 +-
fs/xfs/xfs_refcount_item.h | 6 +-
fs/xfs/xfs_reflink.c | 2 +-
fs/xfs/xfs_rmap_item.c | 18 +-
fs/xfs/xfs_rmap_item.h | 6 +-
fs/xfs/xfs_super.c | 233 +++++++++++++-------------
fs/xfs/xfs_sysfs.c | 24 +--
fs/xfs/xfs_trace.h | 2 +-
fs/xfs/xfs_trans.c | 16 +-
fs/xfs/xfs_trans.h | 8 +-
fs/xfs/xfs_trans_dquot.c | 4 +-
89 files changed, 1656 insertions(+), 907 deletions(-)