#
# LC_LOCK_PAGE_MEMCG
#
-# Kernel version 4.6 adds lock_page_memcg
+# Kernel version 4.6 adds lock_page_memcg(page)
+# Linux commit v5.15-12273-gab2f9d2d3626
+# mm: unexport {,un}lock_page_memcg
#
AC_DEFUN([LC_LOCK_PAGE_MEMCG], [
LB_CHECK_COMPILE([if 'lock_page_memcg' is defined],
#define ll_xa_unlock_irqrestore(lockp, flags) spin_unlock_irqrestore(lockp, flags)
#endif
-#ifndef HAVE_LOCK_PAGE_MEMCG
-#define lock_page_memcg(page) do {} while (0)
-#define unlock_page_memcg(page) do {} while (0)
+/* Linux commit v5.15-12273-gab2f9d2d3626
+ * mm: unexport {,un}lock_page_memcg
+ *
+ * Note that the functions are still defined or declared breaking
+ * the simple approach of just defining the missing functions here
+ */
+#ifdef HAVE_LOCK_PAGE_MEMCG
+#define vvp_lock_page_memcg(page) lock_page_memcg((page))
+#define vvp_unlock_page_memcg(page) unlock_page_memcg((page))
+#else
+#define vvp_lock_page_memcg(page)
+#define vvp_unlock_page_memcg(page)
#endif
#ifndef KMEM_CACHE_USERCOPY
ClearPageReclaim(page);
- lock_page_memcg(page);
+ vvp_lock_page_memcg(page);
if (TestSetPageDirty(page)) {
/* page is already dirty .. no extra work needed
* set a flag for the i'th page to be skipped
*/
- unlock_page_memcg(page);
+ vvp_unlock_page_memcg(page);
skip_pages |= (1 << i);
}
}
WARN_ON_ONCE(!PagePrivate(page) && !PageUptodate(page));
ll_account_page_dirtied(page, mapping);
dirtied++;
- unlock_page_memcg(page);
+ vvp_unlock_page_memcg(page);
}
ll_xa_unlock_irqrestore(&mapping->i_pages, flags);