On Sun, Nov 17, 2019 at 12:17:10PM +1100, Aleksa Sarai wrote: > + if (unlikely(nd->flags & LOOKUP_IS_SCOPED)) { > + /* > + * If there was a racing rename or mount along our > + * path, then we can't be sure that ".." hasn't jumped > + * above nd->root (and so userspace should retry or use > + * some fallback). > + */ > + if (unlikely(read_seqretry(&mount_lock, nd->m_seq))) > + return -EAGAIN; > + if (unlikely(read_seqretry(&rename_lock, nd->r_seq))) > + return -EAGAIN; > + } Looks like excessive barriers to me - it's rmb check mount_lock.sequence rmb check rename_lock.sequence > @@ -2266,6 +2274,10 @@ static const char *path_init(struct nameidata *nd, unsigned flags) > nd->last_type = LAST_ROOT; /* if there are only slashes... */ > nd->flags = flags | LOOKUP_JUMPED | LOOKUP_PARENT; > nd->depth = 0; > + > + nd->m_seq = read_seqbegin(&mount_lock); > + nd->r_seq = read_seqbegin(&rename_lock); Same here, pretty much (fetch/rmb/fetch/rmb) _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/containers