On Sun, 2022-05-15 at 20:32 -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > Initialize and destroy the xattr log item caches in the same places > that > we do all the other log item caches. > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> Ok, looks good Reviewed-by: Allison Henderson <allison.henderson@xxxxxxxxxx> > --- > fs/xfs/libxfs/xfs_attr.c | 36 --------------------------------- > --- > fs/xfs/libxfs/xfs_attr.h | 8 -------- > fs/xfs/libxfs/xfs_defer.c | 8 -------- > fs/xfs/xfs_attr_item.c | 3 +++ > fs/xfs/xfs_attr_item.h | 3 +++ > fs/xfs/xfs_super.c | 19 +++++++++++++++++++ > 6 files changed, 25 insertions(+), 52 deletions(-) > > > diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c > index 687e1b0c49f9..4056edf9f06e 100644 > --- a/fs/xfs/libxfs/xfs_attr.c > +++ b/fs/xfs/libxfs/xfs_attr.c > @@ -27,8 +27,6 @@ > #include "xfs_attr_item.h" > #include "xfs_log.h" > > -struct kmem_cache *xfs_attri_cache; > -struct kmem_cache *xfs_attrd_cache; > struct kmem_cache *xfs_attr_intent_cache; > > /* > @@ -1113,40 +1111,6 @@ xfs_attr_set( > goto out_unlock; > } > > -int __init > -xfs_attri_init_cache(void) > -{ > - xfs_attri_cache = kmem_cache_create("xfs_attri", > - sizeof(struct > xfs_attri_log_item), > - 0, 0, NULL); > - > - return xfs_attri_cache != NULL ? 0 : -ENOMEM; > -} > - > -void > -xfs_attri_destroy_cache(void) > -{ > - kmem_cache_destroy(xfs_attri_cache); > - xfs_attri_cache = NULL; > -} > - > -int __init > -xfs_attrd_init_cache(void) > -{ > - xfs_attrd_cache = kmem_cache_create("xfs_attrd", > - sizeof(struct > xfs_attrd_log_item), > - 0, 0, NULL); > - > - return xfs_attrd_cache != NULL ? 0 : -ENOMEM; > -} > - > -void > -xfs_attrd_destroy_cache(void) > -{ > - kmem_cache_destroy(xfs_attrd_cache); > - xfs_attrd_cache = NULL; > -} > - > /*================================================================== > ====== > * External routines when attribute list is inside the inode > > *==================================================================== > ====*/ > diff --git a/fs/xfs/libxfs/xfs_attr.h b/fs/xfs/libxfs/xfs_attr.h > index f0b93515c1e8..22a2f288c1c0 100644 > --- a/fs/xfs/libxfs/xfs_attr.h > +++ b/fs/xfs/libxfs/xfs_attr.h > @@ -558,14 +558,6 @@ int xfs_attr_calc_size(struct xfs_da_args *args, > int *local); > void xfs_init_attr_trans(struct xfs_da_args *args, struct > xfs_trans_res *tres, > unsigned int *total); > > -extern struct kmem_cache *xfs_attri_cache; > -extern struct kmem_cache *xfs_attrd_cache; > - > -int __init xfs_attri_init_cache(void); > -void xfs_attri_destroy_cache(void); > -int __init xfs_attrd_init_cache(void); > -void xfs_attrd_destroy_cache(void); > - > /* > * Check to see if the attr should be upgraded from non-existent or > shortform to > * single-leaf-block attribute list. > diff --git a/fs/xfs/libxfs/xfs_defer.c b/fs/xfs/libxfs/xfs_defer.c > index ed65f7e5a9c7..ace229c1d251 100644 > --- a/fs/xfs/libxfs/xfs_defer.c > +++ b/fs/xfs/libxfs/xfs_defer.c > @@ -871,12 +871,6 @@ xfs_defer_init_item_caches(void) > if (error) > goto err; > error = xfs_extfree_intent_init_cache(); > - if (error) > - goto err; > - error = xfs_attri_init_cache(); > - if (error) > - goto err; > - error = xfs_attrd_init_cache(); > if (error) > goto err; > error = xfs_attr_intent_init_cache(); > @@ -893,8 +887,6 @@ void > xfs_defer_destroy_item_caches(void) > { > xfs_attr_intent_destroy_cache(); > - xfs_attri_destroy_cache(); > - xfs_attrd_destroy_cache(); > xfs_extfree_intent_destroy_cache(); > xfs_bmap_intent_destroy_cache(); > xfs_refcount_intent_destroy_cache(); > diff --git a/fs/xfs/xfs_attr_item.c b/fs/xfs/xfs_attr_item.c > index 89cabd792b7d..1747127434b8 100644 > --- a/fs/xfs/xfs_attr_item.c > +++ b/fs/xfs/xfs_attr_item.c > @@ -29,6 +29,9 @@ > #include "xfs_log_priv.h" > #include "xfs_log_recover.h" > > +struct kmem_cache *xfs_attri_cache; > +struct kmem_cache *xfs_attrd_cache; > + > static const struct xfs_item_ops xfs_attri_item_ops; > static const struct xfs_item_ops xfs_attrd_item_ops; > static struct xfs_attrd_log_item *xfs_trans_get_attrd(struct > xfs_trans *tp, > diff --git a/fs/xfs/xfs_attr_item.h b/fs/xfs/xfs_attr_item.h > index c3b779f82adb..cc2fbc9d58a7 100644 > --- a/fs/xfs/xfs_attr_item.h > +++ b/fs/xfs/xfs_attr_item.h > @@ -43,4 +43,7 @@ struct xfs_attrd_log_item { > struct xfs_attrd_log_format attrd_format; > }; > > +extern struct kmem_cache *xfs_attri_cache; > +extern struct kmem_cache *xfs_attrd_cache; > + > #endif /* __XFS_ATTR_ITEM_H__ */ > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index 93e43e1a2863..51ce127a0cc6 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -38,6 +38,7 @@ > #include "xfs_pwork.h" > #include "xfs_ag.h" > #include "xfs_defer.h" > +#include "xfs_attr_item.h" > > #include <linux/magic.h> > #include <linux/fs_context.h> > @@ -2083,8 +2084,24 @@ xfs_init_caches(void) > if (!xfs_bui_cache) > goto out_destroy_bud_cache; > > + xfs_attrd_cache = kmem_cache_create("xfs_attrd_item", > + sizeof(struct > xfs_attrd_log_item), > + 0, 0, NULL); > + if (!xfs_attrd_cache) > + goto out_destroy_bui_cache; > + > + xfs_attri_cache = kmem_cache_create("xfs_attri_item", > + sizeof(struct > xfs_attri_log_item), > + 0, 0, NULL); > + if (!xfs_attri_cache) > + goto out_destroy_attrd_cache; > + > return 0; > > + out_destroy_attrd_cache: > + kmem_cache_destroy(xfs_attrd_cache); > + out_destroy_bui_cache: > + kmem_cache_destroy(xfs_bui_cache); > out_destroy_bud_cache: > kmem_cache_destroy(xfs_bud_cache); > out_destroy_cui_cache: > @@ -2131,6 +2148,8 @@ xfs_destroy_caches(void) > * destroy caches. > */ > rcu_barrier(); > + kmem_cache_destroy(xfs_attri_cache); > + kmem_cache_destroy(xfs_attrd_cache); > kmem_cache_destroy(xfs_bui_cache); > kmem_cache_destroy(xfs_bud_cache); > kmem_cache_destroy(xfs_cui_cache); >