Whamcloud - gitweb
LU-13163 mdc: new kernel function xa_is_value() 81/37481/2
authorLai Siyao <lai.siyao@whamcloud.com>
Sat, 8 Feb 2020 06:30:29 +0000 (22:30 -0800)
committerOleg Drokin <green@whamcloud.com>
Tue, 25 Feb 2020 06:15:33 +0000 (06:15 +0000)
xa_is_value() is added in kernel 4.19-rc6 to replace
radix_tree_entry_exceptional().

This patch is back-ported from the following one:
Lustre-commit: a0a3a29deb82656f9639f46847deac2689973893
Lustre-change: https://review.whamcloud.com/37399

Test-Parameters: trivial clientdistro=el8.1 \
envdefinitions=ONLY=65i mdscount=2 mdtcount=4 \
testlist=sanity,sanity,sanity,sanity,sanity

Signed-off-by: Lai Siyao <lai.siyao@whamcloud.com>
Change-Id: If89aa19c37af8a67debe782d1c77f4ef4dc6f923
Reviewed-on: https://review.whamcloud.com/37481
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/autoconf/lustre-core.m4
lustre/include/lustre_compat.h
lustre/mdc/mdc_request.c

index af6a65b..09823b0 100644 (file)
@@ -2774,6 +2774,23 @@ group_info_gid, [
 ]) # LC_GROUP_INFO_GID
 
 #
+# LC_XA_IS_VALUE
+# kernel 4.19-rc6 commit 3159f943aafdbacb2f94c38fdaadabf2bbde2a14
+# xarray: Replace exceptional entries
+# adds xa_is_value
+#
+AC_DEFUN([LC_XA_IS_VALUE], [
+LB_CHECK_COMPILE([xa_is_value exist],
+xa_is_value, [
+       #include <linux/xarray.h>
+],[
+       xa_is_value(NULL);
+],[
+       AC_DEFINE(HAVE_XA_IS_VALUE, 1, [xa_is_value exist])
+])
+]) # LC_XA_IS_VALUE
+
+#
 # LC_VFS_SETXATTR
 #
 # Kernel version 4.9 commit 5d6c31910bc0713e37628dc0ce677dcb13c8ccf4
@@ -3325,6 +3342,7 @@ AC_DEFUN([LC_PROG_LINUX], [
 
        # 4.18
        LC_INODE_TIMESPEC64
+       LC_XA_IS_VALUE
 
        # kernel patch to extend integrity interface
        LC_BIO_INTEGRITY_PREP_FN
index 534df7c..516cad4 100644 (file)
@@ -385,6 +385,13 @@ static inline int radix_tree_exceptional_entry(void *arg)
 }
 #endif
 
+#ifndef HAVE_XA_IS_VALUE
+static inline bool xa_is_value(void *entry)
+{
+       return radix_tree_exceptional_entry(entry);
+}
+#endif
+
 #ifndef HAVE_TRUNCATE_INODE_PAGES_FINAL
 static inline void truncate_inode_pages_final(struct address_space *map)
 {
index 892860e..1806fd0 100644 (file)
@@ -1107,7 +1107,7 @@ static struct page *mdc_page_locate(struct address_space *mapping, __u64 *hash,
        xa_lock_irq(&mapping->i_pages);
        found = radix_tree_gang_lookup(&mapping->page_tree,
                                       (void **)&page, offset, 1);
-       if (found > 0 && !radix_tree_exceptional_entry(page)) {
+       if (found > 0 && !xa_is_value(page)) {
                struct lu_dirpage *dp;
 
                get_page(page);