[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