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>
extern kmem_zone_t *xfs_da_state_zone;
extern kmem_zone_t *xfs_btree_cur_zone;
extern kmem_zone_t *xfs_bmap_free_item_zone;
extern kmem_zone_t *xfs_da_state_zone;
extern kmem_zone_t *xfs_btree_cur_zone;
extern kmem_zone_t *xfs_bmap_free_item_zone;
+ extern kmem_zone_t *xfs_trans_zone;
extern kmem_zone_t *xfs_log_item_desc_zone;
extern void xfs_dir_startup();
extern kmem_zone_t *xfs_log_item_desc_zone;
extern void xfs_dir_startup();
kmem_free(xfs_da_state_zone);
kmem_free(xfs_btree_cur_zone);
kmem_free(xfs_bmap_free_item_zone);
kmem_free(xfs_da_state_zone);
kmem_free(xfs_btree_cur_zone);
kmem_free(xfs_bmap_free_item_zone);
+ kmem_free(xfs_trans_zone);
kmem_free(xfs_log_item_desc_zone);
return;
}
kmem_free(xfs_log_item_desc_zone);
return;
}
xfs_bmap_free_item_zone = kmem_zone_init(
sizeof(struct xfs_extent_free_item),
"xfs_bmap_free_item");
xfs_bmap_free_item_zone = kmem_zone_init(
sizeof(struct xfs_extent_free_item),
"xfs_bmap_free_item");
+ xfs_trans_zone = kmem_zone_init(
+ sizeof(struct xfs_trans), "xfs_trans");
xfs_log_item_desc_zone = kmem_zone_init(
sizeof(struct xfs_log_item_desc), "xfs_log_item_desc");
xfs_dir_startup();
xfs_log_item_desc_zone = kmem_zone_init(
sizeof(struct xfs_log_item_desc), "xfs_log_item_desc");
xfs_dir_startup();
* Simple transaction interface
*/
* Simple transaction interface
*/
+kmem_zone_t *xfs_trans_zone;
kmem_zone_t *xfs_log_item_desc_zone;
/*
kmem_zone_t *xfs_log_item_desc_zone;
/*
+/*
+ * Free the transaction structure. If there is more clean up
+ * to do when the structure is freed, add it here.
+ */
+static void
+xfs_trans_free(
+ struct xfs_trans *tp)
+{
+ kmem_zone_free(xfs_trans_zone, tp);
+}
+
int
libxfs_trans_alloc(
struct xfs_mount *mp,
int
libxfs_trans_alloc(
struct xfs_mount *mp,
- if ((ptr = calloc(sizeof(xfs_trans_t), 1)) == NULL) {
- fprintf(stderr, _("%s: xact calloc failed (%d bytes): %s\n"),
- progname, (int)sizeof(xfs_trans_t), strerror(errno));
- exit(1);
- }
+ ptr = kmem_zone_zalloc(xfs_trans_zone,
+ (flags & XFS_TRANS_NOFS) ? KM_NOFS : KM_SLEEP);
ptr->t_mountp = mp;
ptr->t_blk_res = blocks;
INIT_LIST_HEAD(&ptr->t_items);
ptr->t_mountp = mp;
ptr->t_blk_res = blocks;
INIT_LIST_HEAD(&ptr->t_items);
#endif
if (tp != NULL) {
xfs_trans_free_items(tp);
#endif
if (tp != NULL) {
xfs_trans_free_items(tp);
}
#ifdef XACT_DEBUG
fprintf(stderr, "## cancelled transaction %p\n", otp);
}
#ifdef XACT_DEBUG
fprintf(stderr, "## cancelled transaction %p\n", otp);
fprintf(stderr, "committed clean transaction %p\n", tp);
#endif
xfs_trans_free_items(tp);
fprintf(stderr, "committed clean transaction %p\n", tp);
#endif
xfs_trans_free_items(tp);
trans_committed(tp);
/* That's it for the transaction structure. Free it. */
trans_committed(tp);
/* That's it for the transaction structure. Free it. */