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 v14 09/31] ovl: Modify ovl_lookup() and friends to lookup metacopy dentry
Date: Fri, 4 May 2018 11:54:27 -0400	[thread overview]
Message-ID: <20180504155427.GA2713@redhat.com> (raw)
In-Reply-To: <CAOQ4uxjgymQDswFOQkLOgRXtoZFw77V3ycWy4Uvjrrs5KAQ0rw@mail.gmail.com>

On Fri, May 04, 2018 at 10:04:22AM +0300, Amir Goldstein wrote:
> On Thu, May 3, 2018 at 11:07 PM, Amir Goldstein <amir73il@gmail.com> wrote:
> > On Thu, May 3, 2018 at 6:12 PM, Vivek Goyal <vgoyal@redhat.com> wrote:
> >> On Tue, May 01, 2018 at 05:37:09PM +0300, Amir Goldstein wrote:
> [...]
> 
> >>>
> >>> w.r.t METACOPY things will get complicated if we remove
> >>> METACOPY xattr and the upper does not have ORIGIN.
> >>
> >> I am not able to understand the problem you are referring to.
> >>
> >>> In that case we may have an inode that is already hashed by lower,
> >>> but for a new lookup that does not see METACOPY xattr it
> >>> looks up the inode in cache by upper and this is not good.
> >>
> >> Here is my understanding. Following happens without metacopy feature.
> >>
> >> - As of now, only time we do not create ORIGIN on upper is for the
> >>   case of broken hardlink. (for a non-dir file).
> >>
> >> - In case of broken hard link (index=off), if file is on lower only, we
> >>   do not put new inode in inode cache at all. Once file gets copied up,
> >>   we hash it by upper inode. And reported inode number changes over
> >>   copy up.
> >>
> >> Now above behavior should remain same even with metacopy=on. For the
> >> case of broken hard link.
> >>
> >> - If file is on lower only, we will not put inode in cache. And once
> >>   file gets copied up metadata only, we will hash it with upper inode.
> >>
> >>   The only difference here is that without metacopy non-dir file will
> >>   have lowerdentry=NULL while with metacopy on, lowerdentry will be
> >>   non-null. But bylower should still be false because of following
> >>   check in ovl_hash_bylower().
> >>
> >>   /* No, if lower hardlink is or will be broken on copy up */
> >>    if ((upper || !ovl_indexdir(sb)) &&
> >>             !d_is_dir(lower) && d_inode(lower)->i_nlink > 1)
> >>                 return false;
> >>
> >> And if bylower is false, we hash inode using upper inode as key.
> >>
> >>                 struct inode *key = d_inode(bylower ? lowerdentry :
> >>                                                       upperdentry);
> >>
> >> IOW, despite the fact lowerdentry is there (without ORIGIN on upper),
> >> we don't use that lowerdentry for inode hashing. And hence behavior
> >> should not change.
> >>
> >> What am I missing?
> >>
> >
> > Just maybe missing the case of nlink=1 and ORIGIN cannot be
> > followed because lower fs doesn't support file handles.
> > I just wanted to make sure this case is handled correctly.
> >
> 
> OK. re-read the code and ready to explain the situation.
> 
> The meaning of new OVL_CONST_INO flag is:
> "inode preserves st_ino across copy up".
> If lower fs support file handles it also means:
> "...and across eviction from inode cache".
> but if lower fs does not support file handles it means:
> "...while non-dir inode remains in cache"
> 
> How does METACOPY change the situation?
> very slightly - with METACOPY, instead of st_ino change
> after copy_up+cache_evict, st_ino will not change after
> meta_copy_up+cache_evict, but will change after
> data_copy_up+cache_evict, which is not a problem as
> far as I can tell.
> 
> Specifically, removing METACOPY xattr will not change
> st_ino nor hash_by_lower until after cache eviction and as
> long as we have one-to-one mapping of upper inode to
> lower inode that's good enough.

Hi Amir,

Thanks for detailed explanation. I now understand your concern.

How about I pass in the origin information in ovl_get_inode() and
to ovl_hash_bylower(). And we set bylower=1 for a metacopy dentry
only if an upper origin could be found and verified? 

That way behavior will be similar to a file with nlink=1 and ORIGIN
not there. And we will not have to worry about thinking another
special corner case and writing test cases for it.

Too many corner cases are bad for future code maintenance and easy
to break.

WDYT?

