[pve-devel] [PATCH v3 container 04/12] add mountpoint_insert_staged helper

Wolfgang Bumiller w.bumiller at proxmox.com
Tue Nov 19 10:34:36 CET 2019


This takes care of creating the directories on the fly
before issuing the move_mount() syscall.

Signed-off-by: Wolfgang Bumiller <w.bumiller at 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





More information about the pve-devel mailing list