[CRIU] [PATCH 1/3] mount: cut a common part of sources for bind-mounts
Andrey Vagin
avagin at openvz.org
Thu Apr 10 03:52:32 PDT 2014
Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
mount.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/mount.c b/mount.c
index 3a37033..c7fba51 100644
--- a/mount.c
+++ b/mount.c
@@ -1137,11 +1137,22 @@ static int restore_ext_mount(struct mount_info *mi)
static int do_bind_mount(struct mount_info *mi)
{
- char rpath[PATH_MAX];
bool shared = mi->shared_id && mi->shared_id == mi->bind->shared_id;
if (!mi->need_plugin) {
- snprintf(rpath, sizeof(rpath), "%s%s", mi->bind->mountpoint, mi->root);
+ char rpath[PATH_MAX];
+ int tok = 0;
+
+ /* Cut common part of root */
+ while (mi->root[tok] == mi->bind->root[tok]) {
+ tok++;
+ if (mi->bind->root[tok] == '\0')
+ break;
+ BUG_ON(mi->root[tok] == '\0');
+ }
+
+ snprintf(rpath, sizeof(rpath), "%s/%s",
+ mi->bind->mountpoint, mi->root + tok);
pr_info("\tBind %s to %s\n", rpath, mi->mountpoint);
if (mount(rpath, mi->mountpoint, NULL,
--
1.8.5.3
More information about the CRIU
mailing list