1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 21da177e4SLinus Torvalds /* 31da177e4SLinus Torvalds File: fs/ext2/acl.h 41da177e4SLinus Torvalds 51da177e4SLinus Torvalds (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org> 61da177e4SLinus Torvalds */ 71da177e4SLinus Torvalds 89a59f452SChristoph Hellwig #include <linux/posix_acl_xattr.h> 91da177e4SLinus Torvalds 101da177e4SLinus Torvalds #define EXT2_ACL_VERSION 0x0001 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds typedef struct { 131da177e4SLinus Torvalds __le16 e_tag; 141da177e4SLinus Torvalds __le16 e_perm; 151da177e4SLinus Torvalds __le32 e_id; 161da177e4SLinus Torvalds } ext2_acl_entry; 171da177e4SLinus Torvalds 181da177e4SLinus Torvalds typedef struct { 191da177e4SLinus Torvalds __le16 e_tag; 201da177e4SLinus Torvalds __le16 e_perm; 211da177e4SLinus Torvalds } ext2_acl_entry_short; 221da177e4SLinus Torvalds 231da177e4SLinus Torvalds typedef struct { 241da177e4SLinus Torvalds __le32 a_version; 251da177e4SLinus Torvalds } ext2_acl_header; 261da177e4SLinus Torvalds ext2_acl_size(int count)271da177e4SLinus Torvaldsstatic inline size_t ext2_acl_size(int count) 281da177e4SLinus Torvalds { 291da177e4SLinus Torvalds if (count <= 4) { 301da177e4SLinus Torvalds return sizeof(ext2_acl_header) + 311da177e4SLinus Torvalds count * sizeof(ext2_acl_entry_short); 321da177e4SLinus Torvalds } else { 331da177e4SLinus Torvalds return sizeof(ext2_acl_header) + 341da177e4SLinus Torvalds 4 * sizeof(ext2_acl_entry_short) + 351da177e4SLinus Torvalds (count - 4) * sizeof(ext2_acl_entry); 361da177e4SLinus Torvalds } 371da177e4SLinus Torvalds } 381da177e4SLinus Torvalds ext2_acl_count(size_t size)391da177e4SLinus Torvaldsstatic inline int ext2_acl_count(size_t size) 401da177e4SLinus Torvalds { 411da177e4SLinus Torvalds ssize_t s; 421da177e4SLinus Torvalds size -= sizeof(ext2_acl_header); 431da177e4SLinus Torvalds s = size - 4 * sizeof(ext2_acl_entry_short); 441da177e4SLinus Torvalds if (s < 0) { 451da177e4SLinus Torvalds if (size % sizeof(ext2_acl_entry_short)) 461da177e4SLinus Torvalds return -1; 471da177e4SLinus Torvalds return size / sizeof(ext2_acl_entry_short); 481da177e4SLinus Torvalds } else { 491da177e4SLinus Torvalds if (s % sizeof(ext2_acl_entry)) 501da177e4SLinus Torvalds return -1; 511da177e4SLinus Torvalds return s / sizeof(ext2_acl_entry) + 4; 521da177e4SLinus Torvalds } 531da177e4SLinus Torvalds } 541da177e4SLinus Torvalds 551da177e4SLinus Torvalds #ifdef CONFIG_EXT2_FS_POSIX_ACL 561da177e4SLinus Torvalds 571da177e4SLinus Torvalds /* acl.c */ 580cad6246SMiklos Szeredi extern struct posix_acl *ext2_get_acl(struct inode *inode, int type, bool rcu); 59*13e83a49SChristian Brauner extern int ext2_set_acl(struct mnt_idmap *idmap, struct dentry *dentry, 60549c7297SChristian Brauner struct posix_acl *acl, int type); 611da177e4SLinus Torvalds extern int ext2_init_acl (struct inode *, struct inode *); 621da177e4SLinus Torvalds 631da177e4SLinus Torvalds #else 641da177e4SLinus Torvalds #include <linux/sched.h> 654e34e719SChristoph Hellwig #define ext2_get_acl NULL 661da177e4SLinus Torvalds #define ext2_set_acl NULL 671da177e4SLinus Torvalds ext2_init_acl(struct inode * inode,struct inode * dir)681da177e4SLinus Torvaldsstatic inline int ext2_init_acl (struct inode *inode, struct inode *dir) 691da177e4SLinus Torvalds { 701da177e4SLinus Torvalds return 0; 711da177e4SLinus Torvalds } 721da177e4SLinus Torvalds #endif 731da177e4SLinus Torvalds 74