From: Vivek Goyal <vgoyal@redhat.com>
To: linux-unionfs@vger.kernel.org
Cc: vgoyal@redhat.com, amir73il@gmail.com, miklos@szeredi.hu
Subject: [PATCH v7 07/14] ovl: Copy up only metadata during copy up where it makes sense
Date: Thu, 16 Nov 2017 17:03:28 -0500 [thread overview]
Message-ID: <20171116220335.13448-8-vgoyal@redhat.com> (raw)
In-Reply-To: <20171116220335.13448-1-vgoyal@redhat.com>
If it makes sense to copy up only metadata during copy up, do it. This
is done for regular files which are not opened for WRITE and have origin
being saved.
Right now ->metacopy is set to 0 always. Last patch in the series will
remove the hard coded statement and enable metacopy feature.
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
---
fs/overlayfs/copy_up.c | 38 +++++++++++++++++++++++++++++++-------
1 file changed, 31 insertions(+), 7 deletions(-)
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index f84ba12c9b05..82d66e96be0f 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -262,6 +262,26 @@ int ovl_open_maybe_copy_up(struct dentry *dentry, unsigned int file_flags)
return err;
}
+static bool ovl_need_meta_copy_up(struct dentry *dentry, umode_t mode,
+ int flags)
+{
+ struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
+
+ /* TODO: Will enable metacopy in last patch of series */
+ return false;
+
+ if (!ofs->config.metacopy)
+ return false;
+
+ if (!S_ISREG(mode))
+ return false;
+
+ if (flags && ((OPEN_FMODE(flags) & FMODE_WRITE) || (flags & O_TRUNC)))
+ return false;
+
+ return true;
+}
+
struct ovl_fh *ovl_encode_fh(struct dentry *lower, bool is_upper)
{
struct ovl_fh *fh;
@@ -335,11 +355,8 @@ static int ovl_set_origin(struct dentry *dentry, struct dentry *lower,
return PTR_ERR(fh);
}
- /*
- * Do not fail when upper doesn't support xattrs.
- */
err = ovl_check_setxattr(dentry, upper, OVL_XATTR_ORIGIN, fh,
- fh ? fh->len : 0, 0);
+ fh ? fh->len : 0, -EOPNOTSUPP);
kfree(fh);
return err;
@@ -356,6 +373,7 @@ struct ovl_copy_up_ctx {
struct qstr destname;
struct dentry *workdir;
bool tmpfile;
+ bool metacopy;
};
static int ovl_link_up(struct ovl_copy_up_ctx *c)
@@ -483,10 +501,14 @@ static int ovl_copy_up_inode(struct ovl_copy_up_ctx *c, struct dentry *temp)
*
*/
err = ovl_set_origin(c->dentry, c->lowerpath.dentry, temp);
- if (err)
- return err;
+ if (err) {
+ if (err != -EOPNOTSUPP)
+ return err;
+ /* Upper does not support xattr. Copy up data as well */
+ c->metacopy = false;
+ }
- if (S_ISREG(c->stat.mode)) {
+ if (S_ISREG(c->stat.mode) && !c->metacopy) {
struct path upperpath;
ovl_path_upper(c->dentry, &upperpath);
@@ -631,6 +653,8 @@ static int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry,
if (err)
return err;
+ ctx.metacopy = ovl_need_meta_copy_up(dentry, ctx.stat.mode, flags);
+
ovl_path_upper(parent, &parentpath);
ctx.destdir = parentpath.dentry;
ctx.destname = dentry->d_name;
--
2.13.6
next prev parent reply other threads:[~2017-11-16 22:03 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 ` Vivek Goyal [this message]
2017-11-17 15:44 ` [PATCH v7 07/14] ovl: Copy up only metadata during copy up where it makes sense 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
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=20171116220335.13448-8-vgoyal@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.