From a1c5615eecf3ca4bcd7442326c228b349ee2fd79 Mon Sep 17 00:00:00 2001 From: Eric Sandeen Date: Thu, 25 Jan 2018 13:55:01 -0600 Subject: [PATCH] libxfs: use a memory zone for log items In addition to more closely matching the kernel, this will help us catch any leaks from these allocations. Signed-off-by: Eric Sandeen Reviewed-by: Darrick J. Wong Signed-off-by: Eric Sandeen --- libxfs/trans.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/libxfs/trans.c b/libxfs/trans.c index a602eaa84..f330d4b74 100644 --- a/libxfs/trans.c +++ b/libxfs/trans.c @@ -65,13 +65,7 @@ libxfs_trans_add_item( ASSERT(lip->li_mountp == tp->t_mountp); ASSERT(lip->li_ailp == tp->t_mountp->m_ail); - lidp = calloc(sizeof(struct xfs_log_item_desc), 1); - if (!lidp) { - fprintf(stderr, _("%s: lidp calloc failed (%d bytes): %s\n"), - progname, (int)sizeof(struct xfs_log_item_desc), - strerror(errno)); - exit(1); - } + lidp = kmem_zone_zalloc(xfs_log_item_desc_zone, KM_SLEEP | KM_NOFS); lidp->lid_item = lip; lidp->lid_flags = 0; @@ -80,6 +74,14 @@ libxfs_trans_add_item( lip->li_desc = lidp; } +static void +libxfs_trans_free_item_desc( + struct xfs_log_item_desc *lidp) +{ + list_del_init(&lidp->lid_trans); + kmem_zone_free(xfs_log_item_desc_zone, lidp); +} + /* * Unlink and free the given descriptor. */ @@ -87,8 +89,7 @@ void libxfs_trans_del_item( struct xfs_log_item *lip) { - list_del_init(&lip->li_desc->lid_trans); - free(lip->li_desc); + libxfs_trans_free_item_desc(lip->li_desc); lip->li_desc = NULL; } -- 2.39.5