On Fri, Sep 13, 2013 at 04:25:48PM -0400, Linus Torvalds wrote: > On Fri, Sep 13, 2013 at 4:00 PM, Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > \> > > 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. > > Yes. And I found the opposite bug in one place: when we are collecting > dentries by walking the parents etc, we do *not* hold the global RCU > lock, ??? LRU list lock, presumably? so we cannot use the "d_lru_shrink_list()" thing after all. It's > correct as far as the internal logic of fs/dcache.c goes, but it > violates the global LRU list rules. So I replaced that with a > dentry_lru_del() followed by a d_shrink_add() instead. -- 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