LINUX_HAVE_GRAB_CACHE_PAGE_WRITE_BEGIN
LINUX_HAVE_PAGEVEC_LRU_ADD_FILE
LINUX_HAVE_SPLICE_DIRECT_TO_ACTOR
+ LINUX_HAVE_PAGE_OFFSET
+ LINUX_HAVE_ZERO_USER_SEGMENTS
LINUX_STRUCT_TASK_HAS_CRED
LINUX_STRUCT_PROC_DIR_ENTRY_HAS_OWNER
LINUX_HAVE_KMEM_CACHE_T
# endif
#endif
#endif
+
+#ifndef HAVE_PAGE_OFFSET
+static inline loff_t
+page_offset(struct page *pp)
+{
+ return (((loff_t) pp->index) << PAGE_CACHE_SHIFT);
+}
+#endif
+
+#ifndef HAVE_ZERO_USER_SEGMENTS
+static inline void
+zero_user_segments(struct page *pp, unsigned int from1, unsigned int to1,
+ unsigned int from2, unsigned int to2)
+{
+ void *base = kmap_atomic(pp, KM_USER0);
+
+ if (to1 > from1)
+ memset(base + from1, 0, to1 - from1);
+
+ if (to2 > from2)
+ memset(base + from2, 0, to2 - from2);
+
+ flush_dcache_page(pp);
+ kunmap_atomic(base, KM_USER0);
+}
+#endif
+
AC_DEFINE([STRUCT_BDI_HAS_NAME], 1, [define if struct backing_dev_info has a name member])
fi])
+AC_DEFUN([LINUX_HAVE_ZERO_USER_SEGMENTS], [
+ AC_MSG_CHECKING([for zero_user_segments])
+ AC_CACHE_VAL([ac_cv_linux_have_zero_user_segments], [
+ AC_TRY_KBUILD(
+[#include <linux/highmem.h>],
+[zero_user_segments(NULL, 0, 0, 0, 0);],
+ ac_cv_linux_have_zero_user_segments=yes,
+ ac_cv_linux_have_zero_user_segments=no)])
+ AC_MSG_RESULT($ac_cv_linux_have_zero_user_segments)
+ if test "x$ac_cv_linux_have_zero_user_segments" = "xyes"; then
+ AC_DEFINE([HAVE_ZERO_USER_SEGMENTS], 1, [define if your kernel has the zero_user_segments function])
+ fi])
+
+AC_DEFUN([LINUX_HAVE_PAGE_OFFSET], [
+ AC_MSG_CHECKING([for page_offset])
+ AC_CACHE_VAL([ac_cv_linux_have_page_offset], [
+ AC_TRY_KBUILD(
+[#include <linux/pagemap.h>],
+[page_offset(NULL);],
+ ac_cv_linux_have_page_offset=yes,
+ ac_cv_linux_have_page_offset=no)])
+ AC_MSG_RESULT($ac_cv_linux_have_page_offset)
+ if test "x$ac_cv_linux_have_page_offset" = "xyes"; then
+ AC_DEFINE([HAVE_PAGE_OFFSET], 1, [define if your kernel has the page_offset function])
+ fi])
+