2021-07-02 20:17:22

by Darrick J. Wong

[permalink] [raw]
Subject: [GIT PULL] xfs: new code for 5.14

Hi Linus,

Please pull this branch containing new code for 5.14. Most of the work
this cycle has been on refactoring various parts of the codebase. The
biggest non-cleanup changes are (1) reducing the number of cache flushes
sent when writing the log; (2) a substantial number of log recovery
fixes; and (3) I started accepting pull requests from contributors if
the commits in their branches match what's been sent to the list.

For a week or so I /had/ staged a major cleanup of the logging code from
Dave Chinner, but it exposed so many lurking bugs in other parts of the
logging and log recovery code that I decided to defer that patchset
until we can address those latent bugs.

Larger cleanups this time include walking the incore inode cache (me)
and rework of the extended attribute code (Allison) to prepare it for
adding logged xattr updates (and directory tree parent pointers) in
future releases.

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. The merge commits I made seem stable enough, but as it's the
first time I've ever accepted a pull request, we'd all be open to
feedback for improvements for next time.

--D

The following changes since commit 8124c8a6b35386f73523d27eacb71b5364a68c4c:

Linux 5.13-rc4 (2021-05-30 11:58:25 -1000)

are available in the Git repository at:

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

for you to fetch changes up to 1effb72a8179a02c2dd8a268454ccf50bf68aa50:

xfs: don't wait on future iclogs when pushing the CIL (2021-06-25 14:02:02 -0700)

----------------------------------------------------------------
New code for 5.14:
- Refactor the buffer cache to use bulk page allocation
- Convert agnumber-based AG iteration to walk per-AG structures
- Clean up some unit conversions and other code warts
- Reduce spinlock contention in the directio fastpath
- Collapse all the inode cache walks into a single function
- Remove indirect function calls from the inode cache walk code
- Dramatically reduce the number of cache flushes sent when writing log
buffers
- Preserve inode sickness reports for longer
- Rename xfs_eofblocks since it controls inode cache walks
- Refactor the extended attribute code to prepare it for the addition
of log intent items to make xattrs fully transactional
- A few fixes to earlier large patchsets
- Log recovery fixes so that we don't accidentally mark the log clean
when log intent recovery fails
- Fix some latent SOB errors
- Clean up shutdown messages that get logged to dmesg
- Fix a regression in the online shrink code
- Fix a UAF in the buffer logging code if the fs goes offline
- Fix uninitialized error variables
- Fix a UAF in the CIL when commited log item callbacks race with a
shutdown
- Fix a bug where the CIL could hang trying to push part of the log ring
buffer that hasn't been filled yet

----------------------------------------------------------------
Allison Henderson (15):
xfs: Reverse apply 72b97ea40d
xfs: Add xfs_attr_node_remove_name
xfs: Refactor xfs_attr_set_shortform
xfs: Separate xfs_attr_node_addname and xfs_attr_node_addname_clear_incomplete
xfs: Add helper xfs_attr_node_addname_find_attr
xfs: Hoist xfs_attr_node_addname
xfs: Hoist xfs_attr_leaf_addname
xfs: Hoist node transaction handling
xfs: Add delay ready attr remove routines
xfs: Add delay ready attr set routines
xfs: Remove xfs_attr_rmtval_set
xfs: Clean up xfs_attr_node_addname_clear_incomplete
xfs: Fix default ASSERT in xfs_attr_set_iter
xfs: Make attr name schemes consistent
xfs: Initialize error in xfs_attr_remove_iter

Brian Foster (2):
xfs: hold buffer across unpin and potential shutdown processing
xfs: remove dead stale buf unpin handling code

Christoph Hellwig (4):
xfs: mark xfs_bmap_set_attrforkoff static
xfs: remove ->b_offset handling for page backed buffers
xfs: simplify the b_page_count calculation
xfs: cleanup error handling in xfs_buf_get_map

