On 2/19/24 22:14, Bernd Schubert wrote: > > > On 2/19/24 20:58, Miklos Szeredi wrote: >> On Mon, 19 Feb 2024 at 20:55, Bernd Schubert <bernd.schubert@xxxxxxxxxxx> wrote: >>> >>> >>> >>> On 2/19/24 20:38, Miklos Szeredi wrote: >>>> On Mon, 19 Feb 2024 at 20:05, Antonio SJ Musumeci <trapexit@xxxxxxxxxx> wrote: >>>> >>>>> This is what I see from the kernel: >>>>> >>>>> lookup(nodeid=3, name=.); >>>>> lookup(nodeid=3, name=..); >>>>> lookup(nodeid=1, name=dir2); >>>>> lookup(nodeid=1, name=..); >>>>> forget(nodeid=3); >>>>> forget(nodeid=1); >>>> >>>> This is really weird. It's a kernel bug, no arguments, because kernel >>>> should never send a forget against the root inode. But that >>>> lookup(nodeid=1, name=..); already looks bogus. >>> >>> Why exactly bogus? >>> >>> reconnect_path() >>> if (IS_ROOT(dentry)) >>> parent = reconnect_one(mnt, dentry, nbuf); >> >> It's only getting this far if (dentry->d_flags & DCACHE_DISCONNECTED), >> but that doesn't make sense on the root dentry. It does happen, >> though, I'm just not seeing yet how. > > I see the BUG_ON(), but on the other the "if IS_ROOT(dentry)" condition > triggers. Oh I see, IS_ROOT() triggers if parent is not known yet.