--- /dev/null
+dnl #
+dnl # Linux 5.18 uses filemap_dirty_folio in lieu of
+dnl # ___set_page_dirty_nobuffers
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_SRC_VFS_FILEMAP_DIRTY_FOLIO], [
+ ZFS_LINUX_TEST_SRC([vfs_has_filemap_dirty_folio], [
+ #include <linux/pagemap.h>
+ #include <linux/writeback.h>
+
+ static const struct address_space_operations
+ aops __attribute__ ((unused)) = {
+ .dirty_folio = filemap_dirty_folio,
+ };
+ ],[])
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_VFS_FILEMAP_DIRTY_FOLIO], [
+ dnl #
+ dnl # Linux 5.18 uses filemap_dirty_folio in lieu of
+ dnl # ___set_page_dirty_nobuffers
+ dnl #
+ AC_MSG_CHECKING([filemap_dirty_folio exists])
+ ZFS_LINUX_TEST_RESULT([vfs_has_filemap_dirty_folio], [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_VFS_FILEMAP_DIRTY_FOLIO, 1,
+ [filemap_dirty_folio exists])
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+])
ZFS_AC_KERNEL_SRC_SET_NLINK
ZFS_AC_KERNEL_SRC_SGET
ZFS_AC_KERNEL_SRC_LSEEK_EXECUTE
+ ZFS_AC_KERNEL_SRC_VFS_FILEMAP_DIRTY_FOLIO
ZFS_AC_KERNEL_SRC_VFS_GETATTR
ZFS_AC_KERNEL_SRC_VFS_FSYNC_2ARGS
ZFS_AC_KERNEL_SRC_VFS_ITERATE
ZFS_AC_KERNEL_SET_NLINK
ZFS_AC_KERNEL_SGET
ZFS_AC_KERNEL_LSEEK_EXECUTE
+ ZFS_AC_KERNEL_VFS_FILEMAP_DIRTY_FOLIO
ZFS_AC_KERNEL_VFS_GETATTR
ZFS_AC_KERNEL_VFS_FSYNC_2ARGS
ZFS_AC_KERNEL_VFS_ITERATE
dmu_tx_wait(tx);
dmu_tx_abort(tx);
+#ifdef HAVE_VFS_FILEMAP_DIRTY_FOLIO
+ filemap_dirty_folio(page_mapping(pp), page_folio(pp));
+#else
__set_page_dirty_nobuffers(pp);
+#endif
ClearPageError(pp);
end_page_writeback(pp);
zfs_rangelock_exit(lr);
#include <sys/zfs_vfsops.h>
#include <sys/zfs_vnops.h>
#include <sys/zfs_project.h>
-#ifdef HAVE_VFS_SET_PAGE_DIRTY_NOBUFFERS
+#if defined(HAVE_VFS_SET_PAGE_DIRTY_NOBUFFERS) || \
+ defined(HAVE_VFS_FILEMAP_DIRTY_FOLIO)
#include <linux/pagemap.h>
#endif
+#ifdef HAVE_VFS_FILEMAP_DIRTY_FOLIO
+#include <linux/writeback.h>
+#endif
/*
* When using fallocate(2) to preallocate space, inflate the requested
#ifdef HAVE_VFS_SET_PAGE_DIRTY_NOBUFFERS
.set_page_dirty = __set_page_dirty_nobuffers,
#endif
+#ifdef HAVE_VFS_FILEMAP_DIRTY_FOLIO
+ .dirty_folio = filemap_dirty_folio,
+#endif
};
const struct file_operations zpl_file_operations = {