xfs: broad enablement of deferred agfl frees
Get series with b4
b4 am [email protected]Versions newest first
- v1 Latest24 patches 59 repliesIn review
Patches in v1 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/24 | xfs: cow unwritten conversion uses uninitialized dfopsfs/ | +4 | 7 replies | |
| 2/24 | xfs: rename xfs_trans ->t_agfl_dfops to ->t_dfopsfs/ fs/ fs/ +3 more | +16 | 2 replies | |
| 3/24 | xfs: remove dfops parameter from ifree call stackfs/ fs/ fs/ +1 more | +7 | 2 replies | |
| 4/24 | xfs: remove dfops param from high level dirname callsfs/ fs/ fs/ +1 more | +35 | 4 replies | |
| 5/24 | xfs: use ->t_dfops for recovery of [b|c]ui log itemsfs/ fs/ | +6 | 6 replies | |
| 6/24 | xfs: use ->t_dfops for attr set/remove operationsfs/ fs/ | +9 | 2 replies | |
| 7/24 | xfs: remove dfops param in attr fork add pathfs/ | +8 | 2 replies | |
| 8/24 | xfs: use ->t_dfops in extent split tx and remove paramfs/ | +6 | 2 replies | |
| 9/24 | xfs: replace xfs_da_args->dfops accesses with ->t_dfops and removefs/ fs/ fs/ +4 more | +117 | 2 replies | |
| 10/24 | xfs: use ->t_dfops in dqalloc transactionfs/ | +20 | 3 replies | |
| 11/24 | xfs: use ->t_dfops for all xfs_bmapi_write() callersfs/ fs/ fs/ +2 more | +26 | 3 replies | |
| 12/24 | xfs: remove xfs_bmapi_write() dfops paramfs/ fs/ fs/ +7 more | +20 | 2 replies | |
| 13/24 | xfs: use ->t_dfops for all xfs_bunmapi() callersfs/ fs/ fs/ +1 more | +33 | 3 replies | |
| 14/24 | xfs: remove xfs_bunmapi() dfops paramfs/ fs/ fs/ +6 more | +19 | 2 replies | |
| 15/24 | xfs: remove xfs_bmapi_remap() dfops paramfs/ fs/ | +5 | 2 replies | |
| 16/24 | xfs: remove struct xfs_bmalloca dfops fieldfs/ fs/ fs/ | +17 | 2 replies | |
| 17/24 | xfs: use ->t_dfops for collapse/insert range operationsfs/ fs/ fs/ | +17 | 2 replies | |
| 18/24 | xfs: remove dfops param from internal bmap extent helpersfs/ | +44 | 2 replies | |
| 19/24 | xfs: remove xfs_btree_cur bmbt dfops fieldfs/ fs/ fs/ | +4 | 2 replies | |
| 20/24 | xfs: remove unused btree cursor bc_private.a.dfops fieldfs/ fs/ fs/ +4 more | +9 | 2 replies | |
| 21/24 | xfs: use ->t_dfops for rmap extent swap operationsfs/ | +19 | 3 replies | |
| 22/24 | xfs: use ->t_dfops in cancel cow blocks operationfs/ | +8 | 2 replies | |
| 23/24 | xfs: use ->t_dfops in reflink cow recover pathfs/ | +5 | 2 replies | |
| 24/24 | xfs: refactor dfops init to attach to transactionfs/ fs/ fs/ +11 more | +55 | 2 replies |
Reviews trailers per patch
All 24 patches have a Reviewed-by or Acked-by.
| Patch | Darrick J. Wong | Carlos Maiolino | Christoph Hellwig |
|---|---|---|---|
| 1/24 | R-b R-b | R-b | R-b |
| 2/24 | R-b | R-b | |
| 3/24 | R-b | R-b | |
| 4/24 | R-b | R-b R-b | |
| 5/24 | R-b | R-b R-b | |
| 6/24 | R-b | R-b | |
| 7/24 | R-b | R-b | |
| 8/24 | R-b | R-b | |
| 9/24 | R-b | R-b | |
| 10/24 | R-b | ||
| 11/24 | R-b | R-b | |
| 12/24 | R-b | R-b | |
| 13/24 | R-b | ||
| 14/24 | R-b | R-b | |
| 15/24 | R-b | R-b | |
| 16/24 | R-b | R-b | |
| 17/24 | R-b | R-b | |
| 18/24 | R-b | R-b | |
| 19/24 | R-b | R-b | |
| 20/24 | R-b | R-b | |
| 21/24 | R-b | R-b | |
| 22/24 | R-b | R-b | |
| 23/24 | R-b | R-b | |
| 24/24 | R-b | R-b |
Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 3 reviewers.
Cover letter [PATCH 00/24] xfs: broad enablement of deferred agfl frees
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(-)
Signature · 1 line
2.17.1