Martin J. Bligh described at OLS the "blunderbuss effect", i.e. the inefficiency of the dentry cache shrinker at freeing whole pages, since we could leave (worst-case) one dentry per page because it's at the end of the LRU list.
Pinned dentries (in first place libfs ones, but he also includes directories one - I think they are just hard to free, not really pinned) are allocated from the common dentry_cache, i.e. mixed with normal ones - why don't we fix that? It seems that adding an (optional) flag to a new __d_alloc (with d_alloc becoming its wrapper) would be enough, since dentries are always allocated directly by filesystems (either on lookup or on creation of the pinned dentry). Or call it d_alloc_lively(). Also, it seems that the slab allocator willl allocate objects at fixed locations inside a page (even with page colouring, colour_offset is fixed per-slab and saved)*, once that slab has been allocated... so if we add a "DCACHE_FREED" flag and zero slabs content on alloc (at least for this slab), we could maybe enumerate all dentries in a page and try to free them, to finally free the whole slab. * Otherwise this problem could probably be fixed some way. -- Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!". Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894) http://www.user-mode-linux.org/~blaisorblade ___________________________________ Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB http://mail.yahoo.it - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/