On Wed, Apr 27, 2022 at 12:22:57PM +1000, 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> > Reviewed-by: Allison Henderson <allison.henderson@xxxxxxxxxx> We'll see what I think about the last patch, but the code changes here look acceptable. Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > --- > 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 3b968b31911b..e1b0e321d604 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 96735f23d12d..032db5269e97 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 b523ce2c775b..a2213b5ee344 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 b269e68407b9..053eb135380c 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 f68e74e46026..d72a5995d33e 100644 > --- a/fs/xfs/xfs_trans.h > +++ b/fs/xfs/xfs_trans.h > @@ -78,6 +78,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); > }; > > /* > -- > 2.35.1 >