diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2024-11-10 09:04:27 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2024-11-10 09:04:27 -0800 | 
| commit | 28e43197c4460e08b55554c05998d6de9da7d0b6 (patch) | |
| tree | cb4499e79038a1c4cf942350c44f4c1259889e1b /lib/objpool.c | |
| parent | a558cc34936b48909c0c54f7efac8b6a2c1120a4 (diff) | |
| parent | c289f4de8e479251b64988839fd0e87f246e03a2 (diff) | |
Merge tag 'mm-hotfixes-stable-2024-11-09-22-40' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
Pull misc fixes from Andrew Morton:
 "20 hotfixes, 14 of which are cc:stable.
  Three affect DAMON. Lorenzo's five-patch series to address the
  mmap_region error handling is here also.
  Apart from that, various singletons"
* tag 'mm-hotfixes-stable-2024-11-09-22-40' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm:
  mailmap: add entry for Thorsten Blum
  ocfs2: remove entry once instead of null-ptr-dereference in ocfs2_xa_remove()
  signal: restore the override_rlimit logic
  fs/proc: fix compile warning about variable 'vmcore_mmap_ops'
  ucounts: fix counter leak in inc_rlimit_get_ucounts()
  selftests: hugetlb_dio: check for initial conditions to skip in the start
  mm: fix docs for the kernel parameter ``thp_anon=``
  mm/damon/core: avoid overflow in damon_feed_loop_next_input()
  mm/damon/core: handle zero schemes apply interval
  mm/damon/core: handle zero {aggregation,ops_update} intervals
  mm/mlock: set the correct prev on failure
  objpool: fix to make percpu slot allocation more robust
  mm/page_alloc: keep track of free highatomic
  mm: resolve faulty mmap_region() error path behaviour
  mm: refactor arch_calc_vm_flag_bits() and arm64 MTE handling
  mm: refactor map_deny_write_exec()
  mm: unconditionally close VMAs on error
  mm: avoid unsafe VMA hook invocation when error arises on mmap hook
  mm/thp: fix deferred split unqueue naming and locking
  mm/thp: fix deferred split queue not partially_mapped
Diffstat (limited to 'lib/objpool.c')
| -rw-r--r-- | lib/objpool.c | 18 | 
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/objpool.c b/lib/objpool.c index fd108fe0d095..b998b720c732 100644 --- a/lib/objpool.c +++ b/lib/objpool.c @@ -74,15 +74,21 @@ objpool_init_percpu_slots(struct objpool_head *pool, int nr_objs,  		 * warm caches and TLB hits. in default vmalloc is used to  		 * reduce the pressure of kernel slab system. as we know,  		 * mimimal size of vmalloc is one page since vmalloc would -		 * always align the requested size to page size +		 * always align the requested size to page size. +		 * but if vmalloc fails or it is not available (e.g. GFP_ATOMIC) +		 * allocate percpu slot with kmalloc.  		 */ -		if ((pool->gfp & GFP_ATOMIC) == GFP_ATOMIC) -			slot = kmalloc_node(size, pool->gfp, cpu_to_node(i)); -		else +		slot = NULL; + +		if ((pool->gfp & (GFP_ATOMIC | GFP_KERNEL)) != GFP_ATOMIC)  			slot = __vmalloc_node(size, sizeof(void *), pool->gfp,  				cpu_to_node(i), __builtin_return_address(0)); -		if (!slot) -			return -ENOMEM; + +		if (!slot) { +			slot = kmalloc_node(size, pool->gfp, cpu_to_node(i)); +			if (!slot) +				return -ENOMEM; +		}  		memset(slot, 0, size);  		pool->cpu_slots[i] = slot;  | 
