On Fri, Dec 20, 2024 at 01:54:28PM +1100, NeilBrown wrote: > Once the exclusive "update" lock is obtained on the dentry we must make > sure it wasn't unlinked or renamed while we slept. If it was we repeat > the lookup. > + if ( > + /* Was unlinked while we waited ?*/ > + d_unhashed(dentry) || > + /* Or was dentry renamed ?? */ > + dentry->d_parent != base || > + dentry->d_name.hash != last->hash || > + !d_same_name(dentry, base, last) > + ) { > + rcu_read_unlock(); > + spin_unlock(&dentry->d_lock); > + lock_map_release(&dentry->d_update_map); > + dput(dentry); > + goto retry; > + } > + rcu_read_unlock(); > + } > + dentry->d_flags |= DCACHE_PAR_UPDATE; > + spin_unlock(&dentry->d_lock); ... and now __d_unalias() moves it to new place, making all the checks you've just done completely useless.