mirror of
https://git.proxmox.com/git/pve-common
synced 2025-07-15 04:06:52 +00:00
Syscalls/Tools: add renameat2
Mostly for the ability to atomically swap files. Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
2531c455e8
commit
bd9eb367a0
@ -17,6 +17,7 @@ BEGIN {
|
||||
setresuid => &SYS_setresuid,
|
||||
fchownat => &SYS_fchownat,
|
||||
mount => &SYS_mount,
|
||||
renameat2 => &SYS_renameat2,
|
||||
|
||||
# These use asm-generic, so they're the same across (sane) architectures. We use numbers
|
||||
# since they're not in perl's syscall.ph yet...
|
||||
|
@ -105,6 +105,11 @@ use constant {O_PATH => 0x00200000,
|
||||
use constant {AT_EMPTY_PATH => 0x1000,
|
||||
AT_FDCWD => -100};
|
||||
|
||||
# from <linux/fs.h>
|
||||
use constant {RENAME_NOREPLACE => (1 << 0),
|
||||
RENAME_EXCHANGE => (1 << 1),
|
||||
RENAME_WHITEOUT => (1 << 2)};
|
||||
|
||||
sub run_with_timeout {
|
||||
my ($timeout, $code, @param) = @_;
|
||||
|
||||
@ -1462,6 +1467,11 @@ sub fsync($) {
|
||||
return 0 == syscall(PVE::Syscall::fsync, $fileno);
|
||||
}
|
||||
|
||||
sub renameat2($$$$$) {
|
||||
my ($olddirfd, $oldpath, $newdirfd, $newpath, $flags) = @_;
|
||||
return 0 == syscall(PVE::Syscall::renameat2, $olddirfd, $oldpath, $newdirfd, $newpath, $flags);
|
||||
}
|
||||
|
||||
sub sync_mountpoint {
|
||||
my ($path) = @_;
|
||||
sysopen my $fd, $path, O_RDONLY|O_CLOEXEC or die "failed to open $path: $!\n";
|
||||
|
Loading…
Reference in New Issue
Block a user