From: Liu Xuezhao Date: Mon, 25 Jun 2012 09:12:05 +0000 (+0800) Subject: LU-1337 vfs: generic_permission has 2 args X-Git-Tag: 2.2.93~41 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=d018b087c962b8c66e8dc479fc66e964a2e5fd94 LU-1337 vfs: generic_permission has 2 args generic_permission has 2 args since kernel 3.1 (kernel commit 2830ba7f34ebb27c4e5b8b6ef408cd6d74860890). Signed-off-by: Liu Xuezhao Change-Id: I1ee2d127af3dfdc3c24f1466d9e183918c3a652c Reviewed-on: http://review.whamcloud.com/3397 Tested-by: Hudson Reviewed-by: Andreas Dilger Reviewed-by: Yang Sheng Tested-by: Maloo Reviewed-by: James Simmons --- diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index 07abda3..58b6996 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -1747,21 +1747,34 @@ LB_LINUX_TRY_COMPILE([ ]) # -# 2.6.38 generic_permission taken 4 paremater. +# 2.6.38 generic_permission taken 4 parameters. # in fact, it means rcu-walk aware permission bring. # +# 3.1 generic_permission taken 2 parameters. +# see kernel commit 2830ba7f34ebb27c4e5b8b6ef408cd6d74860890 +# AC_DEFUN([LC_GENERIC_PERMISSION], -[AC_MSG_CHECKING([if generic_permission take 4 arguments]) +[AC_MSG_CHECKING([if generic_permission take 2 or 4 arguments]) LB_LINUX_TRY_COMPILE([ - #include + #include ],[ - generic_permission(NULL, 0, 0, NULL); + generic_permission(NULL, 0); ],[ - AC_DEFINE(HAVE_GENERIC_PERMISSION_4ARGS, 1, - [generic_permission taken 4 arguments]) - AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_GENERIC_PERMISSION_2ARGS, 1, + [generic_permission taken 2 arguments]) + AC_MSG_RESULT([yes, 2 args]) ],[ - AC_MSG_RESULT([no]) + LB_LINUX_TRY_COMPILE([ + #include + ],[ + generic_permission(NULL, 0, 0, NULL); + ],[ + AC_DEFINE(HAVE_GENERIC_PERMISSION_4ARGS, 1, + [generic_permission taken 4 arguments]) + AC_MSG_RESULT([yes, 4 args]) + ],[ + AC_MSG_RESULT([no]) + ]) ]) ]) diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h index 7e242ac..172da72 100644 --- a/lustre/include/linux/lustre_compat25.h +++ b/lustre/include/linux/lustre_compat25.h @@ -147,12 +147,15 @@ static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt, #define ll_permission(inode,mask,nd) permission(inode,mask,nd) #endif -#ifdef HAVE_GENERIC_PERMISSION_4ARGS -#define ll_generic_permission(inode, mask, flags, check_acl) \ - generic_permission(inode, mask, flags, check_acl) +#ifdef HAVE_GENERIC_PERMISSION_2ARGS +# define ll_generic_permission(inode, mask, flags, check_acl) \ + generic_permission(inode, mask) +#elif defined HAVE_GENERIC_PERMISSION_4ARGS +# define ll_generic_permission(inode, mask, flags, check_acl) \ + generic_permission(inode, mask, flags, check_acl) #else -#define ll_generic_permission(inode, mask, flags, check_acl) \ - generic_permission(inode, mask, check_acl) +# define ll_generic_permission(inode, mask, flags, check_acl) \ + generic_permission(inode, mask, check_acl) #endif #define ll_pgcache_lock(mapping) cfs_spin_lock(&mapping->page_lock) diff --git a/lustre/llite/file.c b/lustre/llite/file.c index 4afdd0f..4f7385c 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -2527,39 +2527,40 @@ int ll_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, } #endif - +#ifndef HAVE_GENERIC_PERMISSION_2ARGS static int -#ifdef HAVE_GENERIC_PERMISSION_4ARGS +# ifdef HAVE_GENERIC_PERMISSION_4ARGS lustre_check_acl(struct inode *inode, int mask, unsigned int flags) -#else +# else lustre_check_acl(struct inode *inode, int mask) -#endif +# endif { -#ifdef CONFIG_FS_POSIX_ACL - struct ll_inode_info *lli = ll_i2info(inode); - struct posix_acl *acl; - int rc; - ENTRY; +# ifdef CONFIG_FS_POSIX_ACL + struct ll_inode_info *lli = ll_i2info(inode); + struct posix_acl *acl; + int rc; + ENTRY; -#ifdef HAVE_GENERIC_PERMISSION_4ARGS - if (flags & IPERM_FLAG_RCU) - return -ECHILD; -#endif - cfs_spin_lock(&lli->lli_lock); - acl = posix_acl_dup(lli->lli_posix_acl); - cfs_spin_unlock(&lli->lli_lock); +# ifdef HAVE_GENERIC_PERMISSION_4ARGS + if (flags & IPERM_FLAG_RCU) + return -ECHILD; +# endif + cfs_spin_lock(&lli->lli_lock); + acl = posix_acl_dup(lli->lli_posix_acl); + cfs_spin_unlock(&lli->lli_lock); - if (!acl) - RETURN(-EAGAIN); + if (!acl) + RETURN(-EAGAIN); - rc = posix_acl_permission(inode, acl, mask); - posix_acl_release(acl); + rc = posix_acl_permission(inode, acl, mask); + posix_acl_release(acl); - RETURN(rc); -#else - return -EAGAIN; -#endif + RETURN(rc); +# else /* !CONFIG_FS_POSIX_ACL */ + return -EAGAIN; +# endif /* CONFIG_FS_POSIX_ACL */ } +#endif /* HAVE_GENERIC_PERMISSION_2ARGS */ #ifdef HAVE_GENERIC_PERMISSION_4ARGS int ll_inode_permission(struct inode *inode, int mask, unsigned int flags)