]> granicus.if.org Git - zfs/commitdiff
Use vmem_alloc() for nvlists
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 5 Feb 2015 20:43:37 +0000 (12:43 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 10 Feb 2015 19:00:08 +0000 (11:00 -0800)
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 <behlendorf1@llnl.gov>
Closes #3057
Closes #3079
Closes #3081

module/nvpair/nvpair_alloc_spl.c
module/zfs/spa.c
module/zfs/zfs_ioctl.c

index f9055b94f1008d7acd299e341d04e6f81b0d3929..bc377ab662570a4e6fa2fa0acf3b19d4a58cd51f 100644 (file)
 
 #include <sys/nvpair.h>
 #include <sys/kmem.h>
+#include <sys/vmem.h>
 
 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 *
index 55bcf43f884c8b053ba736696ca6ad68a0180099..861a319afdb7c9cf54a24501489a0fb51ee6a685 100644 (file)
@@ -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);
 }
index 5b9c8f17b846002f16f008278d56d15ecce51211..171e08c7aa2c721681494ec5258c4a4d6a8be34e 100644 (file)
@@ -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);