aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Sandeen <sandeen@redhat.com>2018-01-25 13:55:01 -0600
committerEric Sandeen <sandeen@redhat.com>2018-01-25 13:55:01 -0600
commita1c5615eecf3ca4bcd7442326c228b349ee2fd79 (patch)
tree64455a2bf24118bd08ec6d47f32180fc2ecdd67f
parent67d72279e8afe56882c4f7453ecb5674fb0b5885 (diff)
downloadxfsprogs-dev-a1c5615eecf3ca4bcd7442326c228b349ee2fd79.tar.gz
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 <sandeen@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
-rw-r--r--libxfs/trans.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/libxfs/trans.c b/libxfs/trans.c
index a602eaa842..f330d4b74b 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;
}