From: Vivek Goyal <vgoyal@redhat.com>
To: Amir Goldstein <amir73il@gmail.com>
Cc: overlayfs <linux-unionfs@vger.kernel.org>,
Miklos Szeredi <miklos@szeredi.hu>
Subject: Re: [PATCH v7 09/14] ovl: A new xattr OVL_XATTR_METACOPY for file on upper
Date: Mon, 20 Nov 2017 10:28:54 -0500 [thread overview]
Message-ID: <20171120152854.GB16840@redhat.com> (raw)
In-Reply-To: <CAOQ4uxjGteNfefP-FbF06okCCmuDruJ1gOkW=8NhEAn8BE7pOg@mail.gmail.com>
On Mon, Nov 20, 2017 at 05:18:48PM +0200, Amir Goldstein wrote:
> On Mon, Nov 20, 2017 at 4:34 PM, Vivek Goyal <vgoyal@redhat.com> wrote:
> > On Sat, Nov 18, 2017 at 09:06:41AM +0200, Amir Goldstein wrote:
> >
> > [..]
> >> >> > Note, we now set OVL_UPPERDATA on all kind of dentires and check
> >> >> > OVL_UPPERDATA only where it makes sense. If a file is created on upper,
> >> >> > we set OVL_UPPERDATA. This can be accessed lockless in ovl_d_real()
> >> >> > path again. This time ordering dependency is w.r.t oe->__upperdata. We
> >> >> > need to make surr OVL_UPPERDATA is visible before oe->__upperdata is
> >> >> > visible. Otherwise following code path might try to copy up an upper
> >> >> > only file.
> >> >>
> >> >> Why all this explanations?
> >> >> Just use ovl_set_upperdata() when creating upper and be done with it.
> >> >
> >> > Just using ovl_set_upperdata() will not do away with ordering dependency
> >> > right? I mean, setting OVL_UPPERDATA in file creation path has different
> >> > ordering requirement (same is the case of >has_upper). And I wanted to
> >> > highlight that ordering requirement in changelogs.
> >> >
> >> > I can get rid of it. But this seems such a subtle requirement, I think
> >> > its a good idea to talk about it explicitly.
> >> >
> >>
> >> I am not following. you only need to ovl_set_upperdata() before
> >> ovl_inode_update(), just like in regular copy up. Am I missing something
> >> subtle?
> >
> > Hi Amir,
> >
> > Right. This is ordering dependency between setting of OVL_UPPERDATA and
> > oi->__upperdentry.
> >
> > So as per barrier documentation file, read/write barrier should look
> > as follows.
> >
> > CPU1 CPU2
> > set OVL_UPPERDATA smp_rmb()
> > smp_wmb() Load oi->__upperdentry
> > set oi->__upperdentry
> >
> > So we need to place smp_wmb() after setting OVL_UPPERDATA and place
> > smp_rmb() just before load of oi->__upperdentry.
> >
> > Instead of smp_rmb() we are relying on checking for ovl_dentry_lower().
> > That is even if OVL_UPPERDATA is not visible on CPU2, but
> > oi->__upperdentry is visible, then we don't try to copy up a file which
> > does not have a lower.
> >
> > So ovl_dentry_lower() is preventing the race which *in-theory* can trigger
> > trying to copy up file which does not have lower.
> >
> > Does this make sense?
> >
>
> Maybe. Brain overflow.
> To put it shortly, if there is a problem with setting OVL_UPPERDATA on new upper
> then there is a problem with setting upper alias as well (as you pointed out).
> I don't think that is really the case, but I am not the one to explain why.
> It just does not make sense that d_instantiate doesn't make sure that inode
> fields are consistent before attaching the inode to dentry.
> I think the barriers hide in raw_write_seqcount_begin()/raw_seqcount_begin()
> for the lockless dentry cache lookup, but I'm not an expert.
>
> Anyway, I find the commit message text from "If a file is created on upper,..."
> very confusing.
> I suggest that if you are not sure about this leave a "XXX" comment in the
> code path of creating new upper and setting OVL_UPPERDATA flag or
> "TODO" comment if you thing there is something to be done.
>
> It is easy to later apply a patch to remove the XXX comment after explaining it
> or remove TODO comment after fixing it.
Ok, for now, I will just put a comment in code and deal with it later if
need be. Once it happens, it will be a NULL pointer dereference as we might
try to copy up a file which does not have a lower. So we will know if
problem happens. :-)
Vivek
> A confusing text remains in git log forever and get git history
> researchers off track.
>
> Amir.
next prev parent reply other threads:[~2017-11-20 15:28 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-16 22:03 [RFC PATCH v7 00/14] overlayfs: Delayed copy up of data Vivek Goyal
2017-11-16 22:03 ` [PATCH v7 01/14] ovl: disable redirect_dir and index when no xattr support Vivek Goyal
2017-11-16 22:03 ` [PATCH v7 02/14] ovl: ovl_check_setxattr() get rid of redundant -EOPNOTSUPP check Vivek Goyal
2017-11-16 22:03 ` [PATCH v7 03/14] ovl: Create origin xattr on copy up for all files Vivek Goyal
2017-11-16 22:03 ` [PATCH v7 04/14] ovl: Provide a mount option metacopy=on/off for metadata copyup Vivek Goyal
2017-11-17 11:23 ` Amir Goldstein
2017-11-17 16:18 ` Vivek Goyal
2017-11-17 16:32 ` Amir Goldstein
2017-11-17 18:31 ` Vivek Goyal
2017-11-16 22:03 ` [PATCH v7 05/14] ovl: During copy up, first copy up metadata and then data Vivek Goyal
2017-11-16 22:03 ` [PATCH v7 06/14] ovl: Move couple of copy up functions in copy_up.c Vivek Goyal
2017-11-17 9:06 ` Amir Goldstein
2017-11-17 15:40 ` Vivek Goyal
2017-11-17 16:09 ` Amir Goldstein
2017-11-16 22:03 ` [PATCH v7 07/14] ovl: Copy up only metadata during copy up where it makes sense Vivek Goyal
2017-11-17 15:44 ` Amir Goldstein
2017-11-16 22:03 ` [PATCH v7 08/14] ovl: Add helper ovl_already_copied_up() Vivek Goyal
2017-11-16 22:03 ` [PATCH v7 09/14] ovl: A new xattr OVL_XATTR_METACOPY for file on upper Vivek Goyal
2017-11-17 16:07 ` Amir Goldstein
2017-11-17 20:34 ` Vivek Goyal
2017-11-18 7:06 ` Amir Goldstein
2017-11-20 14:34 ` Vivek Goyal
2017-11-20 15:18 ` Amir Goldstein
2017-11-20 15:28 ` Vivek Goyal [this message]
2017-11-16 22:03 ` [PATCH v7 10/14] ovl: Fix ovl_getattr() to get number of blocks from lower Vivek Goyal
2017-11-17 9:17 ` Amir Goldstein
2017-11-16 22:03 ` [PATCH v7 11/14] ovl: Set OVL_UPPERDATA flag during ovl_lookup() Vivek Goyal
2017-11-17 9:22 ` Amir Goldstein
2017-11-16 22:03 ` [PATCH v7 12/14] ovl: Do not expose metacopy only upper dentry from d_real() Vivek Goyal
2017-11-17 16:07 ` Amir Goldstein
2017-11-16 22:03 ` [PATCH v7 13/14] ovl: Fix encryption/compression status of a metacopy only file Vivek Goyal
2017-11-17 9:15 ` Amir Goldstein
2017-11-16 22:03 ` [PATCH v7 14/14] ovl: Enable metadata only feature Vivek Goyal
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=20171120152854.GB16840@redhat.com \
--to=vgoyal@redhat.com \
--cc=amir73il@gmail.com \
--cc=linux-unionfs@vger.kernel.org \
--cc=miklos@szeredi.hu \
/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.