aboutsummaryrefslogtreecommitdiffstats
path: root/module/zfs/space_map.c
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2016-11-30 16:18:20 -0700
committerGitHub <[email protected]>2016-11-30 16:18:20 -0700
commita3fd9d9e1525d5df18b7f8c2895270689d292ec2 (patch)
treefb38211398d59ccbd9376b2e3aa52924af133255 /module/zfs/space_map.c
parent7657defc48b7c47a8bf0c8f21c78783d293dc5ed (diff)
Convert zio_buf_alloc() consumers
In multiple cases zio_buf_alloc() was used instead of kmem_alloc() or vmem_alloc(). This was often done because the allocations could be large and it was easy to use zfs_buf_alloc() for them. But this isn't ideal for allocations which are small or short lived. In these cases it is better to use kmem_alloc() or vmem_alloc(). If possible we want to avoid the case where we have slabs allocated for kmem caches which are rarely used. Note for small allocations vmem_alloc() will be internally converted to kmem_alloc(). Therefore as long as large allocations are infrequent and short lived the penalty for using vmem_alloc() is small. Reviewed-by: Chunwei Chen <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #5409
Diffstat (limited to 'module/zfs/space_map.c')
-rw-r--r--module/zfs/space_map.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/module/zfs/space_map.c b/module/zfs/space_map.c
index 126fd6bee..87e90f219 100644
--- a/module/zfs/space_map.c
+++ b/module/zfs/space_map.c
@@ -72,7 +72,7 @@ space_map_load(space_map_t *sm, range_tree_t *rt, maptype_t maptype)
}
bufsize = MAX(sm->sm_blksz, SPA_MINBLOCKSIZE);
- entry_map = zio_buf_alloc(bufsize);
+ entry_map = vmem_alloc(bufsize, KM_SLEEP);
mutex_exit(sm->sm_lock);
if (end > bufsize) {
@@ -128,7 +128,7 @@ space_map_load(space_map_t *sm, range_tree_t *rt, maptype_t maptype)
else
range_tree_vacate(rt, NULL, NULL);
- zio_buf_free(entry_map, bufsize);
+ vmem_free(entry_map, bufsize);
return (error);
}
@@ -272,7 +272,7 @@ space_map_write(space_map_t *sm, range_tree_t *rt, maptype_t maptype,
expected_entries = space_map_entries(sm, rt);
- entry_map = zio_buf_alloc(sm->sm_blksz);
+ entry_map = vmem_alloc(sm->sm_blksz, KM_SLEEP);
entry_map_end = entry_map + (sm->sm_blksz / sizeof (uint64_t));
entry = entry_map;
@@ -335,7 +335,7 @@ space_map_write(space_map_t *sm, range_tree_t *rt, maptype_t maptype,
VERIFY3U(range_tree_space(rt), ==, rt_space);
VERIFY3U(range_tree_space(rt), ==, total);
- zio_buf_free(entry_map, sm->sm_blksz);
+ vmem_free(entry_map, sm->sm_blksz);
}
static int