linux-unionfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Amir Goldstein <amir73il@gmail.com>
To: Miklos Szeredi <miklos@szeredi.hu>
Cc: Chandan Rajendra <chandan@linux.vnet.ibm.com>,
	Vivek Goyal <vgoyal@redhat.com>,
	linux-unionfs@vger.kernel.org
Subject: [PATCH v8 6/9] ovl: relax same fs constraint for constant st_ino
Date: Tue,  7 Nov 2017 18:58:06 +0200	[thread overview]
Message-ID: <1510073889-11657-7-git-send-email-amir73il@gmail.com> (raw)
In-Reply-To: <1510073889-11657-1-git-send-email-amir73il@gmail.com>

For the case of all layers not on the same fs, return the copy up origin
inode st_dev/st_ino for non-dir from stat(2).

This guaranties constant st_dev/st_ino for non-dir across copy up.
Like the same fs case, st_ino of non-dir is also persistent.

If the st_dev/st_ino for copied up object would have been the same as
that of the real underlying lower file, running diff on underlying lower
file and overlay copied up file would result in diff reporting that the
two files are equal when in fact, they may have different content.

Therefore, unlike the same fs case, st_dev is not uniform across all
overlay object, which is less friednly to du -x.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
 fs/overlayfs/inode.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index 29b0adc77ebe..80a4b61a1149 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -104,6 +104,7 @@ int ovl_getattr(const struct path *path, struct kstat *stat,
 	struct path realpath;
 	const struct cred *old_cred;
 	bool is_dir = S_ISDIR(dentry->d_inode->i_mode);
+	bool samefs = ovl_same_sb(dentry->d_sb);
 	int err;
 
 	type = ovl_path_real(dentry, &realpath);
@@ -113,13 +114,13 @@ int ovl_getattr(const struct path *path, struct kstat *stat,
 		goto out;
 
 	/*
-	 * When all layers are on the same fs, we use st_ino of copy up origin.
+	 * For non-dir or same fs, we use st_ino of the copy up origin.
 	 * This guaranties constant st_dev/st_ino across copy up.
 	 *
 	 * If lower filesystem supports NFS file handles, this also guaranties
 	 * persistent st_ino across mount cycle.
 	 */
-	if (ovl_same_sb(dentry->d_sb)) {
+	if (!is_dir || samefs) {
 		if (OVL_TYPE_ORIGIN(type)) {
 			struct kstat lowerstat;
 			u32 lowermask = STATX_INO | (!is_dir ? STATX_NLINK : 0);
@@ -130,7 +131,9 @@ int ovl_getattr(const struct path *path, struct kstat *stat,
 			if (err)
 				goto out;
 
-			WARN_ON_ONCE(stat->dev != lowerstat.dev);
+			if (samefs)
+				WARN_ON_ONCE(stat->dev != lowerstat.dev);
+
 			/*
 			 * Lower hardlinks may be broken on copy up to different
 			 * upper files, so we cannot use the lower origin st_ino
-- 
2.7.4

  parent reply	other threads:[~2017-11-07 16:57 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-07 16:58 [PATCH v8 0/9] Overlayfs: constant st_ino/d_ino for non-samefs Amir Goldstein
2017-11-07 16:58 ` [PATCH v8 1/9] ovl: move include of ovl_entry.h into overlayfs.h Amir Goldstein
2017-11-07 16:58 ` [PATCH v8 2/9] ovl: re-structure overlay lower layers in-memory Amir Goldstein
2017-11-07 16:58 ` [PATCH v8 3/9] ovl: allocate anonymous devs for lowerdirs Amir Goldstein
2017-11-07 16:58 ` [PATCH v8 4/9] ovl: factor out ovl_map_dev_ino() helper Amir Goldstein
2017-11-07 16:58 ` [PATCH v8 5/9] ovl: return anonymous st_dev for lower inodes Amir Goldstein
2017-11-07 16:58 ` Amir Goldstein [this message]
2017-11-07 16:58 ` [PATCH v8 7/9] ovl: constant st_ino for non-samefs with xino Amir Goldstein
2017-11-07 16:58 ` [PATCH v8 8/9] ovl: consistent d_ino " Amir Goldstein
2017-11-07 16:58 ` [PATCH v8 9/9] ovl: add support for 'xino' mount option Amir Goldstein
2017-11-07 19:39 ` [PATCH v8 0/9] Overlayfs: constant st_ino/d_ino for non-samefs Vivek Goyal
2017-11-07 19:56   ` Amir Goldstein
2017-11-08 10:53 ` Miklos Szeredi
2017-11-08 12:01   ` Amir Goldstein
2017-11-08 13:40     ` Amir Goldstein
2017-11-08 16:50       ` Amir Goldstein
2017-11-09  9:33         ` Miklos Szeredi
2017-11-09 11:25           ` Amir Goldstein
2017-11-10  9:24             ` Amir Goldstein
2017-11-08 18:16       ` Amir Goldstein
2018-03-17  8:29   ` Amir Goldstein
2018-03-22 14:19     ` Miklos Szeredi
2018-03-22 15:07       ` Amir Goldstein
2018-03-22 15:36         ` Miklos Szeredi
2018-03-23 14:00           ` Vivek Goyal
2018-03-23 16:05             ` Miklos Szeredi

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=1510073889-11657-7-git-send-email-amir73il@gmail.com \
    --to=amir73il@gmail.com \
    --cc=chandan@linux.vnet.ibm.com \
    --cc=linux-unionfs@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    --cc=vgoyal@redhat.com \
    /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).