From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yw0-f193.google.com ([209.85.161.193]:37670 "EHLO mail-yw0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750770AbeELEtW (ORCPT ); Sat, 12 May 2018 00:49:22 -0400 Received: by mail-yw0-f193.google.com with SMTP id u83-v6so2185812ywc.4 for ; Fri, 11 May 2018 21:49:22 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <20180512012557.GJ30522@ZenIV.linux.org.uk> References: <20180512012557.GJ30522@ZenIV.linux.org.uk> From: Amir Goldstein Date: Sat, 12 May 2018 07:49:21 +0300 Message-ID: Subject: Re: [RFC][PATCH] ovl_create_index(): vfs_mkdir() might succeed leaving dentry negative unhashed To: Al Viro Cc: linux-fsdevel , Miklos Szeredi Content-Type: text/plain; charset="UTF-8" Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Sat, May 12, 2018 at 4:25 AM, Al Viro wrote: > [same story as with the previous two patches] > > Signed-off-by: Al Viro > --- > 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.