mirror of
https://git.proxmox.com/git/pve-common
synced 2025-07-15 09:30:05 +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,
|
setresuid => &SYS_setresuid,
|
||||||
fchownat => &SYS_fchownat,
|
fchownat => &SYS_fchownat,
|
||||||
mount => &SYS_mount,
|
mount => &SYS_mount,
|
||||||
|
renameat2 => &SYS_renameat2,
|
||||||
|
|
||||||
# These use asm-generic, so they're the same across (sane) architectures. We use numbers
|
# 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...
|
# 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,
|
use constant {AT_EMPTY_PATH => 0x1000,
|
||||||
AT_FDCWD => -100};
|
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 {
|
sub run_with_timeout {
|
||||||
my ($timeout, $code, @param) = @_;
|
my ($timeout, $code, @param) = @_;
|
||||||
|
|
||||||
@ -1462,6 +1467,11 @@ sub fsync($) {
|
|||||||
return 0 == syscall(PVE::Syscall::fsync, $fileno);
|
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 {
|
sub sync_mountpoint {
|
||||||
my ($path) = @_;
|
my ($path) = @_;
|
||||||
sysopen my $fd, $path, O_RDONLY|O_CLOEXEC or die "failed to open $path: $!\n";
|
sysopen my $fd, $path, O_RDONLY|O_CLOEXEC or die "failed to open $path: $!\n";
|
||||||
|
Loading…
Reference in New Issue
Block a user