Thanks
Vivek
> 
> Things will only break with filesystem inconsistencies
> like in xfstest overlay/049, but AFAICT, METACOPY does
> not introduce any real regressions, the only thing it does
> is add another way of creating an inconsistency with
> redirect on non-dir, which probably calls for a new xfstest.
> 
> I hope I got it all right.
> 
> Thanks,
> Amir.

  reply	other threads:[~2018-05-04 15:54 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-26 19:09 [PATCH v14 00/31] overlayfs: Delayed copy up of data Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 01/31] ovl: Initialize ovl_inode->redirect in ovl_get_inode() Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 02/31] ovl: Move the copy up helpers to copy_up.c Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 03/31] ovl: Provide a mount option metacopy=on/off for metadata copyup Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 04/31] ovl: During copy up, first copy up metadata and then data Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 05/31] ovl: Copy up only metadata during copy up where it makes sense Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 06/31] ovl: Add helper ovl_already_copied_up() Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 07/31] ovl: A new xattr OVL_XATTR_METACOPY for file on upper Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 08/31] ovl: Use out_err instead of out_nomem Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 09/31] ovl: Modify ovl_lookup() and friends to lookup metacopy dentry Vivek Goyal
2018-04-28  8:14   ` Amir Goldstein
2018-04-30 14:02     ` Vivek Goyal
2018-04-30 18:08       ` Amir Goldstein
2018-05-01 14:37         ` Amir Goldstein
2018-05-03 15:12           ` Vivek Goyal
2018-05-03 20:07             ` Amir Goldstein
2018-05-04  7:04               ` Amir Goldstein
2018-05-04 15:54                 ` Vivek Goyal [this message]
2018-05-04 18:47                   ` Amir Goldstein
2018-05-02 19:09         ` Vivek Goyal
2018-05-02 19:40           ` Vivek Goyal
2018-05-02 19:57             ` Amir Goldstein
2018-05-03 14:33               ` Vivek Goyal
2018-05-03 20:05                 ` Amir Goldstein
2018-04-30 19:32     ` Vivek Goyal
2018-04-30 20:21       ` Amir Goldstein
2018-04-26 19:09 ` [PATCH v14 10/31] ovl: Copy up meta inode data from lowest data inode Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 11/31] ovl: Add helper ovl_dentry_lowerdata() to get lower data dentry Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 12/31] ovl: Add an helper to get real " Vivek Goyal
2018-04-26 20:33   ` Amir Goldstein
2018-04-30 13:06     ` Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 13/31] ovl: Fix ovl_getattr() to get number of blocks from lower Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 14/31] ovl: Store lower data inode in ovl_inode Vivek Goyal
2018-04-26 20:31   ` Amir Goldstein
2018-04-26 19:09 ` [PATCH v14 15/31] ovl: Add helper ovl_inode_real_data() Vivek Goyal
2018-04-26 20:35   ` Amir Goldstein
2018-04-26 19:09 ` [PATCH v14 16/31] ovl: Always open file/inode which contains data and not metacopy Vivek Goyal
2018-04-28  8:49   ` Amir Goldstein
2018-05-03 20:31     ` Vivek Goyal
2018-04-26 19:09 ` [PATCH v14 17/31] ovl: Do not expose metacopy only dentry from d_real() Vivek Goyal
2018-04-28  7:36   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 18/31] ovl: Move some dir related ovl_lookup_single() code in else block Vivek Goyal
2018-04-28  7:34   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 19/31] ovl: Check redirects for metacopy files Vivek Goyal
2018-04-28  8:32   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 20/31] ovl: Treat metacopy dentries as type OVL_PATH_MERGE Vivek Goyal
2018-04-26 19:10 ` [PATCH v14 21/31] ovl: Add an inode flag OVL_CONST_INO Vivek Goyal
2018-04-28  8:33   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 22/31] ovl: Do not set dentry type ORIGIN for broken hardlinks Vivek Goyal
2018-04-28  9:14   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 23/31] ovl: Set redirect on metacopy files upon rename Vivek Goyal
2018-04-28  8:25   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 24/31] ovl: Set redirect on upper inode when it is linked Vivek Goyal
2018-04-28  8:40   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 25/31] ovl: Check redirect on index as well Vivek Goyal
2018-04-28  9:26   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 26/31] ovl: Allow ovl_open_realfile() to open metacopy inode Vivek Goyal
2018-04-28  9:05   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 27/31] ovl: Issue fsync on upper metacopy inode as well Vivek Goyal
2018-04-28  8:54   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 28/31] ovl: Disbale metacopy for MAP_SHARED mmap() Vivek Goyal
2018-04-28  9:28   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 29/31] ovl: Do not do metadata only copy-up for truncate operation Vivek Goyal
2018-04-28  8:35   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 30/31] ovl: Do not do metacopy only for ioctl modifying file attr Vivek Goyal
2018-04-28  8:31   ` Amir Goldstein
2018-04-26 19:10 ` [PATCH v14 31/31] 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=20180504155427.GA2713@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.