]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
libxfs: use a memory zone for log items
authorEric Sandeen <sandeen@redhat.com>
Thu, 25 Jan 2018 19:55:01 +0000 (13:55 -0600)
committerEric Sandeen <sandeen@redhat.com>
Thu, 25 Jan 2018 19:55:01 +0000 (13:55 -0600)
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>
libxfs/trans.c

index a602eaa842b33c7c071b1caf76605ad99e5f2b73..f330d4b74b46684b594813234ded40dffb743062 100644 (file)
@@ -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;
 }