On Tue, 2022-03-15 at 09:06 +1100, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > To apply a whiteout to an intent item when an intent done item is > committed, we need to be able to retrieve the intent item from the > the intent done item. Add a log item op method for doing this, and > wire all the intent done items up to it. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> Looks ok to me Reviewed-by Allison Henderson <allison.henderson@xxxxxxxxxx> > --- > fs/xfs/xfs_bmap_item.c | 8 ++++++++ > fs/xfs/xfs_extfree_item.c | 8 ++++++++ > fs/xfs/xfs_refcount_item.c | 8 ++++++++ > fs/xfs/xfs_rmap_item.c | 8 ++++++++ > fs/xfs/xfs_trans.h | 1 + > 5 files changed, 33 insertions(+) > > diff --git a/fs/xfs/xfs_bmap_item.c b/fs/xfs/xfs_bmap_item.c > index 45dd03272e5d..2e7abfe35644 100644 > --- a/fs/xfs/xfs_bmap_item.c > +++ b/fs/xfs/xfs_bmap_item.c > @@ -201,12 +201,20 @@ xfs_bud_item_release( > kmem_cache_free(xfs_bud_cache, budp); > } > > +static struct xfs_log_item * > +xfs_bud_item_intent( > + struct xfs_log_item *lip) > +{ > + return &BUD_ITEM(lip)->bud_buip->bui_item; > +} > + > static const struct xfs_item_ops xfs_bud_item_ops = { > .flags = XFS_ITEM_RELEASE_WHEN_COMMITTED | > XFS_ITEM_INTENT_DONE, > .iop_size = xfs_bud_item_size, > .iop_format = xfs_bud_item_format, > .iop_release = xfs_bud_item_release, > + .iop_intent = xfs_bud_item_intent, > }; > > static struct xfs_bud_log_item * > diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c > index ed1229cb6807..1d0e5cdc15f9 100644 > --- a/fs/xfs/xfs_extfree_item.c > +++ b/fs/xfs/xfs_extfree_item.c > @@ -306,12 +306,20 @@ xfs_efd_item_release( > xfs_efd_item_free(efdp); > } > > +static struct xfs_log_item * > +xfs_efd_item_intent( > + struct xfs_log_item *lip) > +{ > + return &EFD_ITEM(lip)->efd_efip->efi_item; > +} > + > static const struct xfs_item_ops xfs_efd_item_ops = { > .flags = XFS_ITEM_RELEASE_WHEN_COMMITTED | > XFS_ITEM_INTENT_DONE, > .iop_size = xfs_efd_item_size, > .iop_format = xfs_efd_item_format, > .iop_release = xfs_efd_item_release, > + .iop_intent = xfs_efd_item_intent, > }; > > /* > diff --git a/fs/xfs/xfs_refcount_item.c b/fs/xfs/xfs_refcount_item.c > index 642bcff72a71..ada5793ce550 100644 > --- a/fs/xfs/xfs_refcount_item.c > +++ b/fs/xfs/xfs_refcount_item.c > @@ -207,12 +207,20 @@ xfs_cud_item_release( > kmem_cache_free(xfs_cud_cache, cudp); > } > > +static struct xfs_log_item * > +xfs_cud_item_intent( > + struct xfs_log_item *lip) > +{ > + return &CUD_ITEM(lip)->cud_cuip->cui_item; > +} > + > static const struct xfs_item_ops xfs_cud_item_ops = { > .flags = XFS_ITEM_RELEASE_WHEN_COMMITTED | > XFS_ITEM_INTENT_DONE, > .iop_size = xfs_cud_item_size, > .iop_format = xfs_cud_item_format, > .iop_release = xfs_cud_item_release, > + .iop_intent = xfs_cud_item_intent, > }; > > static struct xfs_cud_log_item * > diff --git a/fs/xfs/xfs_rmap_item.c b/fs/xfs/xfs_rmap_item.c > index 4285b94465d2..6e66e7718902 100644 > --- a/fs/xfs/xfs_rmap_item.c > +++ b/fs/xfs/xfs_rmap_item.c > @@ -230,12 +230,20 @@ xfs_rud_item_release( > kmem_cache_free(xfs_rud_cache, rudp); > } > > +static struct xfs_log_item * > +xfs_rud_item_intent( > + struct xfs_log_item *lip) > +{ > + return &RUD_ITEM(lip)->rud_ruip->rui_item; > +} > + > static const struct xfs_item_ops xfs_rud_item_ops = { > .flags = XFS_ITEM_RELEASE_WHEN_COMMITTED | > XFS_ITEM_INTENT_DONE, > .iop_size = xfs_rud_item_size, > .iop_format = xfs_rud_item_format, > .iop_release = xfs_rud_item_release, > + .iop_intent = xfs_rud_item_intent, > }; > > static struct xfs_rud_log_item * > diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h > index 93cb4be33f7a..6182c97cb8e7 100644 > --- a/fs/xfs/xfs_trans.h > +++ b/fs/xfs/xfs_trans.h > @@ -77,6 +77,7 @@ struct xfs_item_ops { > bool (*iop_match)(struct xfs_log_item *item, uint64_t id); > struct xfs_log_item *(*iop_relog)(struct xfs_log_item *intent, > struct xfs_trans *tp); > + struct xfs_log_item *(*iop_intent)(struct xfs_log_item > *intent_done); > }; > > /*