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], [])
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
#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 */
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);