From: Peng Tao Date: Fri, 9 Mar 2012 16:08:23 +0000 (+0800) Subject: LU-1200 build: check page_mkwrite parameter X-Git-Tag: 2.2.51~4 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=1cea1eba5822af001eeba753630876ad121108ee LU-1200 build: check page_mkwrite parameter In SLES11 SP0 (2.6.27.19-5.1), .page_mkwrite uses struct page * instead of struct vm_fault * as its second parameter. Signed-off-by: Peng Tao Change-Id: I249174b34d90edb31bc3dce79a79da3c795975d5 Reviewed-on: http://review.whamcloud.com/2277 Reviewed-by: Andreas Dilger Tested-by: Hudson Reviewed-by: Yang Sheng Tested-by: Maloo Reviewed-by: James Simmons Reviewed-by: Jinshan Xiong Reviewed-by: Oleg Drokin --- diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index 9c84f41..b1ef9c2 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -1464,6 +1464,24 @@ LB_LINUX_TRY_COMPILE([ # # 2.6.27 # +AC_DEFUN([LC_PGMKWRITE_USE_VMFAULT], +[AC_MSG_CHECKING([kernel .page_mkwrite uses struct vm_fault *]) +tmp_flags="$EXTRA_KCFLAGS" +EXTRA_KCFLAGS="-Werror" +LB_LINUX_TRY_COMPILE([ + #include +],[ + ((struct vm_operations_struct *)0)->page_mkwrite((struct vm_area_struct *)0, (struct vm_fault *)0); +], [ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_PGMKWRITE_USE_VMFAULT, 1, + [kernel vm_operation_struct.page_mkwrite uses struct vm_fault * as second parameter]) +],[ + AC_MSG_RESULT([no]) +]) +EXTRA_KCFLAGS="$tmp_flags" +]) + AC_DEFUN([LC_INODE_PERMISION_2ARGS], [AC_MSG_CHECKING([inode_operations->permission has two args]) LB_LINUX_TRY_COMPILE([ @@ -2214,6 +2232,7 @@ AC_DEFUN([LC_PROG_LINUX], LC_FS_STRUCT_USE_PATH # 2.6.27 + LC_PGMKWRITE_USE_VMFAULT LC_INODE_PERMISION_2ARGS LC_FILE_REMOVE_SUID LC_TRYLOCKPAGE diff --git a/lustre/llite/llite_mmap.c b/lustre/llite/llite_mmap.c index fd324ca..6ce0587 100644 --- a/lustre/llite/llite_mmap.c +++ b/lustre/llite/llite_mmap.c @@ -334,35 +334,6 @@ out_err: RETURN(page); } -static int ll_page_mkwrite(struct vm_area_struct *vma, struct page *vmpage) -{ - int count = 0; - bool printed = false; - bool retry; - int result; - - do { - retry = false; - result = ll_page_mkwrite0(vma, vmpage, &retry); - - if (!printed && ++count > 16) { - CWARN("app(%s): the page %lu of file %lu is under heavy" - " contention.\n", - current->comm, page_index(vmpage), - vma->vm_file->f_dentry->d_inode->i_ino); - printed = true; - } - } while (retry); - - if (result == 0) - unlock_page(vmpage); - else if (result == -ENODATA) - result = 0; /* kernel will know truncate has happened and - * retry */ - - return result; -} - #else /** * Lustre implementation of a vm_operations_struct::fault() method, called by @@ -457,7 +428,38 @@ restart: } return result; } +#endif +#ifndef HAVE_PGMKWRITE_USE_VMFAULT +static int ll_page_mkwrite(struct vm_area_struct *vma, struct page *vmpage) +{ + int count = 0; + bool printed = false; + bool retry; + int result; + + do { + retry = false; + result = ll_page_mkwrite0(vma, vmpage, &retry); + + if (!printed && ++count > 16) { + CWARN("app(%s): the page %lu of file %lu is under heavy" + " contention.\n", + current->comm, page_index(vmpage), + vma->vm_file->f_dentry->d_inode->i_ino); + printed = true; + } + } while (retry); + + if (result == 0) + unlock_page(vmpage); + else if (result == -ENODATA) + result = 0; /* kernel will know truncate has happened and + * retry */ + + return result; +} +#else static int ll_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) { int count = 0;