diff options
author | Brian Behlendorf <[email protected]> | 2012-09-07 14:28:07 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2012-09-07 14:36:26 -0700 |
commit | 95331f4437d57f0d0a719d38355159b90a52f40d (patch) | |
tree | bc5dcab56c1c83d1e160e0539f545da37c37deff | |
parent | cb5c2acebb86da5b50f099b39209d22845eda8c7 (diff) |
Set KMC_NOEMERGENCY for zlib workspaces
The workspace required by zlib to perform compression is roughly
512MB (order-7). These allocations are so large that we should
never attempt to directly kmalloc an emergency object for them.
It is far preferable to asynchronously vmalloc an additional slab
in case it's needed. Then simply block waiting for an existing
object to be released or for the new slab to be allocated.
This can be accomplished by disabling emergency slab objects by
passing the KMC_NOEMERGENCY flag at slab creation time.
Signed-off-by: Brian Behlendorf <[email protected]>
zfsonlinux/zfs#917
-rw-r--r-- | module/spl/spl-zlib.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/module/spl/spl-zlib.c b/module/spl/spl-zlib.c index 7bed00ca4..4f88cb4e0 100644 --- a/module/spl/spl-zlib.c +++ b/module/spl/spl-zlib.c @@ -205,8 +205,10 @@ spl_zlib_init(void) size = MAX(spl_zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL), zlib_inflate_workspacesize()); - zlib_workspace_cache = kmem_cache_create("spl_zlib_workspace_cache", - size, 0, NULL, NULL, NULL, NULL, NULL, KMC_VMEM); + zlib_workspace_cache = kmem_cache_create( + "spl_zlib_workspace_cache", + size, 0, NULL, NULL, NULL, NULL, NULL, + KMC_VMEM | KMC_NOEMERGENCY); if (!zlib_workspace_cache) SRETURN(1); |