From: Brian Behlendorf Date: Thu, 5 Feb 2015 20:43:37 +0000 (-0800) Subject: Use vmem_alloc() for nvlists X-Git-Tag: zfs-0.6.4~55 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=77aef6f;p=zfs Use vmem_alloc() for nvlists Several of the nvlist functions may perform allocations larger than the 32k warning threshold. Convert them to use vmem_alloc() so the best allocator is used. Commit efcd79a retired KM_NODEBUG which was used to suppress large allocation warnings. Concurrently the large allocation warning threshold was increased from 8k to 32k. The goal was to identify the remaining locations, such as this one, where the allocation can be larger than 32k. This patch is expected fine tuning resulting for the kmem-rework changes, see commit 6e9710f. Signed-off-by: Brian Behlendorf Closes #3057 Closes #3079 Closes #3081 --- diff --git a/module/nvpair/nvpair_alloc_spl.c b/module/nvpair/nvpair_alloc_spl.c index f9055b94f..bc377ab66 100644 --- a/module/nvpair/nvpair_alloc_spl.c +++ b/module/nvpair/nvpair_alloc_spl.c @@ -26,17 +26,18 @@ #include #include +#include static void * nv_alloc_sleep_spl(nv_alloc_t *nva, size_t size) { - return (kmem_alloc(size, KM_SLEEP)); + return (vmem_alloc(size, KM_SLEEP)); } static void * nv_alloc_pushpage_spl(nv_alloc_t *nva, size_t size) { - return (kmem_alloc(size, KM_PUSHPAGE)); + return (vmem_alloc(size, KM_PUSHPAGE)); } static void * diff --git a/module/zfs/spa.c b/module/zfs/spa.c index 55bcf43f8..861a319af 100644 --- a/module/zfs/spa.c +++ b/module/zfs/spa.c @@ -1586,12 +1586,12 @@ load_nvlist(spa_t *spa, uint64_t obj, nvlist_t **value) nvsize = *(uint64_t *)db->db_data; dmu_buf_rele(db, FTAG); - packed = kmem_alloc(nvsize, KM_SLEEP); + packed = vmem_alloc(nvsize, KM_SLEEP); error = dmu_read(spa->spa_meta_objset, obj, 0, nvsize, packed, DMU_READ_PREFETCH); if (error == 0) error = nvlist_unpack(packed, nvsize, value, 0); - kmem_free(packed, nvsize); + vmem_free(packed, nvsize); return (error); } diff --git a/module/zfs/zfs_ioctl.c b/module/zfs/zfs_ioctl.c index 5b9c8f17b..171e08c7a 100644 --- a/module/zfs/zfs_ioctl.c +++ b/module/zfs/zfs_ioctl.c @@ -1328,20 +1328,20 @@ get_nvlist(uint64_t nvl, uint64_t size, int iflag, nvlist_t **nvp) if (size == 0) return (SET_ERROR(EINVAL)); - packed = kmem_alloc(size, KM_SLEEP); + packed = vmem_alloc(size, KM_SLEEP); if ((error = ddi_copyin((void *)(uintptr_t)nvl, packed, size, iflag)) != 0) { - kmem_free(packed, size); + vmem_free(packed, size); return (error); } if ((error = nvlist_unpack(packed, size, &list, 0)) != 0) { - kmem_free(packed, size); + vmem_free(packed, size); return (error); } - kmem_free(packed, size); + vmem_free(packed, size); *nvp = list; return (0);