Patch "ptr_ring: try vmalloc() when kmalloc() fails" has been added to the 4.15-stable tree
This is a note to let you know that I've just added the patch titled
ptr_ring: try vmalloc() when kmalloc() fails
to the 4.15-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ptr_ring-try-vmalloc-when-kmalloc-fails.patch
and it can be found in the queue-4.15 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
0bf7800f1799b5b1fd7d4f024e9ece53ac489011Mon Sep 17 00:00:00 2001
From: Jason Wang <[email protected]>
Date: Fri, 9 Feb 2018 17:45:50 +0800
Subject: ptr_ring: try vmalloc() when kmalloc() fails
From: Jason Wang <[email protected]>
commit 0bf7800f1799b5b1fd7d4f024e9ece53ac489011 upstream.
This patch switch to use kvmalloc_array() for using a vmalloc() fallback to help in case kmalloc() fails.
--- include/linux/ptr_ring.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
include/linux/ptr_ring.h +8 -5
@@ -451,11 +451,14 @@ static inline int ptr_ring_consume_batch __PTR_RING_PEEK_CALL_v; \ }) +/* Not all gfp_t flags (besides GFP_KERNEL) are allowed. See +* documentation for vmalloc for which of them are legal. +*/ static inline void **__ptr_ring_init_queue_alloc (unsigned int size,gfp_t gfp) {if (size *sizeof (void *) >KMALLOC_MAX_SIZE )return NULL ; -return kcalloc (size,sizeof (void *), gfp); +return kvmalloc_array (size,sizeof (void *), gfp | __GFP_ZERO); }static inline void __ptr_ring_set_size (struct ptr_ring *r,int size)
@@ -588,7 +591,7 @@ static inline int ptr_ring_resize(structspin_unlock (&(r)->producer_lock);spin_unlock_irqrestore (&(r)->consumer_lock, flags); -kfree (old); +kvfree (old);return 0 ; }
@@ -628,7 +631,7 @@ static inline int ptr_ring_resize_multip }for (i =0 ; i < nrings; ++i) -kfree (queues[i]); +kvfree (queues[i]);kfree (queues);
@@ -636,7 +639,7 @@ static inline int ptr_ring_resize_multip nomem:while (--i >=0 ) -kfree (queues[i]); +kvfree (queues[i]);kfree (queues);
@@ -651,7 +654,7 @@ static inline void ptr_ring_cleanup(struif (destroy)while ((ptr =ptr_ring_consume (r)))destroy (ptr); - kfree(r->queue); + kvfree(r->queue); }#endif /* _LINUX_PTR_RING_H */
Patches currently in stable-queue which might be from [email protected] are
queue-4.15/ptr_ring-try-vmalloc-when-kmalloc-fails.patch queue-4.15/ptr_ring-fail-early-if-queue-occupies-more-than-kmalloc_max_size.patch