This takes care of creating the directories on the fly before issuing the move_mount() syscall.
Signed-off-by: Wolfgang Bumiller <w.bumil...@proxmox.com> --- New in v3: To make sure both users of this also create the destination directories. src/PVE/LXC.pm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm index 77679fa..d747039 100644 --- a/src/PVE/LXC.pm +++ b/src/PVE/LXC.pm @@ -1425,6 +1425,25 @@ sub mountpoint_stage { return wantarray ? ($path, $loop, $dev, $fd) : $fd; } +sub mountpoint_insert_staged { + my ($mount_fd, $rootdir_fd, $mp_dir, $opt, $rootuid, $rootgid) = @_; + + if (!defined($rootdir_fd)) { + sysopen($rootdir_fd, '.', O_PATH | O_DIRECTORY) + or die "failed to open '.': $!\n"; + } + + my $dest_fd = walk_tree_nofollow_fd('/', $rootdir_fd, $mp_dir, 1, $rootuid, $rootgid); + + PVE::Tools::move_mount( + fileno($mount_fd), + '', + fileno($dest_fd), + '', + &MOVE_MOUNT_F_EMPTY_PATH | &MOVE_MOUNT_T_EMPTY_PATH, + ) or die "failed to move '$opt' into container hierarchy: $!\n"; +} + # Use $stage_mount, $rootdir is treated as a temporary path to "stage" the file system. The user # can then open a file descriptor to it which can be used with the `move_mount` syscall. # Note that if the kernel does not support the new mount API, this will not perform any action -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel