On Fri, Aug 30, 2013 at 2:10 PM, Waiman Long <waiman.long@xxxxxx> wrote: > > Actually, prepend_path() was called with rename_lock taken. So d_move() > couldn't be run at the same time. Am I right? Al was discussing the case I mentioned: getting rid of that lock entirely, running it all just under RCU, and then just checking the rename sequence count around it all and retrying if required. It would have the advantage of not only not having to get the lock, but by doing it as an RCU walk, we would avoid all the nasty reference counting costs too. We wouldn't even need to get refcounts on the root/pwd entries (which currently cost us quite a bit), since we could just check the sequence number in "struct fs_struct" too. That also gets rid of the necessity for the fs->lock spinlock. You do have to be a bit careful when following the dentry pointers under RCU (and you cannot just do a "memcpy()" on the name, as Al points out), but it really doesn't look nasty. It just looks "you have to be careful". 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