Message ID | 20220314220631.3093283-7-david@fromorbit.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | xfs: intent whiteouts | expand |
On Tue, 2022-03-15 at 09:06 +1100, Dave Chinner wrote: > From: Dave Chinner <dchinner@redhat.com> > > 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@redhat.com> Looks ok to me Reviewed-by Allison Henderson <allison.henderson@oracle.com> > --- > 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); > }; > > /*
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); }; /*