aboutsummaryrefslogtreecommitdiffstats
path: root/module
diff options
context:
space:
mode:
authoryouzhongyang <[email protected]>2024-01-16 16:30:58 -0500
committerBrian Behlendorf <[email protected]>2024-01-29 14:53:29 -0800
commit6b64acc157ec713f1e3d0b1980a528e874341e52 (patch)
treebfdad80db162098b7dbe868749ea5a7ae6c9c09a /module
parenta2e71db66434ea27a57e3add5fbda35ecd0722d6 (diff)
Make spl_kmem_cache size check consistent
On Linux x86_64, kmem cache can have size up to 4M, however increasing spl_kmem_cache_slab_limit can lead to crash due to the size check inconsistency. Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Youzhong Yang <[email protected]> Closes #15757
Diffstat (limited to 'module')
-rw-r--r--module/os/linux/spl/spl-kmem-cache.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/module/os/linux/spl/spl-kmem-cache.c b/module/os/linux/spl/spl-kmem-cache.c
index a2920c746..4b1508171 100644
--- a/module/os/linux/spl/spl-kmem-cache.c
+++ b/module/os/linux/spl/spl-kmem-cache.c
@@ -91,7 +91,8 @@ MODULE_PARM_DESC(spl_kmem_cache_max_size, "Maximum size of slab in MB");
* of 16K was determined to be optimal for architectures using 4K pages and
* to also work well on architecutres using larger 64K page sizes.
*/
-static unsigned int spl_kmem_cache_slab_limit = 16384;
+static unsigned int spl_kmem_cache_slab_limit =
+ SPL_MAX_KMEM_ORDER_NR_PAGES * PAGE_SIZE;
module_param(spl_kmem_cache_slab_limit, uint, 0644);
MODULE_PARM_DESC(spl_kmem_cache_slab_limit,
"Objects less than N bytes use the Linux slab");
@@ -783,7 +784,7 @@ spl_kmem_cache_create(const char *name, size_t size, size_t align,
} else {
unsigned long slabflags = 0;
- if (size > (SPL_MAX_KMEM_ORDER_NR_PAGES * PAGE_SIZE))
+ if (size > spl_kmem_cache_slab_limit)
goto out;
#if defined(SLAB_USERCOPY)