Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Nov 2011 14:29:01 GMT
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 201165 for review
Message-ID:  <201111041429.pA4ET1WN067414@skunkworks.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@201165?ac=10

Change 201165 by jhb@jhb_fiver on 2011/11/04 14:28:14

	Implement fadvise() wrappers for the Linux ABI.

Affected files ...

.. //depot/projects/fadvise/sys/amd64/linux32/linux.h#2 edit
.. //depot/projects/fadvise/sys/amd64/linux32/linux32_dummy.c#2 edit
.. //depot/projects/fadvise/sys/amd64/linux32/syscalls.master#2 edit
.. //depot/projects/fadvise/sys/compat/linux/linux_file.c#2 edit
.. //depot/projects/fadvise/sys/i386/linux/linux.h#2 edit
.. //depot/projects/fadvise/sys/i386/linux/linux_dummy.c#2 edit
.. //depot/projects/fadvise/sys/i386/linux/syscalls.master#2 edit

Differences ...

==== //depot/projects/fadvise/sys/amd64/linux32/linux.h#2 (text+ko) ====

@@ -597,6 +597,16 @@
 #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
  */
 #define	LINUX_MS_RDONLY		0x0001

==== //depot/projects/fadvise/sys/amd64/linux32/linux32_dummy.c#2 (text+ko) ====

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

==== //depot/projects/fadvise/sys/amd64/linux32/syscalls.master#2 (text+ko) ====

@@ -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); }

==== //depot/projects/fadvise/sys/compat/linux/linux_file.c#2 (text+ko) ====

@@ -1530,3 +1530,46 @@
 	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(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(args->fd, args->offset, args->len, advice));
+}

==== //depot/projects/fadvise/sys/i386/linux/linux.h#2 (text+ko) ====

@@ -573,6 +573,16 @@
 #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
  */
 #define	LINUX_MS_RDONLY		0x0001

==== //depot/projects/fadvise/sys/i386/linux/linux_dummy.c#2 (text+ko) ====

@@ -62,14 +62,12 @@
 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);

==== //depot/projects/fadvise/sys/i386/linux/syscalls.master#2 (text+ko) ====

@@ -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); }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201111041429.pA4ET1WN067414>