#include <linux/file.h>
#include <linux/mount.h>
#include <linux/namei.h>
#include <linux/utime.h>
#include <linux/syscalls.h>
#include <linux/uaccess.h>
#include <linux/compat.h>
#include <asm/unistd.h>
#include <linux/filelock.h>
static bool nsec_valid(long nsec)
{ … }
int vfs_utimes(const struct path *path, struct timespec64 *times)
{ … }
static int do_utimes_path(int dfd, const char __user *filename,
struct timespec64 *times, int flags)
{ … }
static int do_utimes_fd(int fd, struct timespec64 *times, int flags)
{ … }
long do_utimes(int dfd, const char __user *filename, struct timespec64 *times,
int flags)
{ … }
SYSCALL_DEFINE4(utimensat, int, dfd, const char __user *, filename,
struct __kernel_timespec __user *, utimes, int, flags)
{ … }
#ifdef __ARCH_WANT_SYS_UTIME
static long do_futimesat(int dfd, const char __user *filename,
struct __kernel_old_timeval __user *utimes)
{ … }
SYSCALL_DEFINE3(futimesat, int, dfd, const char __user *, filename,
struct __kernel_old_timeval __user *, utimes)
{ … }
SYSCALL_DEFINE2(utimes, char __user *, filename,
struct __kernel_old_timeval __user *, utimes)
{ … }
SYSCALL_DEFINE2(utime, char __user *, filename, struct utimbuf __user *, times)
{ … }
#endif
#ifdef CONFIG_COMPAT_32BIT_TIME
#ifdef __ARCH_WANT_SYS_UTIME32
SYSCALL_DEFINE2(utime32, const char __user *, filename,
struct old_utimbuf32 __user *, t)
{ … }
#endif
SYSCALL_DEFINE4(utimensat_time32, unsigned int, dfd, const char __user *, filename, struct old_timespec32 __user *, t, int, flags)
{ … }
#ifdef __ARCH_WANT_SYS_UTIME32
static long do_compat_futimesat(unsigned int dfd, const char __user *filename,
struct old_timeval32 __user *t)
{ … }
SYSCALL_DEFINE3(futimesat_time32, unsigned int, dfd,
const char __user *, filename,
struct old_timeval32 __user *, t)
{ … }
SYSCALL_DEFINE2(utimes_time32, const char __user *, filename, struct old_timeval32 __user *, t)
{ … }
#endif
#endif