Whamcloud - gitweb
LU-14195 llite: add force_uaccess_{begin,end} helpers
authorJian Yu <yujian@whamcloud.com>
Tue, 6 Jul 2021 23:00:20 +0000 (16:00 -0700)
committerLi Xi <lixi@ddn.com>
Tue, 13 Jul 2021 08:23:13 +0000 (08:23 +0000)
Linux kernel version 5.10 adds force_uaccess_begin() and
force_uaccess_end() helpers to wrap get_fs() and set_fs()
for undoing any damange done by set_fs(KERNEL_DS).

Lustre-change: https://review.whamcloud.com/44165
Lustre-commit: TBD (from 597a8a1e0c4c09b86b7d4e860cdcd6a3fedcb6dc)

Fixes: a84af70dcab ("LU-12358 pcc: add project quota support on PCC backend")
Change-Id: I68745a8a1e26312ffe6ee8388f962b9c834df97b
Signed-off-by: Jian Yu <yujian@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/44160
Reviewed-by: Yingjin Qian <qian@ddn.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Li Xi <lixi@ddn.com>
lustre/autoconf/lustre-core.m4
lustre/include/lustre_compat.h
lustre/llite/pcc.c

index 7fe0879..dbd6445 100644 (file)
@@ -2289,6 +2289,29 @@ lock_manager_ops_lm_compare_owner, [
 EXTRA_KCFLAGS="$tmp_flags"
 ]) # LC_LM_COMPARE_OWNER_EXISTS
 
+#
+# LC_FORCE_UACCESS_BEGIN
+#
+# Kernel version 5.10 adds force_uaccess_begin() and force_uaccess_end()
+# to wrap get_fs() and set_fs() for undoing any damange done by
+# set_fs(KERNEL_DS).
+#
+AC_DEFUN([LC_FORCE_UACCESS_BEGIN], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if 'force_uaccess_begin()' is defined],
+force_uaccess_begin, [
+       #include <linux/uaccess.h>
+],[
+       mm_segment_t old_fs = force_uaccess_begin();
+       force_uaccess_end(old_fs);
+],[
+       AC_DEFINE(HAVE_FORCE_UACCESS_BEGIN, 1,
+               ['force_uaccess_begin()' is defined])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LC_FORCE_UACCESS_BEGIN
+
 AC_DEFUN([LC_PROG_LINUX_SRC], [])
 AC_DEFUN([LC_PROG_LINUX_RESULTS], [])
 
@@ -2496,6 +2519,9 @@ AC_DEFUN([LC_PROG_LINUX], [
        LC_BIO_BI_PHYS_SEGMENTS
        LC_LM_COMPARE_OWNER_EXISTS
 
+       # 5.10
+       LC_FORCE_UACCESS_BEGIN
+
        # kernel patch to extend integrity interface
        LC_BIO_INTEGRITY_PREP_FN
 
index bd34cae..f25af9f 100644 (file)
@@ -597,4 +597,9 @@ static inline void ll_security_release_secctx(char *secdata, u32 seclen)
 #endif
 }
 
+#ifndef HAVE_FORCE_UACCESS_BEGIN
+#define force_uaccess_begin() get_fs(); set_fs(KERNEL_DS)
+#define force_uaccess_end(fs_save) set_fs(fs_save)
+#endif
+
 #endif /* _LUSTRE_COMPAT_H */
index 68ce3fa..9f57900 100644 (file)
@@ -3204,11 +3204,10 @@ int pcc_file_reset_projid(struct pcc_dataset *dataset, struct file *file,
                RETURN(0);
        }
 
-       old_fs = get_fs();
-       set_fs(KERNEL_DS);
+       old_fs = force_uaccess_begin();
        rc = file->f_op->unlocked_ioctl(file, FS_IOC_FSSETXATTR,
                                        (unsigned long)&fsx);
-       set_fs(old_fs);
+       force_uaccess_end(old_fs);
        if (rc == -EOPNOTSUPP || rc == -ENOTTY) {
                CWARN("%s: cache fs project quota off, disabling: rc = %d\n",
                      dataset->pccd_pathname, rc);