Linux 2.6.39 compat, zlib_deflate_workspacesize()

The function zlib_deflate_workspacesize() now take 2 arguments.
This was done to avoid always having to allocate the maximum size
workspace (268K).  The caller can now specific the windowBits and
memLevel compression parameters to get a smaller workspace.

For our purposes we introduce a spl_zlib_deflate_workspacesize()
wrapper which accepts both arguments.  When the two argument
version of zlib_deflate_workspacesize() is available the arguments
are passed through.  When it's not we assume the worst case and
a maximally sized workspace is used.
This commit is contained in:
Brian Behlendorf
2011-04-20 14:22:35 -07:00
parent b1cbc4610c
commit 3dfc591ac4
6 changed files with 198 additions and 2 deletions
+6 -2
View File
@@ -198,10 +198,14 @@ EXPORT_SYMBOL(z_uncompress);
int zlib_init(void)
{
int size;
SENTRY;
size = MAX(spl_zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL),
zlib_inflate_workspacesize());
zlib_workspace_cache = kmem_cache_create("spl_zlib_workspace_cache",
max(zlib_deflate_workspacesize(), zlib_inflate_workspacesize()),
0, NULL, NULL, NULL, NULL, NULL, KMC_VMEM);
size, 0, NULL, NULL, NULL, NULL, NULL, KMC_VMEM);
if (!zlib_workspace_cache)
SRETURN(1);