Skip to content

Commit

Permalink
Make spl_kmem_cache size check consistent
Browse files Browse the repository at this point in the history
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 <behlendorf1@llnl.gov>
Signed-off-by: Youzhong Yang <yyang@mathworks.com>
Closes openzfs#15757
  • Loading branch information
youzhongyang authored and lundman committed Mar 13, 2024
1 parent d0ab899 commit cfadd8d
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions module/os/linux/spl/spl-kmem-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit cfadd8d

Please sign in to comment.