Implement linux_fadvise64() and linux_fadvise64_64() using

kern_posix_fadvise().

Reviewed by:	silence on emulation@
MFC after:	2 weeks
This commit is contained in:
John Baldwin 2011-12-29 15:34:59 +00:00
parent b77dd854a8
commit dd01579cde
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=228957
7 changed files with 75 additions and 8 deletions

View File

@ -596,6 +596,16 @@ int linux_ioctl_unregister_handler(struct linux_ioctl_handler *h);
#define LINUX_F_WRLCK 1
#define LINUX_F_UNLCK 2
/*
* posix_fadvise advice
*/
#define LINUX_POSIX_FADV_NORMAL 0
#define LINUX_POSIX_FADV_RANDOM 1
#define LINUX_POSIX_FADV_SEQUENTIAL 2
#define LINUX_POSIX_FADV_WILLNEED 3
#define LINUX_POSIX_FADV_DONTNEED 4
#define LINUX_POSIX_FADV_NOREUSE 5
/*
* mount flags
*/

View File

@ -59,7 +59,6 @@ DUMMY(setfsuid);
DUMMY(setfsgid);
DUMMY(pivot_root);
DUMMY(mincore);
DUMMY(fadvise64);
DUMMY(ptrace);
DUMMY(lookup_dcookie);
DUMMY(epoll_create);
@ -72,7 +71,6 @@ DUMMY(timer_gettime);
DUMMY(timer_getoverrun);
DUMMY(timer_delete);
DUMMY(fstatfs64);
DUMMY(fadvise64_64);
DUMMY(mbind);
DUMMY(get_mempolicy);
DUMMY(set_mempolicy);

View File

@ -419,7 +419,8 @@
247 AUE_NULL UNIMPL linux_io_getevents
248 AUE_NULL UNIMPL linux_io_submit
249 AUE_NULL UNIMPL linux_io_cancel
250 AUE_NULL STD { int linux_fadvise64(void); }
250 AUE_NULL STD { int linux_fadvise64(int fd, l_loff_t offset, \
l_size_t len, int advice); }
251 AUE_NULL UNIMPL
252 AUE_EXIT STD { int linux_exit_group(int error_code); }
253 AUE_NULL STD { int linux_lookup_dcookie(void); }
@ -443,7 +444,9 @@
270 AUE_NULL STD { int linux_tgkill(int tgid, int pid, int sig); }
271 AUE_UTIMES STD { int linux_utimes(char *fname, \
struct l_timeval *tptr); }
272 AUE_NULL STD { int linux_fadvise64_64(void); }
272 AUE_NULL STD { int linux_fadvise64_64(int fd, \
l_loff_t offset, l_loff_t len, \
int advice); }
273 AUE_NULL UNIMPL
274 AUE_NULL STD { int linux_mbind(void); }
275 AUE_NULL STD { int linux_get_mempolicy(void); }

View File

@ -1530,3 +1530,48 @@ linux_lchown(struct thread *td, struct linux_lchown_args *args)
LFREEPATH(path);
return (error);
}
static int
convert_fadvice(int advice)
{
switch (advice) {
case LINUX_POSIX_FADV_NORMAL:
return (POSIX_FADV_NORMAL);
case LINUX_POSIX_FADV_RANDOM:
return (POSIX_FADV_RANDOM);
case LINUX_POSIX_FADV_SEQUENTIAL:
return (POSIX_FADV_SEQUENTIAL);
case LINUX_POSIX_FADV_WILLNEED:
return (POSIX_FADV_WILLNEED);
case LINUX_POSIX_FADV_DONTNEED:
return (POSIX_FADV_DONTNEED);
case LINUX_POSIX_FADV_NOREUSE:
return (POSIX_FADV_NOREUSE);
default:
return (-1);
}
}
int
linux_fadvise64(struct thread *td, struct linux_fadvise64_args *args)
{
int advice;
advice = convert_fadvice(args->advice);
if (advice == -1)
return (EINVAL);
return (kern_posix_fadvise(td, args->fd, args->offset, args->len,
advice));
}
int
linux_fadvise64_64(struct thread *td, struct linux_fadvise64_64_args *args)
{
int advice;
advice = convert_fadvice(args->advice);
if (advice == -1)
return (EINVAL);
return (kern_posix_fadvise(td, args->fd, args->offset, args->len,
advice));
}

View File

@ -572,6 +572,16 @@ int linux_ioctl_unregister_handler(struct linux_ioctl_handler *h);
#define LINUX_F_WRLCK 1
#define LINUX_F_UNLCK 2
/*
* posix_fadvise advice
*/
#define LINUX_POSIX_FADV_NORMAL 0
#define LINUX_POSIX_FADV_RANDOM 1
#define LINUX_POSIX_FADV_SEQUENTIAL 2
#define LINUX_POSIX_FADV_WILLNEED 3
#define LINUX_POSIX_FADV_DONTNEED 4
#define LINUX_POSIX_FADV_NOREUSE 5
/*
* mount flags
*/

View File

@ -62,14 +62,12 @@ DUMMY(setfsuid);
DUMMY(setfsgid);
DUMMY(pivot_root);
DUMMY(mincore);
DUMMY(fadvise64);
DUMMY(lookup_dcookie);
DUMMY(epoll_create);
DUMMY(epoll_ctl);
DUMMY(epoll_wait);
DUMMY(remap_file_pages);
DUMMY(fstatfs64);
DUMMY(fadvise64_64);
DUMMY(mbind);
DUMMY(get_mempolicy);
DUMMY(set_mempolicy);

View File

@ -421,7 +421,8 @@
247 AUE_NULL UNIMPL linux_io_getevents
248 AUE_NULL UNIMPL linux_io_submit
249 AUE_NULL UNIMPL linux_io_cancel
250 AUE_NULL STD { int linux_fadvise64(void); }
250 AUE_NULL STD { int linux_fadvise64(int fd, l_loff_t offset, \
l_size_t len, int advice); }
251 AUE_NULL UNIMPL
252 AUE_EXIT STD { int linux_exit_group(int error_code); }
253 AUE_NULL STD { int linux_lookup_dcookie(void); }
@ -447,7 +448,9 @@
270 AUE_NULL STD { int linux_tgkill(int tgid, int pid, int sig); }
271 AUE_UTIMES STD { int linux_utimes(char *fname, \
struct l_timeval *tptr); }
272 AUE_NULL STD { int linux_fadvise64_64(void); }
272 AUE_NULL STD { int linux_fadvise64_64(int fd, \
l_loff_t offset, l_loff_t len, \
int advice); }
273 AUE_NULL UNIMPL
274 AUE_NULL STD { int linux_mbind(void); }
275 AUE_NULL STD { int linux_get_mempolicy(void); }