Make zpl_permission work with 5.12+ kernels

The "permission" inode operation takes a new `struct user_namespace *`
parameter starting in Linux 5.12.

Add a configure check and adapt accordingly.

Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
This commit is contained in:
Ryan Moeller 2021-11-03 08:03:08 -04:00 committed by Ameer Hamza
parent 39b4adf91d
commit de35ac0d1e
2 changed files with 17 additions and 0 deletions

View File

@ -106,7 +106,12 @@ zpl_chmod_acl(struct inode *ip)
}
#endif /* CONFIG_FS_POSIX_ACL */
#if defined(HAVE_IOPS_PERMISSION_USERNS)
extern int zpl_permission(struct user_namespace *userns, struct inode *ip,
int mask);
#else
extern int zpl_permission(struct inode *ip, int mask);
#endif
extern xattr_handler_t *zpl_xattr_handlers[];

View File

@ -1483,7 +1483,11 @@ static xattr_handler_t zpl_xattr_acl_default_handler = {
#endif /* CONFIG_FS_POSIX_ACL */
int
#if defined(HAVE_IOPS_PERMISSION_USERNS)
zpl_permission(struct user_namespace *userns, struct inode *ip, int mask)
#else
zpl_permission(struct inode *ip, int mask)
#endif
{
int to_check = 0, i, ret;
cred_t *cr = NULL;
@ -1496,7 +1500,11 @@ zpl_permission(struct inode *ip, int mask)
*/
if ((ITOZSB(ip)->z_acl_type != ZFS_ACLTYPE_NFSV4) ||
((ITOZ(ip)->z_pflags & ZFS_ACL_TRIVIAL && GENERIC_MASK(mask)))) {
#if defined(HAVE_IOPS_PERMISSION_USERNS)
return (generic_permission(userns, ip, mask));
#else
return (generic_permission(ip, mask));
#endif
}
for (i = 0; i < ARRAY_SIZE(mask2zfs); i++) {
@ -1510,7 +1518,11 @@ zpl_permission(struct inode *ip, int mask)
* NFSv4 ACE. Pass back to default kernel permissions check.
*/
if (to_check == 0) {
#if defined(HAVE_IOPS_PERMISSION_USERNS)
return (generic_permission(userns, ip, mask));
#else
return (generic_permission(ip, mask));
#endif
}
/*