Message ID | 20200427111113.5956-18-urezki@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | None | expand |
Hello. I apologize. Please ignore this patch and email. Wanted to send it to one person, instead git send-email also handled some emails from commit footer. -- Vlad Rezki On Mon, Apr 27, 2020 at 1:11 PM Uladzislau Rezki (Sony) <urezki@gmail.com> wrote: > Since there is newly introduced kvfree_rcu() API, there is no need in > queuing and using call_rcu() to kvfree() an object after the GP. > > Remove kvfree_rcu_local() function and replace call_rcu() by new > kvfree_rcu() API that does the same but in more efficient way. > > Cc: linux-mm@kvack.org > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: rcu@vger.kernel.org > Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com> > Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org> > Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> > --- > mm/list_lru.c | 13 +++---------- > 1 file changed, 3 insertions(+), 10 deletions(-) > > diff --git a/mm/list_lru.c b/mm/list_lru.c > index 42c95bcb53ca..a0b08b27a9b9 100644 > --- a/mm/list_lru.c > +++ b/mm/list_lru.c > @@ -12,6 +12,7 @@ > #include <linux/slab.h> > #include <linux/mutex.h> > #include <linux/memcontrol.h> > +#include <linux/rcupdate.h> > #include "slab.h" > > #ifdef CONFIG_MEMCG_KMEM > @@ -373,21 +374,13 @@ static void memcg_destroy_list_lru_node(struct > list_lru_node *nlru) > struct list_lru_memcg *memcg_lrus; > /* > * This is called when shrinker has already been unregistered, > - * and nobody can use it. So, there is no need to use > kvfree_rcu_local(). > + * and nobody can use it. So, there is no need to use kvfree_rcu(). > */ > memcg_lrus = rcu_dereference_protected(nlru->memcg_lrus, true); > __memcg_destroy_list_lru_node(memcg_lrus, 0, memcg_nr_cache_ids); > kvfree(memcg_lrus); > } > > -static void kvfree_rcu_local(struct rcu_head *head) > -{ > - struct list_lru_memcg *mlru; > - > - mlru = container_of(head, struct list_lru_memcg, rcu); > - kvfree(mlru); > -} > - > static int memcg_update_list_lru_node(struct list_lru_node *nlru, > int old_size, int new_size) > { > @@ -419,7 +412,7 @@ static int memcg_update_list_lru_node(struct > list_lru_node *nlru, > rcu_assign_pointer(nlru->memcg_lrus, new); > spin_unlock_irq(&nlru->lock); > > - call_rcu(&old->rcu, kvfree_rcu_local); > + kvfree_rcu(old, rcu); > return 0; > } > > -- > 2.20.1 > >
diff --git a/mm/list_lru.c b/mm/list_lru.c index 42c95bcb53ca..a0b08b27a9b9 100644 --- a/mm/list_lru.c +++ b/mm/list_lru.c @@ -12,6 +12,7 @@ #include <linux/slab.h> #include <linux/mutex.h> #include <linux/memcontrol.h> +#include <linux/rcupdate.h> #include "slab.h" #ifdef CONFIG_MEMCG_KMEM @@ -373,21 +374,13 @@ static void memcg_destroy_list_lru_node(struct list_lru_node *nlru) struct list_lru_memcg *memcg_lrus; /* * This is called when shrinker has already been unregistered, - * and nobody can use it. So, there is no need to use kvfree_rcu_local(). + * and nobody can use it. So, there is no need to use kvfree_rcu(). */ memcg_lrus = rcu_dereference_protected(nlru->memcg_lrus, true); __memcg_destroy_list_lru_node(memcg_lrus, 0, memcg_nr_cache_ids); kvfree(memcg_lrus); } -static void kvfree_rcu_local(struct rcu_head *head) -{ - struct list_lru_memcg *mlru; - - mlru = container_of(head, struct list_lru_memcg, rcu); - kvfree(mlru); -} - static int memcg_update_list_lru_node(struct list_lru_node *nlru, int old_size, int new_size) { @@ -419,7 +412,7 @@ static int memcg_update_list_lru_node(struct list_lru_node *nlru, rcu_assign_pointer(nlru->memcg_lrus, new); spin_unlock_irq(&nlru->lock); - call_rcu(&old->rcu, kvfree_rcu_local); + kvfree_rcu(old, rcu); return 0; }