diff options
author | Brian Behlendorf <[email protected]> | 2016-11-30 16:18:20 -0700 |
---|---|---|
committer | GitHub <[email protected]> | 2016-11-30 16:18:20 -0700 |
commit | a3fd9d9e1525d5df18b7f8c2895270689d292ec2 (patch) | |
tree | fb38211398d59ccbd9376b2e3aa52924af133255 /module/zfs/space_map.c | |
parent | 7657defc48b7c47a8bf0c8f21c78783d293dc5ed (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.c | 8 |
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 |