Whamcloud - gitweb
LU-1337 vfs: generic_permission has 2 args
authorLiu Xuezhao <xuezhao.liu@emc.com>
Mon, 25 Jun 2012 09:12:05 +0000 (17:12 +0800)
committerOleg Drokin <green@whamcloud.com>
Tue, 31 Jul 2012 15:38:11 +0000 (11:38 -0400)
generic_permission has 2 args since kernel 3.1
(kernel commit 2830ba7f34ebb27c4e5b8b6ef408cd6d74860890).

Signed-off-by: Liu Xuezhao <xuezhao.liu@emc.com>
Change-Id: I1ee2d127af3dfdc3c24f1466d9e183918c3a652c
Reviewed-on: http://review.whamcloud.com/3397
Tested-by: Hudson
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Yang Sheng <ys@whamcloud.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: James Simmons <uja.ornl@gmail.com>
lustre/autoconf/lustre-core.m4
lustre/include/linux/lustre_compat25.h
lustre/llite/file.c

index 07abda3..58b6996 100644 (file)
@@ -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 <linux/fs.h>
+       #include <linux/fs.h>
 ],[
-        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 <linux/fs.h>
+       ],[
+               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])
+       ])
 ])
 ])
 
index 7e242ac..172da72 100644 (file)
@@ -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)
index 4afdd0f..4f7385c 100644 (file)
@@ -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)