[pve-devel] [PATCH common 2/3] tempfile: unliked-file fallback

Wolfgang Bumiller w.bumiller at proxmox.com
Wed Nov 2 12:25:50 CET 2016


some file systems (eg. ZFS) don't support O_TMPFILE
---
 src/PVE/Tools.pm | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm
index 305e1bf..0be2efe 100644
--- a/src/PVE/Tools.pm
+++ b/src/PVE/Tools.pm
@@ -2,7 +2,7 @@ package PVE::Tools;
 
 use strict;
 use warnings;
-use POSIX qw(EINTR EEXIST);
+use POSIX qw(EINTR EEXIST EOPNOTSUPP);
 use IO::Socket::IP;
 use Socket qw(AF_INET AF_INET6 AI_ALL AI_V4MAPPED);
 use IO::Select;
@@ -1308,8 +1308,13 @@ sub tempfile {
     my $mode = $opts{mode} // O_RDWR;
     $mode |= O_EXCL if !$opts{allow_links};
 
-    my $fh = IO::File->new($dir, $mode | O_TMPFILE, $perm)
-	or die "failed to create tempfile: $!\n";
+    my $fh = IO::File->new($dir, $mode | O_TMPFILE, $perm);
+    if (!$fh && $! == EOPNOTSUPP) {
+	$dir .= "/.tmpfile.$$";
+	$fh = IO::File->new($dir, $mode | O_CREAT | O_EXCL, $perm);
+	unlink($dir) if $fh;
+    }
+    die "failed to create tempfile: $!\n" if !$fh;
     return $fh;
 }
 
-- 
2.1.4





More information about the pve-devel mailing list