On Mon, Sep 9, 2013 at 11:06 AM, Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: >> >> And while the rename sequence lock protects against _renames_, it does >> not protect against just plain dentries getting free'd under memory >> pressure. > > It protects the chain of ->d_parent, so they'd better not get freeds at > all... Yeah, I think you're right because of the other constraints.. Holding just the rename-lock for writing is actually sufficient, because (a) you are guaranteed to already hold on to the end-point of the walk (it's where you begin your path lookup), and so the memory pressure issue is actually irrelevant. (b) the only dentry lookup thing that remains is the parenthood chain which is recursively reference-count-protected from the end, and yes, in the absense of normal memory pressure, renames are the only thing that will mess with that. So even without holding d_lock, I guess we're actually safe even without a real rcu read lock if we hold the rename lock for writing. That actually argues for doing the rcu_read_lock() inside the helper function. HOWEVER, I'd like a comment to that effect, to show why we can access all those dentries without any other synchronization. Linus -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html