diff options
author | Chunwei Chen <[email protected]> | 2016-08-08 17:26:21 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2016-08-09 10:03:04 -0700 |
commit | afb6c031e87d511abd9f0f4ec629ab1972490269 (patch) | |
tree | 830fd62e1b69d8f82bbfa14f635299f55be430d1 /config/kernel-acl.m4 | |
parent | 88c4c7a0671afef9016446e0132ba86622929092 (diff) |
Linux 4.7 compat: fix zpl_get_acl returns invalid acl pointer
Starting from Linux 4.7, get_acl will set acl cache pointer to temporary
sentinel value before calling i_op->get_acl. Therefore we can't compare
against ACL_NOT_CACHED and return.
Since from Linux 3.14, get_acl already check the cache for us, so we
disable this in zpl_get_acl.
Linux 4.7 also does set_cached_acl for us so we disable it in zpl_get_acl.
Signed-off-by: Chunwei Chen <[email protected]>
Signed-off-by: Nikolay Borisov <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #4944
Closes #4946
Diffstat (limited to 'config/kernel-acl.m4')
-rw-r--r-- | config/kernel-acl.m4 | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/config/kernel-acl.m4 b/config/kernel-acl.m4 index d2a1821c5..50b502c31 100644 --- a/config/kernel-acl.m4 +++ b/config/kernel-acl.m4 @@ -249,3 +249,23 @@ AC_DEFUN([ZFS_AC_KERNEL_INODE_OPERATIONS_GET_ACL], [ AC_MSG_RESULT(no) ]) ]) + +dnl # +dnl # 4.7 API change, +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_MSG_CHECKING([whether uncached_acl_sentinel() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include <linux/fs.h> + ],[ + void *sentinel __attribute__ ((unused)) = uncached_acl_sentinel(NULL); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_KERNEL_GET_ACL_HANDLE_CACHE, 1, [uncached_acl_sentinel() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) |