Add a helper to calculate the size of an xfs_efd_log_item structure the specified number of extents. Signed-off-by: Christoph Hellwig <hch@xxxxxx> --- fs/xfs/xfs_extfree_item.c | 10 +++------- fs/xfs/xfs_extfree_item.h | 6 ++++++ fs/xfs/xfs_super.c | 6 ++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c index afd568d426c1f1..a2abdfd3d076bf 100644 --- a/fs/xfs/xfs_extfree_item.c +++ b/fs/xfs/xfs_extfree_item.c @@ -268,15 +268,11 @@ xfs_trans_get_efd( struct xfs_efd_log_item *efdp; ASSERT(nextents > 0); - - if (nextents > XFS_EFD_MAX_FAST_EXTENTS) { - efdp = kmem_zalloc(sizeof(struct xfs_efd_log_item) + - (nextents - 1) * sizeof(struct xfs_extent), - 0); - } else { + if (nextents > XFS_EFD_MAX_FAST_EXTENTS) + efdp = kmem_zalloc(xfs_efd_item_sizeof(nextents), 0); + else efdp = kmem_cache_zalloc(xfs_efd_zone, GFP_KERNEL | __GFP_NOFAIL); - } xfs_log_item_init(tp->t_mountp, &efdp->efd_item, XFS_LI_EFD, &xfs_efd_item_ops); diff --git a/fs/xfs/xfs_extfree_item.h b/fs/xfs/xfs_extfree_item.h index d2577d872de771..3bb62ef525f2e0 100644 --- a/fs/xfs/xfs_extfree_item.h +++ b/fs/xfs/xfs_extfree_item.h @@ -70,6 +70,12 @@ struct xfs_efd_log_item { struct xfs_efd_log_format efd_format; }; +static inline int xfs_efd_item_sizeof(unsigned int nextents) +{ + return sizeof(struct xfs_efd_log_item) + + (nextents - 1) * sizeof(struct xfs_extent); +} + /* * Max number of extents in fast allocation path. */ diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index c93710cb5ce3f0..f7f70438d98703 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -1953,10 +1953,8 @@ xfs_init_zones(void) goto out_destroy_trans_zone; xfs_efd_zone = kmem_cache_create("xfs_efd_item", - (sizeof(struct xfs_efd_log_item) + - (XFS_EFD_MAX_FAST_EXTENTS - 1) * - sizeof(struct xfs_extent)), - 0, 0, NULL); + xfs_efd_item_sizeof(XFS_EFD_MAX_FAST_EXTENTS), + 0, 0, NULL); if (!xfs_efd_zone) goto out_destroy_buf_item_zone; -- 2.30.1