Darrick J. Wong (38):
xfs: clean up open-coded fs block unit conversions
xfs: remove unnecessary shifts
xfs: move the quotaoff dqrele inode walk into xfs_icache.c
xfs: detach inode dquots at the end of inactivation
xfs: move the inode walk functions further down
xfs: rename xfs_inode_walk functions to xfs_icwalk
xfs: pass the goal of the incore inode walk to xfs_inode_walk()
xfs: separate the dqrele_all inode grab logic from xfs_inode_walk_ag_grab
xfs: move xfs_inew_wait call into xfs_dqrele_inode
xfs: remove iter_flags parameter from xfs_inode_walk_*
xfs: remove indirect calls from xfs_inode_walk{,_ag}
xfs: clean up inode state flag tests in xfs_blockgc_igrab
xfs: make the icwalk processing functions clean up the grab state
xfs: fix radix tree tag signs
xfs: pass struct xfs_eofblocks to the inode scan callback
xfs: merge xfs_reclaim_inodes_ag into xfs_inode_walk_ag
xfs: refactor per-AG inode tagging functions
Merge tag 'xfs-buf-bulk-alloc-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs into xfs-5.14-merge2
Merge tag 'xfs-perag-conv-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs into xfs-5.14-merge2
Merge tag 'unit-conversion-cleanups-5.14_2021-06-03' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-5.14-merge2
Merge tag 'assorted-fixes-5.14-1_2021-06-03' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-5.14-merge2
Merge tag 'inode-walk-cleanups-5.14_2021-06-03' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-5.14-merge2
xfs: only reset incore inode health state flags when reclaiming an inode
xfs: drop IDONTCACHE on inodes when we mark them sick
xfs: change the prefix of XFS_EOF_FLAGS_* to XFS_ICWALK_FLAG_
xfs: selectively keep sick inodes in memory
xfs: rename struct xfs_eofblocks to xfs_icwalk
Merge tag 'fix-inode-health-reports-5.14_2021-06-08' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-5.14-merge2
Merge tag 'rename-eofblocks-5.14_2021-06-08' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-5.14-merge2
Merge tag 'xfs-delay-ready-attrs-v20.1' of https://github.com/allisonhenderson/xfs_work into xfs-5.14-merge4
xfs: refactor the inode recycling code
xfs: separate primary inode selection criteria in xfs_iget_cache_hit
xfs: fix type mismatches in the inode reclaim functions
xfs: print name of function causing fs shutdown instead of hex pointer
xfs: shorten the shutdown messages to a single line
xfs: fix log intent recovery ENOSPC shutdowns when inactivating inodes
xfs: force the log offline when log intent item recovery fails
xfs: fix endianness issue in xfs_ag_shrink_space

Dave Chinner (47):
xfs: split up xfs_buf_allocate_memory
xfs: use xfs_buf_alloc_pages for uncached buffers
xfs: use alloc_pages_bulk_array() for buffers
xfs: merge _xfs_buf_get_pages()
xfs: move page freeing into _xfs_buf_free_pages()
xfs: move xfs_perag_get/put to xfs_ag.[ch]
xfs: prepare for moving perag definitions and support to libxfs
xfs: move perag structure and setup to libxfs/xfs_ag.[ch]
xfs: make for_each_perag... a first class citizen
xfs: convert raw ag walks to use for_each_perag
xfs: convert xfs_iwalk to use perag references
xfs: convert secondary superblock walk to use perags
xfs: pass perags through to the busy extent code
xfs: push perags through the ag reservation callouts
xfs: pass perags around in fsmap data dev functions
xfs: add a perag to the btree cursor
xfs: convert rmap btree cursor to using a perag
xfs: convert refcount btree cursor to use perags
xfs: convert allocbt cursors to use perags
xfs: use perag for ialloc btree cursors
xfs: remove agno from btree cursor
xfs: simplify xfs_dialloc_select_ag() return values
xfs: collapse AG selection for inode allocation
xfs: get rid of xfs_dir_ialloc()
xfs: inode allocation can use a single perag instance
xfs: clean up and simplify xfs_dialloc()
xfs: use perag through unlink processing
xfs: remove xfs_perag_t
xfs: don't take a spinlock unconditionally in the DIO fastpath
xfs: get rid of xb_to_gfp()
xfs: merge xfs_buf_allocate_memory
xfs: drop the AGI being passed to xfs_check_agi_freecount
xfs: perag may be null in xfs_imap()
xfs: log stripe roundoff is a property of the log
xfs: separate CIL commit record IO
xfs: remove xfs_blkdev_issue_flush
xfs: async blkdev cache flush
xfs: CIL checkpoint flushes caches unconditionally
xfs: remove need_start_rec parameter from xlog_write()
xfs: journal IO cache flush reductions
xfs: Fix CIL throttle hang when CIL space used going backwards
xfs: xfs_log_force_lsn isn't passed a LSN
xfs: add iclog state trace events
xfs: don't nest icloglock inside ic_callback_lock
xfs: remove callback dequeue loop from xlog_state_do_iclog_callbacks
xfs: Fix a CIL UAF by getting get rid of the iclog callback lock
xfs: don't wait on future iclogs when pushing the CIL

