From: Liu Xuezhao Date: Thu, 9 Aug 2012 02:37:39 +0000 (+0800) Subject: LU-1337 llite: kernel 3.1 renames lock-manager ops X-Git-Tag: 2.3.54~19 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=539d4218b8c6d025bb2ebffec313a38b53e08cd1;ds=sidebyside LU-1337 llite: kernel 3.1 renames lock-manager ops Kernel 3.1 renames lock-manager ops(lock_manager_operations) from fl_xxx to lm_xxx (commit 8fb47a4fbf858a164e973b8ea8ef5e83e61f2e50). Add LC_LM_XXX_LOCK_MANAGER_OPS/HAVE_LM_XXX_LOCK_MANAGER_OPS to check. Re-arrange several macro definitions in lustre-core.m4 as kernel version sequence. Signed-off-by: Liu Xuezhao Change-Id: Ic86ec9db2f8262ef7ab9f5f2fb51ca79591120a4 Reviewed-on: http://review.whamcloud.com/3579 Tested-by: Hudson Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Yang Sheng Reviewed-by: Oleg Drokin --- diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index 0bfadda..b771c53 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -1713,6 +1713,18 @@ EXTRA_KCFLAGS="$tmp_flags" ]) # +# 2.6.38 export simple_setattr +# +AC_DEFUN([LC_EXPORT_SIMPLE_SETATTR], +[LB_CHECK_SYMBOL_EXPORT([simple_setattr], +[fs/libfs.c],[ +AC_DEFINE(HAVE_SIMPLE_SETATTR, 1, + [simple_setattr is exported by the kernel]) +],[ +]) +]) + +# # 2.6.39 remove unplug_fn from request_queue. # AC_DEFUN([LC_REQUEST_QUEUE_UNPLUG_FN], @@ -1782,14 +1794,42 @@ LB_LINUX_TRY_COMPILE([ ]) # -# 2.6.38 export simple_setattr +# 3.1.1 has ext4_blocks_for_truncate # -AC_DEFUN([LC_EXPORT_SIMPLE_SETATTR], -[LB_CHECK_SYMBOL_EXPORT([simple_setattr], -[fs/libfs.c],[ -AC_DEFINE(HAVE_SIMPLE_SETATTR, 1, - [simple_setattr is exported by the kernel]) +AC_DEFUN([LC_BLOCKS_FOR_TRUNCATE], +[AC_MSG_CHECKING([if kernel has ext4_blocks_for_truncate]) +LB_LINUX_TRY_COMPILE([ + #include + #include "$LINUX/fs/ext4/ext4_jbd2.h" + #include "$LINUX/fs/ext4/truncate.h" ],[ + ext4_blocks_for_truncate(NULL); +],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_BLOCKS_FOR_TRUNCATE, 1, + [kernel has ext4_blocks_for_truncate]) +],[ + AC_MSG_RESULT([no]) +]) +]) + +# +# 3.1 renames lock-manager ops(lock_manager_operations) from fl_xxx to lm_xxx +# see kernel commit 8fb47a4fbf858a164e973b8ea8ef5e83e61f2e50 +# +AC_DEFUN([LC_LM_XXX_LOCK_MANAGER_OPS], +[AC_MSG_CHECKING([if lock-manager ops renamed to lm_xxx]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + struct lock_manager_operations lm_ops; + lm_ops.lm_compare_owner = NULL; +],[ + AC_DEFINE(HAVE_LM_XXX_LOCK_MANAGER_OPS, 1, + [lock-manager ops renamed to lm_xxx]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) ]) ]) @@ -1832,26 +1872,6 @@ LB_LINUX_TRY_COMPILE([ ]) # -# 3.1.1 has ext4_blocks_for_truncate -# -AC_DEFUN([LC_BLOCKS_FOR_TRUNCATE], -[AC_MSG_CHECKING([if kernel has ext4_blocks_for_truncate]) -LB_LINUX_TRY_COMPILE([ - #include - #include "$LINUX/fs/ext4/ext4_jbd2.h" - #include "$LINUX/fs/ext4/truncate.h" -],[ - ext4_blocks_for_truncate(NULL); -],[ - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_BLOCKS_FOR_TRUNCATE, 1, - [kernel has ext4_blocks_for_truncate]) -],[ - AC_MSG_RESULT([no]) -]) -]) - -# # LC_PROG_LINUX # # Lustre linux kernel checks @@ -1991,15 +2011,18 @@ AC_DEFUN([LC_PROG_LINUX], # 2.6.39 LC_REQUEST_QUEUE_UNPLUG_FN - LC_HAVE_FSTYPE_MOUNT - - # 3.3 - LC_HAVE_MIGRATE_HEADER - LC_MIGRATEPAGE_4ARGS + LC_HAVE_FSTYPE_MOUNT # 3.1.1 LC_BLOCKS_FOR_TRUNCATE + # 3.1 + LC_LM_XXX_LOCK_MANAGER_OPS + + # 3.3 + LC_HAVE_MIGRATE_HEADER + LC_MIGRATEPAGE_4ARGS + # if test x$enable_server = xyes ; then AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server]) diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h index 6a9c060..6b8d155 100644 --- a/lustre/include/linux/lustre_compat25.h +++ b/lustre/include/linux/lustre_compat25.h @@ -758,5 +758,9 @@ static inline bool selinux_is_enabled(void) } #endif +#ifndef HAVE_LM_XXX_LOCK_MANAGER_OPS +# define lm_compare_owner fl_compare_owner +#endif + #endif /* __KERNEL__ */ #endif /* _COMPAT25_H */ diff --git a/lustre/llite/file.c b/lustre/llite/file.c index f793d52..d03ec76 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -2155,15 +2155,15 @@ int ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock) } flock.l_flock.pid = file_lock->fl_pid; - /* Somewhat ugly workaround for svc lockd. - * lockd installs custom fl_lmops->fl_compare_owner that checks - * for the fl_owner to be the same (which it always is on local node - * I guess between lockd processes) and then compares pid. - * As such we assign pid to the owner field to make it all work, - * conflict with normal locks is unlikely since pid space and - * pointer space for current->files are not intersecting */ - if (file_lock->fl_lmops && file_lock->fl_lmops->fl_compare_owner) - flock.l_flock.owner = (unsigned long)file_lock->fl_pid; + /* Somewhat ugly workaround for svc lockd. + * lockd installs custom fl_lmops->lm_compare_owner that checks + * for the fl_owner to be the same (which it always is on local node + * I guess between lockd processes) and then compares pid. + * As such we assign pid to the owner field to make it all work, + * conflict with normal locks is unlikely since pid space and + * pointer space for current->files are not intersecting */ + if (file_lock->fl_lmops && file_lock->fl_lmops->lm_compare_owner) + flock.l_flock.owner = (unsigned long)file_lock->fl_pid; switch (file_lock->fl_type) { case F_RDLCK: