Linux 5.18 compat: replace __set_page_dirty_nobuffers
Replace __set_page_dirty_nobuffers with filemap_dirty_folio. Upstream-commit: 6b1f86f8e9c7f9de7ca1cb987b2cf25e99b1ae3a ("Merge tag 'folio-5.18b' of git://git.infradead.org/users/willy/pagecache ") Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Authored-by: Satadru Pramanik <satadru@gmail.com> Signed-off-by: Satadru Pramanik <satadru@gmail.com> Closes #13325 Closes #13380
This commit is contained in:
parent
2a70a09072
commit
7dde17e860
|
@ -0,0 +1,30 @@
|
||||||
|
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])
|
||||||
|
])
|
||||||
|
])
|
|
@ -101,6 +101,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
|
||||||
ZFS_AC_KERNEL_SRC_SET_NLINK
|
ZFS_AC_KERNEL_SRC_SET_NLINK
|
||||||
ZFS_AC_KERNEL_SRC_SGET
|
ZFS_AC_KERNEL_SRC_SGET
|
||||||
ZFS_AC_KERNEL_SRC_LSEEK_EXECUTE
|
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_GETATTR
|
||||||
ZFS_AC_KERNEL_SRC_VFS_FSYNC_2ARGS
|
ZFS_AC_KERNEL_SRC_VFS_FSYNC_2ARGS
|
||||||
ZFS_AC_KERNEL_SRC_VFS_ITERATE
|
ZFS_AC_KERNEL_SRC_VFS_ITERATE
|
||||||
|
@ -217,6 +218,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
|
||||||
ZFS_AC_KERNEL_SET_NLINK
|
ZFS_AC_KERNEL_SET_NLINK
|
||||||
ZFS_AC_KERNEL_SGET
|
ZFS_AC_KERNEL_SGET
|
||||||
ZFS_AC_KERNEL_LSEEK_EXECUTE
|
ZFS_AC_KERNEL_LSEEK_EXECUTE
|
||||||
|
ZFS_AC_KERNEL_VFS_FILEMAP_DIRTY_FOLIO
|
||||||
ZFS_AC_KERNEL_VFS_GETATTR
|
ZFS_AC_KERNEL_VFS_GETATTR
|
||||||
ZFS_AC_KERNEL_VFS_FSYNC_2ARGS
|
ZFS_AC_KERNEL_VFS_FSYNC_2ARGS
|
||||||
ZFS_AC_KERNEL_VFS_ITERATE
|
ZFS_AC_KERNEL_VFS_ITERATE
|
||||||
|
|
|
@ -3556,7 +3556,11 @@ zfs_putpage(struct inode *ip, struct page *pp, struct writeback_control *wbc)
|
||||||
dmu_tx_wait(tx);
|
dmu_tx_wait(tx);
|
||||||
|
|
||||||
dmu_tx_abort(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);
|
__set_page_dirty_nobuffers(pp);
|
||||||
|
#endif
|
||||||
ClearPageError(pp);
|
ClearPageError(pp);
|
||||||
end_page_writeback(pp);
|
end_page_writeback(pp);
|
||||||
zfs_rangelock_exit(lr);
|
zfs_rangelock_exit(lr);
|
||||||
|
|
|
@ -33,9 +33,13 @@
|
||||||
#include <sys/zfs_vfsops.h>
|
#include <sys/zfs_vfsops.h>
|
||||||
#include <sys/zfs_vnops.h>
|
#include <sys/zfs_vnops.h>
|
||||||
#include <sys/zfs_project.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>
|
#include <linux/pagemap.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_VFS_FILEMAP_DIRTY_FOLIO
|
||||||
|
#include <linux/writeback.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When using fallocate(2) to preallocate space, inflate the requested
|
* When using fallocate(2) to preallocate space, inflate the requested
|
||||||
|
@ -1166,6 +1170,9 @@ const struct address_space_operations zpl_address_space_operations = {
|
||||||
#ifdef HAVE_VFS_SET_PAGE_DIRTY_NOBUFFERS
|
#ifdef HAVE_VFS_SET_PAGE_DIRTY_NOBUFFERS
|
||||||
.set_page_dirty = __set_page_dirty_nobuffers,
|
.set_page_dirty = __set_page_dirty_nobuffers,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_VFS_FILEMAP_DIRTY_FOLIO
|
||||||
|
.dirty_folio = filemap_dirty_folio,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct file_operations zpl_file_operations = {
|
const struct file_operations zpl_file_operations = {
|
||||||
|
|
Loading…
Reference in New Issue