[pve-devel] [PATCH v3 container 01/12] tools: add can_use_new_mount_api helper

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


Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
---
Changes to v2: use move_mount() instead of fsopen()

 src/PVE/LXC/Tools.pm | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/PVE/LXC/Tools.pm b/src/PVE/LXC/Tools.pm
index bebd7d8..ce37cee 100644
--- a/src/PVE/LXC/Tools.pm
+++ b/src/PVE/LXC/Tools.pm
@@ -2,6 +2,8 @@
 
 package PVE::LXC::Tools;
 
+use Errno qw(ENOSYS);
+
 use PVE::SafeSyslog;
 
 # LXC introduced an `lxc.hook.version` property which allows hooks to be executed in different
@@ -130,4 +132,20 @@ sub cgroup_do_write($$) {
     return 1;
 }
 
+# Check whether the kernel supports the new mount api. This is used in the pre-start hook and in
+# the hotplugging code.
+my $cached_can_use_new_mount_api = undef;
+sub can_use_new_mount_api() {
+    if (!defined($cached_can_use_new_mount_api)) {
+	if (PVE::Tools::move_mount(-1, 0, -1, 0, 0)) {
+	    # This should not be possible...
+	    die "kernel behaved unexpectedly: move_mount(-1, NULL, -1, NULL) did not fail!\n";
+	}
+	# On older kernels the syscall doesn't exist and we get ENOSYS. (For newer kernels this call
+	# will fail with EFAULT instead, since we pass in a NULL pointer as file system name.)
+	$cached_can_use_new_mount_api = ($! != ENOSYS);
+    }
+    return $cached_can_use_new_mount_api;
+}
+
 1;
-- 
2.20.1





More information about the pve-devel mailing list