* paranoia -- account for any weird padding, 64/32-bit alignment, etc.
*/
typedef struct extent_alloc_rec {
- ba_rec_t alloc_rec;
+ struct list_head list;
extent_tree_node_t extents[ALLOC_NUM_EXTS];
} extent_alloc_rec_t;
typedef struct rt_extent_alloc_rec {
- ba_rec_t alloc_rec;
+ struct list_head list;
rt_extent_tree_node_t extents[ALLOC_NUM_EXTS];
} rt_extent_alloc_rec_t;
/*
* list of allocated "blocks" for easy freeing later
*/
-static ba_rec_t *ba_list;
-static ba_rec_t *rt_ba_list;
+static struct list_head ba_list;
+static struct list_head rt_ba_list;
/*
* locks.
do_error(
_("couldn't allocate new extent descriptors.\n"));
- record_allocation(&rec->alloc_rec, ba_list);
+ list_add(&rec->list, &ba_list);
new = &rec->extents[0];
do_error(
_("couldn't allocate new extent descriptors.\n"));
- record_allocation(&rec->alloc_rec, rt_ba_list);
+ list_add(&rec->list, &rt_ba_list);
new = &rec->extents[0];
void
free_rt_dup_extent_tree(xfs_mount_t *mp)
{
+ rt_extent_alloc_rec_t *cur, *tmp;
+
ASSERT(mp->m_sb.sb_rblocks != 0);
- free_allocations(rt_ba_list);
+ list_for_each_entry_safe(cur, tmp, &rt_ba_list, list)
+ free(cur);
+
free(rt_ext_tree_ptr);
- rt_ba_list = NULL;
rt_ext_tree_ptr = NULL;
return;
int i;
xfs_agnumber_t agcount = mp->m_sb.sb_agcount;
- ba_list = NULL;
- rt_ba_list = NULL;
+ list_head_init(&ba_list);
+ list_head_init(&rt_ba_list);
pthread_mutex_init(&ext_flist_lock, NULL);
pthread_mutex_init(&rt_ext_tree_lock, NULL);
pthread_mutex_init(&rt_ext_flist_lock, NULL);
void
incore_ext_teardown(xfs_mount_t *mp)
{
+ extent_alloc_rec_t *cur, *tmp;
xfs_agnumber_t i;
- free_allocations(ba_list);
+ list_for_each_entry_safe(cur, tmp, &ba_list, list)
+ free(cur);
for (i = 0; i < mp->m_sb.sb_agcount; i++) {
free(extent_tree_ptrs[i]);