Commit 0b7a8353 by Daniel LEzcano Committed by Daniel Lezcano

factor out pivot_root code

Clean up and factor a bit the pivot_root code. Signed-off-by: 's avatarDaniel Lezcano <dlezcano@fr.ibm.com>
parent 1b09f2c0
...@@ -457,14 +457,12 @@ static int setup_rootfs_pivot_root_cb(char *buffer, void *data) ...@@ -457,14 +457,12 @@ static int setup_rootfs_pivot_root_cb(char *buffer, void *data)
return 0; return 0;
} }
static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir) static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir)
{ {
char path[MAXPATHLEN]; char path[MAXPATHLEN];
void *cbparm[2]; void *cbparm[2];
struct lxc_list mountlist, *iterator; struct lxc_list mountlist, *iterator;
int ok, still_mounted, last_still_mounted; int ok, still_mounted, last_still_mounted;
int pivotdir_is_temp = 0;
/* change into new root fs */ /* change into new root fs */
if (chdir(rootfs)) { if (chdir(rootfs)) {
...@@ -472,34 +470,20 @@ static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir) ...@@ -472,34 +470,20 @@ static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir)
return -1; return -1;
} }
/* create temporary mountpoint if none specified */ if (!pivotdir)
if (!pivotdir) { pivotdir = "oldrootfs";
snprintf(path, sizeof(path), "./lxc-oldrootfs-XXXXXX" ); /* create a default mountpoint if none specified */
if (!mkdtemp(path)) { snprintf(path, sizeof(path), "%s/%s", rootfs, pivotdir);
SYSERROR("can't make temporary mountpoint");
return -1;
}
pivotdir = strdup(&path[1]); /* get rid of leading dot */ if (access(path, F_OK)) {
if (!pivotdir) {
SYSERROR("strdup failed"); if (mkdir_p(path, 0755)) {
SYSERROR("failed to create pivotdir '%s'", path);
return -1; return -1;
} }
pivotdir_is_temp = 1; DEBUG("created '%s' directory", path);
} else {
snprintf(path, sizeof(path), "%s/%s", rootfs, pivotdir);
if (access(path, F_OK)) {
if (mkdir_p(path, 0755)) {
SYSERROR("failed to create pivotdir '%s'", path);
return -1;
}
DEBUG("created '%s' directory", path);
}
} }
DEBUG("mountpoint for old rootfs is '%s'", path); DEBUG("mountpoint for old rootfs is '%s'", path);
...@@ -588,8 +572,8 @@ static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir) ...@@ -588,8 +572,8 @@ static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir)
/* remove temporary mount point, we don't consider the removing /* remove temporary mount point, we don't consider the removing
* as fatal */ * as fatal */
if (pivotdir_is_temp && rmdir(pivotdir)) if (rmdir(pivotdir))
WARN("can't remove temporary mountpoint: %m"); WARN("can't remove mountpoint: %m");
INFO("pivoted to '%s'", rootfs); INFO("pivoted to '%s'", rootfs);
return 0; return 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment