From 3779913b35634d9d34ac9eb709203275b28050c2 Mon Sep 17 00:00:00 2001 From: Chunwei Chen Date: Tue, 1 Nov 2016 17:19:52 -0700 Subject: Use set_cached_acl and forget_cached_acl when possible Originally, these two function are inline, so their usability is tied to posix_acl_release. However, since Linux 3.14, they became EXPORT_SYMBOL, so we can always use them. In this patch, we create an independent test for these two functions so we can use them when possible. Signed-off-by: Chunwei Chen --- config/kernel-acl.m4 | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'config/kernel-acl.m4') diff --git a/config/kernel-acl.m4 b/config/kernel-acl.m4 index 50b502c31..949583762 100644 --- a/config/kernel-acl.m4 +++ b/config/kernel-acl.m4 @@ -40,6 +40,35 @@ AC_DEFUN([ZFS_AC_KERNEL_POSIX_ACL_RELEASE], [ ]) ]) +dnl # +dnl # 3.14 API change, +dnl # set_cached_acl() and forget_cached_acl() changed from inline to +dnl # EXPORT_SYMBOL. In the former case, they may not be usable because of +dnl # posix_acl_release. In the latter case, we can always use them. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SET_CACHED_ACL_USABLE], [ + AC_MSG_CHECKING([whether set_cached_acl() is usable]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + #include + #include + + MODULE_LICENSE("$ZFS_META_LICENSE"); + ],[ + struct inode *ip = NULL; + struct posix_acl *acl = posix_acl_alloc(1, 0); + set_cached_acl(ip, 0, acl); + forget_cached_acl(ip, 0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SET_CACHED_ACL_USABLE, 1, + [posix_acl_release() is usable]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + dnl # dnl # 3.1 API change, dnl # posix_acl_chmod_masq() is not exported anymore and posix_acl_chmod() @@ -256,7 +285,7 @@ dnl # The kernel get_acl will now check cache before calling i_op->get_acl and dnl # do set_cached_acl after that, so i_op->get_acl don't need to do that dnl # anymore. dnl # -AC_DEFUN([ZFS_AC_KERNE_GET_ACL_HANDLE_CACHE], [ +AC_DEFUN([ZFS_AC_KERNEL_GET_ACL_HANDLE_CACHE], [ AC_MSG_CHECKING([whether uncached_acl_sentinel() exists]) ZFS_LINUX_TRY_COMPILE([ #include -- cgit v1.2.3