read_seqretry() returns true on mismatch, not on match...
Unified · Split
| @@ -1137,7 +1137,7 @@ static bool __follow_mount_rcu(struct nameidata *nd, struct path *path, · 1136 unmodified lines | ||
| 1137 | 1137 | */ |
| 1138 | 1138 | *inode = path->dentry->d_inode; |
| 1139 | 1139 | } |
| 1140 | − return read_seqretry(&mount_lock, nd->m_seq) && | |
| 1140 | + return !read_seqretry(&mount_lock, nd->m_seq) && | |
| 1141 | 1141 | !(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT); |
| 1142 | 1142 | } |
| 1143 | 1143 | |
| @@ -1174,7 +1174,7 @@ static int follow_dotdot_rcu(struct nameidata *nd) · 30 unmodified lines | ||
| 1174 | 1174 | nd->path.mnt = &mounted->mnt; |
| 1175 | 1175 | nd->path.dentry = mounted->mnt.mnt_root; |
| 1176 | 1176 | nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq); |
| 1177 | − if (!read_seqretry(&mount_lock, nd->m_seq)) | |
| 1177 | + if (read_seqretry(&mount_lock, nd->m_seq)) | |
| 1178 | 1178 | goto failed; |
| 1179 | 1179 | } |
| 1180 | 1180 | nd->inode = nd->path.dentry->d_inode; |