#
# LC_CANCEL_DIRTY_PAGE
#
-# 4.0.0 kernel removed cancle_dirty_page
+# 4.0.0 kernel removed cancel_dirty_page
#
AC_DEFUN([LC_CANCEL_DIRTY_PAGE], [
LB_CHECK_COMPILE([if cancel_dirty_page still exist],
]) # LC_HAVE_SYNC_READ_WRITE
#
+# LC_NEW_CANCEL_DIRTY_PAGE
+#
+# 4.2 kernel has new cancel_dirty_page
+#
+AC_DEFUN([LC_NEW_CANCEL_DIRTY_PAGE], [
+LB_CHECK_COMPILE([if cancel_dirty_page with one argument exist],
+new_cancel_dirty_page, [
+ #include <linux/mm.h>
+],[
+ cancel_dirty_page(NULL);
+],[
+ AC_DEFINE(HAVE_NEW_CANCEL_DIRTY_PAGE, 1,
+ [cancel_dirty_page with one arguement is available])
+])
+]) # LC_NEW_CANCEL_DIRTY_PAGE
+
+#
# LC_PROG_LINUX
#
# Lustre linux kernel checks
LC_IOV_ITER_RW
LC_HAVE_SYNC_READ_WRITE
+ # 4.2
+ LC_NEW_CANCEL_DIRTY_PAGE
+
#
AS_IF([test "x$enable_server" != xno], [
LC_FUNC_DEV_SET_RDONLY
#endif /* !HAVE_DELETE_FROM_PAGE_CACHE */
static inline void
+ll_cancel_dirty_page(struct address_space *mapping, struct page *page)
+{
+#ifdef HAVE_NEW_CANCEL_DIRTY_PAGE
+ cancel_dirty_page(page);
+#elif defined(HAVE_CANCEL_DIRTY_PAGE)
+ cancel_dirty_page(page, PAGE_SIZE);
+#else
+ if (TestClearPageDirty(page))
+ account_page_cleaned(page, mapping);
+#endif /* HAVE_NEW_CANCEL_DIRTY_PAGE */
+}
+
+static inline void
truncate_complete_page(struct address_space *mapping, struct page *page)
{
if (page->mapping != mapping)
#else
page->mapping->a_ops->invalidatepage(page, 0);
#endif
-#ifdef HAVE_CANCEL_DIRTY_PAGE
- cancel_dirty_page(page, PAGE_SIZE);
-#else
- if (TestClearPageDirty(page))
- account_page_cleaned(page, mapping);
-#endif /* HAVE_CANCEL_DIRTY_PAGE */
+
+ ll_cancel_dirty_page(mapping, page);
ClearPageMappedToDisk(page);
ll_delete_from_page_cache(page);
}