From: Vivek Goyal <vgoyal@redhat.com>
To: linux-unionfs@vger.kernel.org
Cc: amir73il@gmail.com, miklos@szeredi.hu, vgoyal@redhat.com,
ebiederm@xmission.com
Subject: [PATCH 4/9] ovl: Copy up only metadata during copy up where it makes sense
Date: Tue, 10 Oct 2017 11:32:19 -0400 [thread overview]
Message-ID: <1507649544-4539-5-git-send-email-vgoyal@redhat.com> (raw)
In-Reply-To: <1507649544-4539-1-git-send-email-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.
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
---
fs/overlayfs/copy_up.c | 28 ++++++++++++++++++++--------
1 file changed, 20 insertions(+), 8 deletions(-)
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index b626584bb7b4..ebd404629c6d 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -306,11 +306,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;
@@ -328,6 +325,7 @@ struct ovl_copy_up_ctx {
struct dentry *workdir;
bool tmpfile;
bool origin;
+ bool metadata_only;
};
static int ovl_link_up(struct ovl_copy_up_ctx *c)
@@ -458,11 +456,15 @@ static int ovl_copy_up_inode(struct ovl_copy_up_ctx *c, struct dentry *temp)
*/
if (c->origin) {
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->metadata_only = false;
+ }
}
- if (S_ISREG(c->stat.mode)) {
+ if (S_ISREG(c->stat.mode) && !c->metadata_only) {
struct path upperpath;
ovl_path_upper(c->dentry, &upperpath);
@@ -592,10 +594,12 @@ static int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry,
int err;
DEFINE_DELAYED_CALL(done);
struct path parentpath;
+ struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
struct ovl_copy_up_ctx ctx = {
.parent = parent,
.dentry = dentry,
.workdir = ovl_workdir(dentry),
+ .metadata_only = ofs->config.metacopy,
};
if (WARN_ON(!ctx.workdir))
@@ -616,9 +620,17 @@ static int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry,
if (err)
return err;
+ if (!S_ISREG(ctx.stat.mode))
+ ctx.metadata_only = false;
+
/* maybe truncate regular file. this has no effect on dirs */
- if (flags & O_TRUNC)
+ if (flags & O_TRUNC) {
ctx.stat.size = 0;
+ ctx.metadata_only = false;
+ }
+
+ if (flags & (OPEN_FMODE(flags) & FMODE_WRITE))
+ ctx.metadata_only = false;
if (S_ISLNK(ctx.stat.mode)) {
ctx.link = vfs_get_link(ctx.lowerpath.dentry, &done);
--
2.13.5
next prev parent reply other threads:[~2017-10-10 15:32 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-10 15:32 [RFC PATCH 0/9][V3] overlayfs: Delayed copy up of data Vivek Goyal
2017-10-10 15:32 ` [PATCH 1/9] ovl: ovl_check_setxattr() get rid of redundant -EOPNOTSUPP check Vivek Goyal
2017-10-10 15:32 ` [PATCH 2/9] ovl: During copy up, first copy up metadata and then data Vivek Goyal
2017-10-10 15:32 ` [PATCH 3/9] ovl: Provide a mount option metacopy=on/off for metadata copyup Vivek Goyal
2017-10-11 1:36 ` Amir Goldstein
2017-10-11 13:57 ` Vivek Goyal
2017-10-11 16:29 ` Amir Goldstein
2017-10-11 16:53 ` Vivek Goyal
2017-10-11 17:36 ` Amir Goldstein
2017-10-11 18:34 ` Vivek Goyal
2017-10-11 20:29 ` Amir Goldstein
2017-10-12 13:23 ` Vivek Goyal
2017-10-12 13:39 ` Amir Goldstein
2017-10-10 15:32 ` Vivek Goyal [this message]
2017-10-10 15:32 ` [PATCH 5/9] ovl: Set xattr OVL_XATTR_METACOPY on upper file Vivek Goyal
2017-10-10 17:03 ` Amir Goldstein
2017-10-11 20:16 ` Vivek Goyal
2017-10-11 20:44 ` Amir Goldstein
2017-10-10 15:32 ` [PATCH 6/9] ovl: Fix ovl_getattr() to get number of blocks from lower Vivek Goyal
2017-10-10 15:32 ` [PATCH 7/9] ovl: Introduce read/write barriers around metacopy flag update Vivek Goyal
2017-10-10 17:12 ` Amir Goldstein
2017-10-11 20:27 ` Vivek Goyal
2017-10-11 21:08 ` Amir Goldstein
2017-10-13 18:27 ` Vivek Goyal
2017-10-14 6:05 ` Amir Goldstein
2017-10-14 7:00 ` Amir Goldstein
2017-10-16 13:24 ` Vivek Goyal
2017-10-16 13:24 ` Vivek Goyal
2017-10-16 13:31 ` Amir Goldstein
2017-10-10 15:32 ` [PATCH 8/9] ovl: Set OVL_METACOPY flag during ovl_lookup() Vivek Goyal
2017-10-10 15:32 ` [PATCH 9/9] ovl: Return lower dentry if only metadata copy up took place 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=1507649544-4539-5-git-send-email-vgoyal@redhat.com \
--to=vgoyal@redhat.com \
--cc=amir73il@gmail.com \
--cc=ebiederm@xmission.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).