LINUX_HAVE_SPLICE_DIRECT_TO_ACTOR
LINUX_HAVE_PAGE_OFFSET
LINUX_HAVE_ZERO_USER_SEGMENTS
+ LINUX_HAVE_VFS_LLSEEK
LINUX_STRUCT_TASK_HAS_CRED
LINUX_STRUCT_PROC_DIR_ENTRY_HAS_OWNER
LINUX_HAVE_KMEM_CACHE_T
}
#endif
+#ifndef HAVE_VFS_LLSEEK
+static inline loff_t
+vfs_llseek(struct file *filp, loff_t offset, int origin) {
+ if (filp->f_op->llseek)
+ return filp->f_op->llseek(filp, offset, origin);
+ return default_llseek(filp, offset, origin);
+}
+#endif
+
TO_USER_SPACE();
/* seek to the desired position. Return -1 on error. */
- if (filp->f_op->llseek) {
- if (filp->f_op->llseek(filp, (loff_t) uiop->uio_offset, 0) != uiop->uio_offset) {
- code = -1;
- goto out;
- }
- } else
- filp->f_pos = uiop->uio_offset;
+ if (vfs_llseek(filp, (loff_t) uiop->uio_offset, 0) != uiop->uio_offset) {
+ code = -1;
+ goto out;
+ }
while (code == 0 && uiop->uio_resid > 0 && uiop->uio_iovcnt > 0) {
iov = uiop->uio_iov;
AC_DEFINE([HAVE_PAGE_OFFSET], 1, [define if your kernel has the page_offset function])
fi])
+AC_DEFUN([LINUX_HAVE_VFS_LLSEEK], [
+ AC_MSG_CHECKING([for vfs_llseek])
+ AC_CACHE_VAL([ac_cv_linux_have_vfs_llseek], [
+ AC_TRY_KBUILD(
+[#include <linux/fs.h>],
+[vfs_llseek(NULL, 0, 0);],
+ ac_cv_linux_have_vfs_llseek=yes,
+ ac_cv_linux_have_vfs_llseek=no)])
+ AC_MSG_RESULT($ac_cv_linux_have_vfs_llseek)
+ if test "x$ac_cv_linux_have_vfs_llseek" = "xyes"; then
+ AC_DEFINE([HAVE_VFS_LLSEEK], 1, [define if your kernel has the vfs_llseek function])
+ fi])
+