On Sat, May 12, 2018 at 4:25 AM, Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > [same story as with the previous two patches] > > Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> > --- > diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c > index 8bede0742619..cdd8f8816d2a 100644 > --- a/fs/overlayfs/copy_up.c > +++ b/fs/overlayfs/copy_up.c > @@ -373,6 +373,22 @@ static int ovl_create_index(struct dentry *dentry, struct dentry *origin, > if (err) > goto out; > > + if (unlikely(d_unhashed(temp))) { > + struct dentry *d = lookup_one_len(temp->d_name.name, > + temp->d_parent, > + temp->d_name.len); > + if (IS_ERR(d)) { > + err = PTR_ERR(d); > + goto out; > + } > + dput(temp); > + temp = d; > + if (d_is_negative(temp)) { > + err = -EIO; > + goto out; > + } > + } > + :-/ this pattern is too nasty to be open codes twice in ovl and once in knfsd. For ovl, we can hoist this into the ovl_do_mkdir() helper, but what filesystems really need is vfs_mkdir_hashed(), then knfsd can use it as well. Thanks, Amir.