]> granicus.if.org Git - zfs/commitdiff
Use vmem_alloc() for zfs_ioc_pool_get_history()
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 6 May 2011 16:59:52 +0000 (09:59 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 6 May 2011 16:59:52 +0000 (09:59 -0700)
The default buffer size when requesting history is 128k.  This
is far to large for a kmem_alloc() so instead use the slower
vmem_alloc().  This path has no performance concerns and the
buffer is immediately free'd after its contents are copied to
the user space buffer.

module/zfs/zfs_ioctl.c

index edfda7656adbc6ea1e6adb17409d8b72ab520f3c..cb423e8b89ec387520fb5aff326b2555bc79c65f 100644 (file)
@@ -1441,7 +1441,7 @@ zfs_ioc_pool_get_history(zfs_cmd_t *zc)
                return (ENOTSUP);
        }
 
-       hist_buf = kmem_alloc(size, KM_SLEEP);
+       hist_buf = vmem_alloc(size, KM_SLEEP);
        if ((error = spa_history_get(spa, &zc->zc_history_offset,
            &zc->zc_history_len, hist_buf)) == 0) {
                error = ddi_copyout(hist_buf,
@@ -1450,7 +1450,7 @@ zfs_ioc_pool_get_history(zfs_cmd_t *zc)
        }
 
        spa_close(spa, FTAG);
-       kmem_free(hist_buf, size);
+       vmem_free(hist_buf, size);
        return (error);
 }