])
#
-# 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])
+ ])
])
])
#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)
}
#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)