To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org Subject: Slab Defrag / Slab Targeted Reclaim V2 Initial support for Slab defragmentation and targeted reclaim. The functionality here is minimal. We establish a slab API to allow removal or moving of objects between slabs. The only user provided here is a dentry cache reclaim capability. This is limited to the removal of unused dentries for now. It is planned to later add a similar inode reclaim capability and then extend the move/reclaim to support moving of dentries and inodes. Slab defragmentation is performed during kmem_cache_shrink. This is usually triggered through the slab shrinkers but can also be manually triggered through the slabinfo command. Support is provided for antifrag/defrag to evict a specific slab page through the kmem_cache_vacate function call. Since we can only reclaim unused dentries for now that functionality is pretty limited (we need to put some work into making dentries and inode more reclaimable or movable) but we can increase the capabilities over time which will allow us to move slabs from the reclaimable area into the movable area. This will shrink the reclaimable area significantly. Since we can target the vacating of pages this may allow the antifrag code to remove a page that hinders the freeing of higher order page. V1->V2 Perform put()s with interrupts enabled. Clean up control flow using a state variable.