On Thu, Jul 19, 2018 at 09:49:11AM -0400, Brian Foster wrote: > xfs_defer_init() is currently used in two particular situations. The > first and most obvious case is raw initialization of an > xfs_defer_ops struct. The other case is partial reinit of > xfs_defer_ops on reuse due to iteration. > > Most instances of the first case will be replaced by a single init > of a dfops embedded in the transaction. Init calls are still > technically required for the second case because the dfops may have > low space mode enabled or have joined items that need to be reset > before the dfops should be reused. > > Since the current dfops usage expects either a final transaction > commit after xfs_defer_finish() or xfs_defer_init() if dfops is to > be reused, we can shift some of the init logic into > xfs_defer_finish() such that the latter returns with a reinitialized > dfops. This eliminates the second dependency noted above such that a > dfops is immediately ready for reuse after an xfs_defer_finish() > without the need to change any calling code. > > Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx> > --- > fs/xfs/libxfs/xfs_defer.c | 30 ++++++++++++++++++++++++++++-- > 1 file changed, 28 insertions(+), 2 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_defer.c b/fs/xfs/libxfs/xfs_defer.c > index d3466087db16..e6baa27a690b 100644 > --- a/fs/xfs/libxfs/xfs_defer.c > +++ b/fs/xfs/libxfs/xfs_defer.c > @@ -319,6 +319,29 @@ xfs_defer_bjoin( > return -EFSCORRUPTED; > } > > +/* > + * Reset an already used dfops after finish. > + */ > +static void > +xfs_defer_reset( > + struct xfs_defer_ops *dop) > +{ > + int i; > + > + ASSERT(!xfs_defer_has_unfinished_work(dop)); > + dop->dop_low = false; > + for (i = 0; i < XFS_DEFER_OPS_NR_INODES; i++) { > + if (!dop->dop_inodes[i]) > + break; > + dop->dop_inodes[i] = NULL; > + } > + for (i = 0; i < XFS_DEFER_OPS_NR_BUFS; i++) { > + if (!dop->dop_bufs[i]) > + break; > + dop->dop_bufs[i] = NULL; > + } > +} Are these loops really more efficient than just doing memsets of dop_inodes and dop_bufs? Otherwise looks good: Reviewed-by: Christoph Hellwig <hch@xxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html