From ace982b51ca853fd8c9c4a624530f6d260c97651 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Thu, 12 Feb 2015 21:01:23 -0500 Subject: [PATCH] prepare-root: Move /sysroot instead of unmounting it I originally thought this would fix a regression, but it turns out this wasn't the bug. But pushing anyways as it's just cleaner. https://bugzilla.gnome.org/show_bug.cgi?id=743891 --- src/switchroot/ostree-prepare-root.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/src/switchroot/ostree-prepare-root.c b/src/switchroot/ostree-prepare-root.c index 193c3bb3..f24409f6 100644 --- a/src/switchroot/ostree-prepare-root.c +++ b/src/switchroot/ostree-prepare-root.c @@ -185,14 +185,6 @@ main(int argc, char *argv[]) exit (EXIT_FAILURE); } - /* Link to the physical root below the deployment root */ - snprintf (destpath, sizeof(destpath), "%s/sysroot", newroot); - if (mount (root_mountpoint, destpath, NULL, MS_BIND, NULL) < 0) - { - perrorv ("Failed to bind mount %s to '%s'", root_mountpoint, destpath); - exit (EXIT_FAILURE); - } - /* Link to the deployment's /var */ snprintf (srcpath, sizeof(srcpath), "%s/../../var", deploy_path); snprintf (destpath, sizeof(destpath), "%s/var", newroot); @@ -220,14 +212,11 @@ main(int argc, char *argv[]) touch_run_ostree (); - /* Unmount the previous /sysroot now. Otherwise, we would be - * placing our newroot mount on top of an existing mount, and after - * we do a switch_root, we would no longer be able to ever unmount - * the original mount. - */ - if (umount (root_mountpoint) < 0) + /* Move physical root to $deployment/sysroot */ + snprintf (destpath, sizeof(destpath), "%s/sysroot", newroot); + if (mount (root_mountpoint, destpath, NULL, MS_MOVE, NULL) < 0) { - perrorv ("failed to umount original mount at %s", root_mountpoint); + perrorv ("Failed to MS_MOVE %s to '%s'", root_mountpoint, destpath); exit (EXIT_FAILURE); }