On Fri, Sep 13, 2013 at 12:12:20PM -0700, Linus Torvalds wrote: > It tries to consolidate the dentry LRU stuff into a few helper > functions that right now have anal checking of the flags. Maybe I > overdid it, but the code was really confusing, and I think we got the > free dentry counts wrong, and the bits wrong too, so I tried to be > extra careful. > > There are several cases: > - d_lru_add/del: fairly obvious > - d_lru_isolate: this is when the LRU callbacks ask us to remove the > entry from the list. This is different from d_lru_del() only in that > it uses the raw list removal, not the lru list helper function. I'm > not sure that's right, but that's what the code used to do. It is right - for one thing, we are holding the lock on that LRU list, so list_lru_del() would deadlock right there. For another, the same list_lru_walk (OK, list_lru_walk_node()) will do ->nr_items decrement when we return LRU_REMOVED to it, so we don't want to do it twice. Plain list_del_init() is correct here. > - d_lru_shrink_move: move from the "global" lru list to a private shrinker list > - d_shrink_add/del: fairly obvious. > > And then "denty_lru_add/del" that actually take the current state into > account and do the right thing. Those we had before, I'm just > explaining the difference from the low-level operations that have > fixed "from this state to that" semantics Looks sane; FWIW, the variant I'm playing with uses two independent flags for "shrinker" and "per-sb", but AFAICS that doesn't yield better code. Feel free to slap my acked-by on it. -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html