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 3/9] ovl: allocate anonymous devs for lowerdirs
Date: Tue,  7 Nov 2017 18:58:03 +0200	[thread overview]
Message-ID: <1510073889-11657-4-git-send-email-amir73il@gmail.com> (raw)
In-Reply-To: <1510073889-11657-1-git-send-email-amir73il@gmail.com>

Generate unique values of st_dev per lower layer for non-samefs
overlay mount. The unique values are obtained by allocating anonymous
bdevs for each of the lowerdirs in the overlayfs instance.

The anonymous bdev is going to be returned by stat(2) for lowerdir
non-dir entries in non-samefs case.

[amir: split from ovl_getattr() and re-structure patches]

Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
 fs/overlayfs/ovl_entry.h |  1 +
 fs/overlayfs/super.c     | 18 ++++++++++++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/fs/overlayfs/ovl_entry.h b/fs/overlayfs/ovl_entry.h
index 7573f98ddec1..63ef5ae9275b 100644
--- a/fs/overlayfs/ovl_entry.h
+++ b/fs/overlayfs/ovl_entry.h
@@ -21,6 +21,7 @@ struct ovl_layer {
 	struct vfsmount *mnt;
 	/* Index of this layer in mount (upper == 0) */
 	int idx;
+	dev_t pseudo_dev;
 };
 
 struct ovl_path {
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index ceca3a9ac27f..0b8fe8dca187 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -219,8 +219,10 @@ static void ovl_put_super(struct super_block *sb)
 	if (ufs->upper_mnt && ufs->upperdir_locked)
 		ovl_inuse_unlock(ufs->upper_mnt->mnt_root);
 	mntput(ufs->upper_mnt);
-	for (i = 0; i < ufs->numlower; i++)
+	for (i = 0; i < ufs->numlower; i++) {
 		mntput(ufs->lower_layers[i].mnt);
+		free_anon_bdev(ufs->lower_layers[i].pseudo_dev);
+	}
 	kfree(ufs->lower_layers);
 
 	kfree(ufs->config.lowerdir);
@@ -1032,11 +1034,19 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
 		goto out_put_workdir;
 	for (i = 0; i < numlower; i++) {
 		struct vfsmount *mnt;
+		dev_t dev;
+
+		err = get_anon_bdev(&dev);
+		if (err) {
+			pr_err("overlayfs: failed to get anonymous bdev for lowerpath\n");
+			goto out_put_lower_layers;
+		}
 
 		mnt = clone_private_mount(&stack[i]);
 		err = PTR_ERR(mnt);
 		if (IS_ERR(mnt)) {
 			pr_err("overlayfs: failed to clone lowerpath\n");
+			free_anon_bdev(dev);
 			goto out_put_lower_layers;
 		}
 		/*
@@ -1047,6 +1057,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
 
 		ufs->lower_layers[ufs->numlower].mnt = mnt;
 		ufs->lower_layers[ufs->numlower].idx = i + 1;
+		ufs->lower_layers[ufs->numlower].pseudo_dev = dev;
 		ufs->numlower++;
 
 		/* Check if all lower layers are on same sb */
@@ -1161,8 +1172,11 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
 out_free_oe:
 	kfree(oe);
 out_put_lower_layers:
-	for (i = 0; i < ufs->numlower; i++)
+	for (i = 0; i < ufs->numlower; i++) {
+		if (ufs->lower_layers[i].mnt)
+			free_anon_bdev(ufs->lower_layers[i].pseudo_dev);
 		mntput(ufs->lower_layers[i].mnt);
+	}
 	kfree(ufs->lower_layers);
 out_put_workdir:
 	dput(ufs->workdir);
-- 
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 ` Amir Goldstein [this message]
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 ` [PATCH v8 6/9] ovl: relax same fs constraint for constant st_ino Amir Goldstein
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-4-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).