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 10/14] ovl: Fix ovl_getattr() to get number of blocks from lower
Date: Thu, 16 Nov 2017 17:03:31 -0500 [thread overview]
Message-ID: <20171116220335.13448-11-vgoyal@redhat.com> (raw)
In-Reply-To: <20171116220335.13448-1-vgoyal@redhat.com>
If an inode has been copied up metadata only, then we need to query the
number of blocks from lower and fill up the stat->st_blocks.
We need to be careful about races where we are doing stat on one cpu and
data copy up is taking place on other cpu. We want to return stat->st_blocks
either from lower or stable upper and not something in between. Hence,
ovl_has_upperdata() is called first to figure out whether block reporting
will take place from lower or upper.
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
---
fs/overlayfs/inode.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index e94a89e8a0f4..7af8a292d54d 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -76,6 +76,10 @@ int ovl_getattr(const struct path *path, struct kstat *stat,
bool is_dir = S_ISDIR(dentry->d_inode->i_mode);
bool samefs = ovl_same_sb(dentry->d_sb);
int err;
+ bool metacopy = false;
+
+ if (ovl_dentry_upper(dentry) && !ovl_has_upperdata(dentry))
+ metacopy = true;
type = ovl_path_real(dentry, &realpath);
old_cred = ovl_override_creds(dentry->d_sb);
@@ -93,7 +97,8 @@ int ovl_getattr(const struct path *path, struct kstat *stat,
if (!is_dir || samefs) {
if (OVL_TYPE_ORIGIN(type)) {
struct kstat lowerstat;
- u32 lowermask = STATX_INO | (!is_dir ? STATX_NLINK : 0);
+ u32 lowermask = STATX_INO | STATX_BLOCKS |
+ (!is_dir ? STATX_NLINK : 0);
ovl_path_lower(dentry, &realpath);
err = vfs_getattr(&realpath, &lowerstat,
@@ -117,6 +122,9 @@ int ovl_getattr(const struct path *path, struct kstat *stat,
WARN_ON_ONCE(stat->dev != lowerstat.dev);
else
stat->dev = ovl_get_pseudo_dev(dentry);
+
+ if (metacopy)
+ stat->blocks = lowerstat.blocks;
}
if (samefs) {
/*
--
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 ` [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
2017-11-16 22:03 ` Vivek Goyal [this message]
2017-11-17 9:17 ` [PATCH v7 10/14] ovl: Fix ovl_getattr() to get number of blocks from lower 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-11-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.