From: David Disseldorp <ddiss@suse.de>
To: "NeilBrown" <neilb@suse.de>
Cc: "Al Viro" <viro@zeniv.linux.org.uk>,
linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
"LKML" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] VFS: filename_create(): fix incorrect intent.
Date: Thu, 31 Mar 2022 11:49:49 +0200 [thread overview]
Message-ID: <20220331114949.02fae137@suse.de> (raw)
In-Reply-To: <164868118815.25542.13263176689793254608@noble.neil.brown.name>
On Thu, 31 Mar 2022 09:59:48 +1100, NeilBrown wrote:
> On Wed, 30 Mar 2022, David Disseldorp wrote:
> > Hi Neil,
> >
> > I gave this a spin and was wondering why xfstests wouldn't start with
> > this change...
> >
> > On Mon, 28 Mar 2022 11:56:48 +1100, NeilBrown wrote:
> > ...
> > >
> > > diff --git a/fs/namei.c b/fs/namei.c
> > > index 3f1829b3ab5b..3ffb42e56a8e 100644
> > > --- a/fs/namei.c
> > > +++ b/fs/namei.c
> > > @@ -3676,7 +3676,6 @@ static struct dentry *filename_create(int dfd, struct filename *name,
> > > int type;
> > > int err2;
> > > int error;
> > > - bool is_dir = (lookup_flags & LOOKUP_DIRECTORY);
> > >
> > > /*
> > > * Note that only LOOKUP_REVAL and LOOKUP_DIRECTORY matter here. Any
> > > @@ -3698,9 +3697,11 @@ static struct dentry *filename_create(int dfd, struct filename *name,
> > > /* don't fail immediately if it's r/o, at least try to report other errors */
> > > err2 = mnt_want_write(path->mnt);
> > > /*
> > > - * Do the final lookup.
> > > + * Do the final lookup. Request 'create' only if there is no trailing
> > > + * '/', or if directory is requested.
> > > */
> > > - lookup_flags |= LOOKUP_CREATE | LOOKUP_EXCL;
> > > + if (!last.name[last.len] || (lookup_flags & LOOKUP_DIRECTORY))
> > > + lookup_flags |= LOOKUP_CREATE | LOOKUP_EXCL;
> >
> > This doesn't look right, as any LOOKUP_DIRECTORY flag gets dropped via
> > the prior "lookup_flags &= LOOKUP_REVAL;".
>
> Arg.. thanks for testing - I clearly should have tested more broadly.
>
> I could leave the "is_dir" variable there I guess.
> Or maybe the masking statement should be
> lookup_flags &= LOOKUP_REVAL | LOOKUP_DIRECTORY;
> as that is a better match for the comment.
Modifying "lookup_flags" results in changed filename_parentat() and
__lookup_hash() parameters, which isn't an intended consequence IIUC. I
think retaining "is_dir" would make sense.
Cheers, David
next prev parent reply other threads:[~2022-03-31 9:50 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-28 0:56 [PATCH] VFS: filename_create(): fix incorrect intent NeilBrown
2022-03-29 15:29 ` Jeff Layton
2022-03-30 8:14 ` David Disseldorp
2022-03-30 22:59 ` NeilBrown
2022-03-31 9:49 ` David Disseldorp [this message]
2022-03-31 10:40 ` NeilBrown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220331114949.02fae137@suse.de \
--to=ddiss@suse.de \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=neilb@suse.de \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.