On Fri, Feb 14, 2025 at 06:13:55AM +0000, Al Viro wrote: > On Fri, Feb 14, 2025 at 06:00:39AM +0000, Al Viro wrote: > > > 3) I'm pretty sure that NFS is *not* the only filesystem that returns > > unhashed negative in some success cases; will need to go over the instances > > to verify that, though. > > Definitely so: in cifs_mkdir() we have > if ((server->ops->posix_mkdir) && (tcon->posix_extensions)) { > rc = server->ops->posix_mkdir(xid, inode, mode, tcon, full_path, > cifs_sb); > d_drop(direntry); /* for time being always refresh inode info */ > goto mkdir_out; > } > There might be other cases. hostfs is definitely like that, I'm pretty > sure that kernfs is as well... kernfs is actually playing fast and loose with the calling conventions there; it does not bother with unhashing and relies upon its ->d_revalidate() noticing and unhashing the sucker. Another variant that would work (and follow the calling conventions) is to have ->lookup() that leaves negatives unhashed and ->mkdir() not bothering to hash or instantiate. It really needs a review instance by instance. And yes, it does look like ->lookup()-like calling conventions end up better, especially if we make an instance return d_splice_alias() result...