Dear SHRINKER and MEMCG experts, When using list_lru_add() and list_lru_del(), it seems to be required that you pass the same value of nid and memcg to both calls, since list_lru_del() might otherwise try to delete it from the wrong list / delete it while holding the wrong spinlock. I'm trying to understand the implications of this requirement on the lifetime of the memcg. Now, looking at list_lru_add_obj() I noticed that it uses rcu locking to keep the memcg object alive for the duration of list_lru_add(). That rcu locking is used here seems to imply that without it, the memcg could be deallocated during the list_lru_add() call, which is of course bad. But rcu is not enough on its own to keep the memcg alive all the way until the list_lru_del_obj() call, so how does it ensure that the memcg stays valid for that long? And if there is a mechanism to keep the memcg alive for the entire duration between add and del, why is rcu locking needed? I don't see any refcounts being taken on the memcg. Is it because the memcg could be replaced by another memcg that has the same value of memcg_kmem_id(memcg)? tl;dr: what does list_lru_add actually require from the memcg pointer's lifetime? Alice