]) # LC_HAVE_KIOCB_COMPLETE_2ARGS
#
+# LC_EXPORTS_DELETE_FROM_PAGE_CACHE
+#
+# Linux commit v5.16-rc4-44-g452e9e6992fe
+# filemap: Add filemap_remove_folio and __filemap_remove_folio
+#
+# Also removes the export of delete_from_page_cache
+#
+AC_DEFUN([LC_EXPORTS_DELETE_FROM_PAGE_CACHE], [
+LB_CHECK_EXPORT([delete_from_page_cache], [mm/filemap.c],
+ [AC_DEFINE(HAVE_DELETE_FROM_PAGE_CACHE, 1,
+ [delete_from_page_cache is exported])])
+]) # LC_EXPORTS_DELETE_FROM_PAGE_CACHE
+
+#
# LC_HAVE_INVALIDATE_FOLIO
#
# linux commit v5.17-rc4-10-g128d1f8241d6
# 5.16
LC_HAVE_SECURITY_DENTRY_INIT_WITH_XATTR_NAME_ARG
LC_HAVE_KIOCB_COMPLETE_2ARGS
+ LC_EXPORTS_DELETE_FROM_PAGE_CACHE
# 5.17
LC_HAVE_INVALIDATE_FOLIO
#define ll_set_acl(ns, inode, acl, type) ll_set_acl(inode, acl, type)
#endif
+/**
+ * delete_from_page_cache is not exported anymore
+ */
+#ifdef HAVE_DELETE_FROM_PAGE_CACHE
+#define cfs_delete_from_page_cache(page) delete_from_page_cache((page))
+#else
+static inline void cfs_delete_from_page_cache(struct page *page)
+{
+ if (!page->mapping)
+ return;
+ LASSERT(PageLocked(page));
+ get_page(page);
+ unlock_page(page);
+ /* on entry page is locked */
+ if (S_ISREG(page->mapping->host->i_mode)) {
+ generic_error_remove_page(page->mapping, page);
+ } else {
+ loff_t lstart = page->index << PAGE_SHIFT;
+ loff_t lend = lstart + PAGE_SIZE - 1;
+
+ truncate_inode_pages_range(page->mapping, lstart, lend);
+ }
+ lock_page(page);
+ put_page(page);
+}
+#endif
+
#endif /* _LUSTRE_COMPAT_H */
#include <uapi/linux/lustre/lustre_ioctl.h>
#include <lustre_lib.h>
#include <lustre_dlm.h>
+#include <lustre_compat.h>
#include <lustre_fid.h>
#include <lustre_kernelcomm.h>
#include <lustre_swab.h>
if (remove) {
lock_page(page);
if (likely(page->mapping != NULL))
- delete_from_page_cache(page);
+ cfs_delete_from_page_cache(page);
unlock_page(page);
}
put_page(page);
if (remove) {
lock_page(page);
if (likely(page->mapping != NULL))
- delete_from_page_cache(page);
+ cfs_delete_from_page_cache(page);
unlock_page(page);
}
put_page(page);
rc = mdc_getpage(rp->rp_exp, fid, rp->rp_off, page_pool, npages, &req);
if (rc < 0) {
/* page0 is special, which was added into page cache early */
- delete_from_page_cache(page0);
+ cfs_delete_from_page_cache(page0);
} else {
int lu_pgs;