Geert Uytterhoeven (1):
xfs: Fix 64-bit division on 32-bit in xlog_state_switch_iclogs()

Jiapeng Chong (1):
xfs: Remove redundant assignment to busy

Shaokun Zhang (2):
xfs: sort variable alphabetically to avoid repeated declaration
xfs: remove redundant initialization of variable error

fs/xfs/libxfs/xfs_ag.c | 280 ++++++++-
fs/xfs/libxfs/xfs_ag.h | 136 +++++
fs/xfs/libxfs/xfs_ag_resv.c | 11 +-
fs/xfs/libxfs/xfs_ag_resv.h | 15 +
fs/xfs/libxfs/xfs_alloc.c | 111 ++--
fs/xfs/libxfs/xfs_alloc.h | 2 +-
fs/xfs/libxfs/xfs_alloc_btree.c | 31 +-
fs/xfs/libxfs/xfs_alloc_btree.h | 9 +-
fs/xfs/libxfs/xfs_attr.c | 956 +++++++++++++++++------------
fs/xfs/libxfs/xfs_attr.h | 403 +++++++++++++
fs/xfs/libxfs/xfs_attr_leaf.c | 5 +-
fs/xfs/libxfs/xfs_attr_leaf.h | 2 +-
fs/xfs/libxfs/xfs_attr_remote.c | 167 +++---
fs/xfs/libxfs/xfs_attr_remote.h | 8 +-
fs/xfs/libxfs/xfs_bmap.c | 3 +-
fs/xfs/libxfs/xfs_bmap.h | 1 -
fs/xfs/libxfs/xfs_btree.c | 15 +-
fs/xfs/libxfs/xfs_btree.h | 10 +-
fs/xfs/libxfs/xfs_ialloc.c | 641 ++++++++++----------
fs/xfs/libxfs/xfs_ialloc.h | 40 +-
fs/xfs/libxfs/xfs_ialloc_btree.c | 46 +-
fs/xfs/libxfs/xfs_ialloc_btree.h | 13 +-
fs/xfs/libxfs/xfs_inode_buf.c | 2 +-
fs/xfs/libxfs/xfs_log_format.h | 3 -
fs/xfs/libxfs/xfs_refcount.c | 122 ++--
fs/xfs/libxfs/xfs_refcount.h | 9 +-
fs/xfs/libxfs/xfs_refcount_btree.c | 39 +-
fs/xfs/libxfs/xfs_refcount_btree.h | 7 +-
fs/xfs/libxfs/xfs_rmap.c | 147 ++---
fs/xfs/libxfs/xfs_rmap.h | 6 +-
fs/xfs/libxfs/xfs_rmap_btree.c | 46 +-
fs/xfs/libxfs/xfs_rmap_btree.h | 6 +-
fs/xfs/libxfs/xfs_sb.c | 146 +----
fs/xfs/libxfs/xfs_sb.h | 9 -
fs/xfs/libxfs/xfs_shared.h | 20 +-
fs/xfs/libxfs/xfs_types.c | 4 +-
fs/xfs/libxfs/xfs_types.h | 1 +
fs/xfs/scrub/agheader.c | 1 +
fs/xfs/scrub/agheader_repair.c | 33 +-
fs/xfs/scrub/alloc.c | 3 +-
fs/xfs/scrub/bmap.c | 21 +-
fs/xfs/scrub/common.c | 15 +-
fs/xfs/scrub/fscounters.c | 42 +-
fs/xfs/scrub/health.c | 2 +-
fs/xfs/scrub/ialloc.c | 9 +-
fs/xfs/scrub/refcount.c | 3 +-
fs/xfs/scrub/repair.c | 14 +-
fs/xfs/scrub/rmap.c | 3 +-
fs/xfs/scrub/trace.c | 3 +-
fs/xfs/xfs_attr_inactive.c | 2 +-
fs/xfs/xfs_bio_io.c | 35 ++
fs/xfs/xfs_bmap_util.c | 6 +-
fs/xfs/xfs_buf.c | 311 ++++------
fs/xfs/xfs_buf.h | 3 +-
fs/xfs/xfs_buf_item.c | 97 ++-
fs/xfs/xfs_discard.c | 6 +-
fs/xfs/xfs_dquot_item.c | 2 +-
fs/xfs/xfs_extent_busy.c | 35 +-
fs/xfs/xfs_extent_busy.h | 7 +-
fs/xfs/xfs_file.c | 70 ++-
fs/xfs/xfs_filestream.c | 2 +-
fs/xfs/xfs_fsmap.c | 80 ++-
fs/xfs/xfs_fsops.c | 24 +-
fs/xfs/xfs_health.c | 15 +-
fs/xfs/xfs_icache.c | 1162 ++++++++++++++++++++----------------
fs/xfs/xfs_icache.h | 58 +-
fs/xfs/xfs_inode.c | 234 ++++----
fs/xfs/xfs_inode.h | 9 +-
fs/xfs/xfs_inode_item.c | 18 +-
fs/xfs/xfs_inode_item.h | 2 +-
fs/xfs/xfs_ioctl.c | 41 +-
fs/xfs/xfs_iops.c | 4 +-
fs/xfs/xfs_iwalk.c | 84 ++-
fs/xfs/xfs_linux.h | 2 +
fs/xfs/xfs_log.c | 273 ++++-----
fs/xfs/xfs_log.h | 5 +-
fs/xfs/xfs_log_cil.c | 138 +++--
fs/xfs/xfs_log_priv.h | 41 +-
fs/xfs/xfs_log_recover.c | 61 +-
fs/xfs/xfs_mount.c | 136 +----
fs/xfs/xfs_mount.h | 110 +---
fs/xfs/xfs_qm.c | 10 +-
fs/xfs/xfs_qm.h | 1 -
fs/xfs/xfs_qm_syscalls.c | 54 +-
fs/xfs/xfs_reflink.c | 13 +-
fs/xfs/xfs_super.c | 10 +-
fs/xfs/xfs_super.h | 1 -
fs/xfs/xfs_symlink.c | 9 +-
fs/xfs/xfs_trace.c | 2 +
fs/xfs/xfs_trace.h | 115 +++-
fs/xfs/xfs_trans.c | 6 +-
fs/xfs/xfs_trans.h | 4 +-
92 files changed, 3855 insertions(+), 3064 deletions(-)


