All of lore.kernel.org
 help / color / mirror / Atom feed
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 09:34:55 -0500	[thread overview]
Message-ID: <20171120143455.GA16840@redhat.com> (raw)
In-Reply-To: <CAOQ4uxiTOU7RcXdBmewcUe8_Yh-N6+heJKNn2CMo0zuw4YLBRg@mail.gmail.com>

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?


[..]
> >> > +static inline bool open_for_write(int flags)
> >>
> >> Need ovl_ namespace prefix
> >> and the name sounds like an action (i.e. a request to open for write)
> >
> > ovl_opened_for_write_or_trunc()?
> 
> OK. maybe ovl_open_flags_need_copy_up() ?

Ok, will use ovl_open_flags_need_copy_up().

Vivek

  reply	other threads:[~2017-11-20 14:34 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 [this message]
2017-11-20 15:18           ` Amir Goldstein
2017-11-20 15:28             ` Vivek Goyal
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=20171120143455.GA16840@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.