Whamcloud - gitweb
LU-16292 llite: delete_from_page_cache not exported 69/49069/14
authorShaun Tancheff <shaun.tancheff@hpe.com>
Thu, 19 Jan 2023 07:38:02 +0000 (01:38 -0600)
committerOleg Drokin <green@whamcloud.com>
Wed, 8 Feb 2023 06:27:16 +0000 (06:27 +0000)
Linux commit v5.16-rc4-44-g452e9e6992fe
filemap: Add filemap_remove_folio and __filemap_remove_folio

Directly removing a folio/page from the page cache is not
available.

Fallback to generic_error_remove_page for regular files,
and truncate_inode_pages_range as appropriate.

Test-Parameters: trivial
HPE-bug-id: LUS-11198
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I634e7d7719d497ce035a78b424be8e9e8c5a8104
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/49069
Reviewed-by: Petros Koutoupis <petros.koutoupis@hpe.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: jsimmons <jsimmons@infradead.org>
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Tested-by: Maloo <maloo@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
lustre/autoconf/lustre-core.m4
lustre/include/lustre_compat.h
lustre/llite/dir.c
lustre/mdc/mdc_request.c

index 97b2bbc..031d293 100644 (file)
@@ -3057,6 +3057,20 @@ AC_DEFUN([LC_HAVE_KIOCB_COMPLETE_2ARGS], [
 ]) # 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
@@ -3559,6 +3573,7 @@ AC_DEFUN([LC_PROG_LINUX_RESULTS], [
        # 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
index 965d331..4f2bd8a 100644 (file)
@@ -593,4 +593,31 @@ static inline void ll_security_release_secctx(char *secdata, u32 seclen)
 #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 */
index 7aa9947..d749989 100644 (file)
@@ -51,6 +51,7 @@
 #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>
@@ -175,7 +176,7 @@ void ll_release_page(struct inode *inode, struct 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);
index db75544..0fcdb49 100644 (file)
@@ -1128,7 +1128,7 @@ static void mdc_release_page(struct page *page, int remove)
        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);
@@ -1370,7 +1370,7 @@ static int mdc_read_page_remote(void *data, struct page *page0)
        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;