From: Brian Foster <bfoster@redhat.com>
To: linux-xfs@vger.kernel.org
Subject: [PATCH 00/24] xfs: broad enablement of deferred agfl frees
Date: Thu, 28 Jun 2018 12:36:12 -0400 [thread overview]
Message-ID: <20180628163636.52564-1-bfoster@redhat.com> (raw)
Hi all,
Here's the next wave of dfops/xfs_trans related cleanups. This was split
off the original series that introduced ->t_agfl_dfops to separate
fixing the log reservation problems in those particular codepaths from
broader cleanups and generalization of deferred agfl block frees.
The purpose of this series is to 1.) enable deferred AGFL frees for the
broader codebase (wherever a dfops is already used) and 2.) clean up the
various places dfops is carried through on the stack or via interface
structures as the transaction reference is populated.
This work does expose a few warts with how dfops are used in relation to
transactions. For example, log recovery uses a dfops as a primary
structure and transactions are allocated/committed further down the
callchain. In that case, we don't want the transaction to commit the
caller's dfops. A few other places receive a transaction and then
locally init/finish a dfops on the stack. We have to be careful in these
places to not return a transaction to the caller with a dfops reference
that points to freed or reused stack memory by the time the tx is
committed.
I think these issues can be mostly resolved by the end goal of a
combined xfs_trans/xfs_defer_ops structure. Boilerplate code that
allocates a transaction, inits a dfops, finishes a dfops and commits the
transaction can then reduce to allocating and committing the transaction
(where the former and latter respectively init/finish an internal
dfops). There are other patterns and issues to consider, however, so
that will be a matter for a subsequent patch series. (I'm actually
thinking of cleaning up all of the firstblock stuff as a next step in
that direction.)
In this series: Patch 1 has been previously posted/reviewed. It is
included just as a dependency. Patch 2 renames ->t_agfl_dfops back to
->t_dfops for general purpose use. Patches 3-4 reintroduce some cleanups
dropped from the original series (where ->t_dfops is already used).
Patches 5-23 enable the use of ->t_dfops for transactions in various
subsystems, remove any subsequently unnecessary stack/data structure
dfops references and repeat until pretty much every transaction has a
dfops reference. Patch 24 refactors xfs_defer_init() to do the
transaction association, cleaning up all of the manual assignments added
by the previous patches.
I moved the final patch from the beginning to the end because it seemed
controversial in the previous posting, for whatever reason. This order
more explicitly documents the associated cleanup. Personally, I think
the patch should be a requirement for the broad use of ->t_dfops
implemented in this series, otherwise it's not clear to the developer
that an association needs to be made with the transaction in many
codepaths.
Finally, this has so far survived a couple rounds of xfstests with and
without rmapbt and reflink enabled. Further testing is ongoing.
Thoughts, reviews, flames appreciated.
Brian
Brian Foster (24):
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
fs/xfs/libxfs/xfs_alloc.c | 4 +-
fs/xfs/libxfs/xfs_attr.c | 116 ++++++++++---------
fs/xfs/libxfs/xfs_attr_leaf.c | 24 ++--
fs/xfs/libxfs/xfs_attr_remote.c | 22 ++--
fs/xfs/libxfs/xfs_bmap.c | 178 +++++++++++++----------------
fs/xfs/libxfs/xfs_bmap.h | 17 +--
fs/xfs/libxfs/xfs_bmap_btree.c | 9 +-
fs/xfs/libxfs/xfs_btree.h | 2 -
fs/xfs/libxfs/xfs_da_btree.c | 19 ++-
fs/xfs/libxfs/xfs_da_btree.h | 1 -
fs/xfs/libxfs/xfs_defer.c | 17 ++-
fs/xfs/libxfs/xfs_defer.h | 3 +-
fs/xfs/libxfs/xfs_dir2.c | 75 ++++++------
fs/xfs/libxfs/xfs_dir2.h | 9 +-
fs/xfs/libxfs/xfs_ialloc.c | 6 +-
fs/xfs/libxfs/xfs_ialloc.h | 1 -
fs/xfs/libxfs/xfs_refcount.c | 14 +--
fs/xfs/libxfs/xfs_refcount_btree.c | 7 +-
fs/xfs/libxfs/xfs_refcount_btree.h | 4 +-
fs/xfs/scrub/common.c | 2 +-
fs/xfs/xfs_bmap_item.c | 3 +
fs/xfs/xfs_bmap_util.c | 63 +++++-----
fs/xfs/xfs_dquot.c | 33 +++---
fs/xfs/xfs_filestream.c | 3 +-
fs/xfs/xfs_fsmap.c | 2 +-
fs/xfs/xfs_inode.c | 87 +++++++-------
fs/xfs/xfs_inode.h | 3 +-
fs/xfs/xfs_iomap.c | 25 ++--
fs/xfs/xfs_log_recover.c | 2 +-
fs/xfs/xfs_refcount_item.c | 3 +
fs/xfs/xfs_reflink.c | 68 ++++++-----
fs/xfs/xfs_rtalloc.c | 8 +-
fs/xfs/xfs_symlink.c | 22 ++--
fs/xfs/xfs_trans.c | 6 +-
fs/xfs/xfs_trans.h | 2 +-
35 files changed, 415 insertions(+), 445 deletions(-)
--
2.17.1
next reply other threads:[~2018-06-28 16:36 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-28 16:36 Brian Foster [this message]
2018-06-28 16:36 ` [PATCH 01/24] xfs: cow unwritten conversion uses uninitialized dfops Brian Foster
2018-07-02 13:43 ` Christoph Hellwig
2018-07-02 17:32 ` Brian Foster
2018-07-03 14:59 ` Darrick J. Wong
2018-07-03 15:10 ` Brian Foster
2018-07-03 15:21 ` Darrick J. Wong
2018-07-03 16:14 ` Brian Foster
2018-07-03 16:35 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 02/24] xfs: rename xfs_trans ->t_agfl_dfops to ->t_dfops Brian Foster
2018-07-02 13:43 ` Christoph Hellwig
2018-07-03 15:36 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 03/24] xfs: remove dfops parameter from ifree call stack Brian Foster
2018-07-02 13:43 ` Christoph Hellwig
2018-07-03 15:36 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 04/24] xfs: remove dfops param from high level dirname calls Brian Foster
2018-07-02 13:45 ` Christoph Hellwig
2018-07-02 17:32 ` Brian Foster
2018-07-02 17:37 ` [PATCH v2] " Brian Foster
2018-07-03 15:19 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 05/24] xfs: use ->t_dfops for recovery of [b|c]ui log items Brian Foster
2018-07-02 13:45 ` Christoph Hellwig
2018-07-02 17:33 ` Brian Foster
2018-07-02 17:38 ` [PATCH v2] " Brian Foster
2018-07-03 15:15 ` Darrick J. Wong
2018-07-03 16:11 ` Brian Foster
2018-07-03 16:17 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 06/24] xfs: use ->t_dfops for attr set/remove operations Brian Foster
2018-07-02 13:46 ` Christoph Hellwig
2018-07-03 20:26 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 07/24] xfs: remove dfops param in attr fork add path Brian Foster
2018-07-02 13:47 ` Christoph Hellwig
2018-07-03 20:27 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 08/24] xfs: use ->t_dfops in extent split tx and remove param Brian Foster
2018-07-02 13:48 ` Christoph Hellwig
2018-07-03 20:30 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 09/24] xfs: replace xfs_da_args->dfops accesses with ->t_dfops and remove Brian Foster
2018-07-02 13:48 ` Christoph Hellwig
2018-07-03 20:38 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 10/24] xfs: use ->t_dfops in dqalloc transaction Brian Foster
2018-07-02 13:49 ` Christoph Hellwig
2018-07-03 19:59 ` Darrick J. Wong
2018-07-03 20:47 ` Brian Foster
2018-06-28 16:36 ` [PATCH 11/24] xfs: use ->t_dfops for all xfs_bmapi_write() callers Brian Foster
2018-07-02 13:49 ` Christoph Hellwig
2018-07-03 20:42 ` Darrick J. Wong
2018-07-03 20:48 ` Brian Foster
2018-06-28 16:36 ` [PATCH 12/24] xfs: remove xfs_bmapi_write() dfops param Brian Foster
2018-07-02 13:50 ` Christoph Hellwig
2018-07-03 20:43 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 13/24] xfs: use ->t_dfops for all xfs_bunmapi() callers Brian Foster
2018-07-02 13:51 ` Christoph Hellwig
2018-07-03 20:55 ` Darrick J. Wong
2018-07-03 21:16 ` Brian Foster
2018-06-28 16:36 ` [PATCH 14/24] xfs: remove xfs_bunmapi() dfops param Brian Foster
2018-07-02 13:52 ` Christoph Hellwig
2018-07-03 20:59 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 15/24] xfs: remove xfs_bmapi_remap() " Brian Foster
2018-07-02 13:52 ` Christoph Hellwig
2018-07-03 21:02 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 16/24] xfs: remove struct xfs_bmalloca dfops field Brian Foster
2018-07-02 13:52 ` Christoph Hellwig
2018-07-03 21:02 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 17/24] xfs: use ->t_dfops for collapse/insert range operations Brian Foster
2018-07-02 13:53 ` Christoph Hellwig
2018-07-03 21:03 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 18/24] xfs: remove dfops param from internal bmap extent helpers Brian Foster
2018-07-02 13:53 ` Christoph Hellwig
2018-07-03 21:07 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 19/24] xfs: remove xfs_btree_cur bmbt dfops field Brian Foster
2018-07-02 13:53 ` Christoph Hellwig
2018-07-03 21:07 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 20/24] xfs: remove unused btree cursor bc_private.a.dfops field Brian Foster
2018-07-02 13:54 ` Christoph Hellwig
2018-07-03 21:09 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 21/24] xfs: use ->t_dfops for rmap extent swap operations Brian Foster
2018-07-02 13:54 ` Christoph Hellwig
2018-07-03 21:22 ` Darrick J. Wong
2018-07-03 21:56 ` Brian Foster
2018-06-28 16:36 ` [PATCH 22/24] xfs: use ->t_dfops in cancel cow blocks operation Brian Foster
2018-07-02 13:55 ` Christoph Hellwig
2018-07-03 21:25 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 23/24] xfs: use ->t_dfops in reflink cow recover path Brian Foster
2018-07-02 13:55 ` Christoph Hellwig
2018-07-03 21:25 ` Darrick J. Wong
2018-06-28 16:36 ` [PATCH 24/24] xfs: refactor dfops init to attach to transaction Brian Foster
2018-07-02 13:55 ` Christoph Hellwig
2018-07-03 21:26 ` Darrick J. Wong
2018-07-02 14:51 ` [PATCH 00/24] xfs: broad enablement of deferred agfl frees Christoph Hellwig
2018-07-02 17:40 ` Brian Foster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180628163636.52564-1-bfoster@redhat.com \
--to=bfoster@redhat.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).