For the linux 4.11 kernel passing in struct vm_area_struct
to struct vm_operations members has been removed since
struct vm_area_struct has been merged into struct vm_fault.
Handle these changes in the llite layer.
Linux-commit:
11bac80004499ea59f361ef2a5516c84b6eab675
Test-Parameters: trivial
Change-Id: Ie44dd50de487044e3e2205978b7a36b15f7b0983
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-on: https://review.whamcloud.com/27651
Reviewed-by: Dmitry Eremin <dmitry.eremin@intel.com>
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
]) # LC_HAVE_VM_FAULT_ADDRESS
#
+# LC_VM_OPERATIONS_REMOVE_VMF_ARG
+#
+# Kernel version 4.11 commit 11bac80004499ea59f361ef2a5516c84b6eab675
+# removed struct vm_area_struct as an argument for vm_operations since
+# in the same kernel version struct vma_area_struct was folded into
+# struct vm_fault.
+#
+AC_DEFUN([LC_VM_OPERATIONS_REMOVE_VMF_ARG], [
+LB_CHECK_COMPILE([if 'struct vm_operations' removed struct vm_area_struct],
+vm_operations_no_vm_area_struct, [
+ #include <linux/mm.h>
+],[
+ struct vm_fault vmf;
+
+ ((struct vm_operations_struct *)0)->fault(&vmf);
+ ((struct vm_operations_struct *)0)->page_mkwrite(&vmf);
+],[
+ AC_DEFINE(HAVE_VM_OPS_USE_VM_FAULT_ONLY, 1,
+ ['struct vm_operations' remove struct vm_area_struct argument])
+])
+]) # LC_VM_OPERATIONS_REMOVE_VMF_ARG
+
+#
# LC_PROG_LINUX
#
# Lustre linux kernel checks
LC_IOP_GENERIC_READLINK
LC_HAVE_VM_FAULT_ADDRESS
+ # 4.11
+ LC_VM_OPERATIONS_REMOVE_VMF_ARG
+
#
AS_IF([test "x$enable_server" != xno], [
LC_STACK_SIZE
#endif
}
+#ifdef HAVE_VM_OPS_USE_VM_FAULT_ONLY
+# define ll_filemap_fault(vma, vmf) filemap_fault(vmf)
+#else
+# define ll_filemap_fault(vma, vmf) filemap_fault(vma, vmf)
+#endif
+
#endif /* _LUSTRE_COMPAT_H */
if (ll_sbi_has_fast_read(ll_i2sbi(file_inode(vma->vm_file)))) {
/* do fast fault */
ll_cl_add(vma->vm_file, env, NULL, LCC_MMAP);
- fault_ret = filemap_fault(vma, vmf);
+ fault_ret = ll_filemap_fault(vma, vmf);
ll_cl_remove(vma->vm_file, env);
/* - If there is no error, then the page was found in cache and
RETURN(fault_ret);
}
+#ifdef HAVE_VM_OPS_USE_VM_FAULT_ONLY
+static int ll_fault(struct vm_fault *vmf)
+{
+ struct vm_area_struct *vma = vmf->vma;
+#else
static int ll_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
+#endif
int count = 0;
bool printed = false;
int result;
return result;
}
+#ifdef HAVE_VM_OPS_USE_VM_FAULT_ONLY
+static int ll_page_mkwrite(struct vm_fault *vmf)
+{
+ struct vm_area_struct *vma = vmf->vma;
+#else
static int ll_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
{
+#endif
int count = 0;
bool printed = false;
bool retry;
{
struct vm_fault *vmf = cfio->ft_vmf;
- cfio->ft_flags = filemap_fault(cfio->ft_vma, vmf);
+ cfio->ft_flags = ll_filemap_fault(cfio->ft_vma, vmf);
cfio->ft_flags_valid = 1;
if (vmf->page) {