From 7e1ee743f49add696a0a1f6773a9a847f737d9fd Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Wed, 2 Nov 2016 12:25:50 +0100 Subject: [PATCH] tempfile: unliked-file fallback 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.39.2