diff options
Diffstat (limited to 'fs/hostfs/hostfs_user.c')
-rw-r--r-- | fs/hostfs/hostfs_user.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/fs/hostfs/hostfs_user.c b/fs/hostfs/hostfs_user.c index 67838f3aa20a..9765dab95cbd 100644 --- a/fs/hostfs/hostfs_user.c +++ b/fs/hostfs/hostfs_user.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <sys/time.h> | 14 | #include <sys/time.h> |
15 | #include <sys/types.h> | 15 | #include <sys/types.h> |
16 | #include <sys/vfs.h> | 16 | #include <sys/vfs.h> |
17 | #include <sys/syscall.h> | ||
17 | #include "hostfs.h" | 18 | #include "hostfs.h" |
18 | #include <utime.h> | 19 | #include <utime.h> |
19 | 20 | ||
@@ -360,6 +361,33 @@ int rename_file(char *from, char *to) | |||
360 | return 0; | 361 | return 0; |
361 | } | 362 | } |
362 | 363 | ||
364 | int rename2_file(char *from, char *to, unsigned int flags) | ||
365 | { | ||
366 | int err; | ||
367 | |||
368 | #ifndef SYS_renameat2 | ||
369 | # ifdef __x86_64__ | ||
370 | # define SYS_renameat2 316 | ||
371 | # endif | ||
372 | # ifdef __i386__ | ||
373 | # define SYS_renameat2 353 | ||
374 | # endif | ||
375 | #endif | ||
376 | |||
377 | #ifdef SYS_renameat2 | ||
378 | err = syscall(SYS_renameat2, AT_FDCWD, from, AT_FDCWD, to, flags); | ||
379 | if (err < 0) { | ||
380 | if (errno != ENOSYS) | ||
381 | return -errno; | ||
382 | else | ||
383 | return -EINVAL; | ||
384 | } | ||
385 | return 0; | ||
386 | #else | ||
387 | return -EINVAL; | ||
388 | #endif | ||
389 | } | ||
390 | |||
363 | int do_statfs(char *root, long *bsize_out, long long *blocks_out, | 391 | int do_statfs(char *root, long *bsize_out, long long *blocks_out, |
364 | long long *bfree_out, long long *bavail_out, | 392 | long long *bfree_out, long long *bavail_out, |
365 | long long *files_out, long long *ffree_out, | 393 | long long *files_out, long long *ffree_out, |