2021-07-02 21:42:20

by Linus Torvalds

[permalink] [raw]
Subject: Re: [GIT PULL] xfs: new code for 5.14

On Fri, Jul 2, 2021 at 1:16 PM Darrick J. Wong <[email protected]> wrote:
>
> Please let me know if anything else strange happens during the merge
> process. The merge commits I made seem stable enough, but as it's the
> first time I've ever accepted a pull request, we'd all be open to
> feedback for improvements for next time.

It looks fine to me.

I *would* suggest editing the merge commit messages a bit when doing
pull requests from other people.

It's by no means a big deal, but it looks a bit odd to see things like

Hi all,

...

Questions, comment and feedback appreciated!

Thanks all!
Allison

in the merge message. All that text made a ton of sense in Allison's
pull request, but as you actually then merge it, it doesn't make a lot
of sense in the commit log, if you see what I mean..

But it's not a problem for this pull request, and I've merged it in my
tree (pending my usual build tests etc, and I don't expect any
issues).

Linus

2021-07-02 22:25:41

by pr-tracker-bot

[permalink] [raw]
Subject: Re: [GIT PULL] xfs: new code for 5.14

The pull request you sent on Fri, 2 Jul 2021 13:16:43 -0700:

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

has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/9f7b640f001f9781e0803fb60e7b3e7f2f1a1757

Thank you!

--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html

2021-07-03 03:00:19

by Darrick J. Wong

[permalink] [raw]
Subject: Re: [GIT PULL] xfs: new code for 5.14

On Fri, Jul 02, 2021 at 02:39:46PM -0700, Linus Torvalds wrote:
> On Fri, Jul 2, 2021 at 1:16 PM Darrick J. Wong <[email protected]> wrote:
> >
> > Please let me know if anything else strange happens during the merge
> > process. The merge commits I made seem stable enough, but as it's the
> > first time I've ever accepted a pull request, we'd all be open to
> > feedback for improvements for next time.
>
> It looks fine to me.
>
> I *would* suggest editing the merge commit messages a bit when doing
> pull requests from other people.
>
> It's by no means a big deal, but it looks a bit odd to see things like
>
> Hi all,
>
> ...
>
> Questions, comment and feedback appreciated!
>
> Thanks all!
> Allison
>
> in the merge message. All that text made a ton of sense in Allison's
> pull request, but as you actually then merge it, it doesn't make a lot
> of sense in the commit log, if you see what I mean..

Yep, got it. I'll strip those out next time, thanks for helping me
figure these things out. :)

--D

>
> But it's not a problem for this pull request, and I've merged it in my
> tree (pending my usual build tests etc, and I don't expect any
> issues).
>
> Linus