On Wed, Aug 7, 2024 at 2:43 PM Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > On Wed, Aug 07, 2024 at 11:50:50AM +0200, Mateusz Guzik wrote: > > > tripping ip: > > vfs_tmpfile+0x162/0x230: > > fsnotify_parent at include/linux/fsnotify.h:81 > > (inlined by) fsnotify_file at include/linux/fsnotify.h:131 > > (inlined by) fsnotify_open at include/linux/fsnotify.h:401 > > (inlined by) vfs_tmpfile at fs/namei.c:3781 > > Try this for incremental; missed the fact that finish_open() is > used by ->tmpfile() instances, not just ->atomic_open(). > > Al, crawling back to sleep... > > diff --git a/fs/namei.c b/fs/namei.c > index 95345a5beb3a..0536907e8e79 100644 > --- a/fs/namei.c > +++ b/fs/namei.c > @@ -3776,7 +3776,10 @@ int vfs_tmpfile(struct mnt_idmap *idmap, > file->f_path.dentry = child; > mode = vfs_prepare_mode(idmap, dir, mode, mode, mode); > error = dir->i_op->tmpfile(idmap, dir, file, mode); > - dput(child); > + if (file->f_mode & FMODE_OPENED) > + mntget(parentpath->mnt); > + else > + dput(child); > if (file->f_mode & FMODE_OPENED) > fsnotify_open(file); > if (error) That seems to have worked, but my test rig went down due to surprise PDU maintenance (and it is still down) and I was unable to give the patch a more serious beating. -- Mateusz Guzik <mjguzik gmail.com>