On Mon, Nov 27, 2023 at 03:45:55PM -0800, Nhat Pham wrote: > The interface of list_lru is based on the assumption that the list node > and the data it represents belong to the same allocated on the correct > node/memcg. While this assumption is valid for existing slab objects LRU > such as dentries and inodes, it is undocumented, and rather inflexible > for certain potential list_lru users (such as the upcoming zswap > shrinker and the THP shrinker). It has caused us a lot of issues during > our development. > > This patch changes list_lru interface so that the caller must explicitly > specify numa node and memcg when adding and removing objects. The old > list_lru_add() and list_lru_del() are renamed to list_lru_add_obj() and > list_lru_del_obj(), respectively. > > It also extends the list_lru API with a new function, list_lru_putback, > which undoes a previous list_lru_isolate call. Unlike list_lru_add, it > does not increment the LRU node count (as list_lru_isolate does not > decrement the node count). list_lru_putback also allows for explicit > memcg and NUMA node selection. > > Suggested-by: Johannes Weiner <hannes@xxxxxxxxxxx> > Signed-off-by: Nhat Pham <nphamcs@xxxxxxxxx> Acked-by: Johannes Weiner <hannes@xxxxxxxxxxx>