From 61e83a6f13064aa9ae0d0e8ce8244493bad1f1bd Mon Sep 17 00:00:00 2001 From: Shaun Tancheff Date: Mon, 14 Nov 2022 22:06:05 -0600 Subject: [PATCH] LU-16113 build: Fix configure tests for lock_page_memcg Linux commit v5.15-12273-gab2f9d2d3626 mm: unexport {,un}lock_page_memcg Fails when lock_page_memcg exists but is not exported. Adjust usage of [un]lock_page_memcg() to vvp_[un]lock_page_memcg() and define the mapping accordingly to avoid the compile error. Test-Parameters: trivial HPE-bug-id: LUS-11189 Signed-off-by: Shaun Tancheff Change-Id: I18029d078a00a0b21a14721bcdf953939b4118a1 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/49144 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Oleg Drokin Reviewed-by: Jian Yu Reviewed-by: Petros Koutoupis --- lustre/autoconf/lustre-core.m4 | 4 +++- lustre/include/lustre_compat.h | 15 ++++++++++++--- lustre/llite/vvp_io.c | 6 +++--- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index 9063dd3..109a90c 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -1636,7 +1636,9 @@ EXTRA_KCFLAGS="$tmp_flags" # # 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], diff --git a/lustre/include/lustre_compat.h b/lustre/include/lustre_compat.h index 6857d81..e8c6128 100644 --- a/lustre/include/lustre_compat.h +++ b/lustre/include/lustre_compat.h @@ -426,9 +426,18 @@ static inline struct timespec current_time(struct inode *inode) #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 diff --git a/lustre/llite/vvp_io.c b/lustre/llite/vvp_io.c index dbb918a..3c500a5 100644 --- a/lustre/llite/vvp_io.c +++ b/lustre/llite/vvp_io.c @@ -1042,12 +1042,12 @@ void vvp_set_pagevec_dirty(struct pagevec *pvec) 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); } } @@ -1075,7 +1075,7 @@ void vvp_set_pagevec_dirty(struct pagevec *pvec) 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); -- 1.8.3.1