Line data Source code
1 : // SPDX-License-Identifier: GPL-2.0 2 : /* 3 : File: fs/ext4/acl.h 4 : 5 : (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org> 6 : */ 7 : 8 : #include <linux/posix_acl_xattr.h> 9 : 10 : #define EXT4_ACL_VERSION 0x0001 11 : 12 : typedef struct { 13 : __le16 e_tag; 14 : __le16 e_perm; 15 : __le32 e_id; 16 : } ext4_acl_entry; 17 : 18 : typedef struct { 19 : __le16 e_tag; 20 : __le16 e_perm; 21 : } ext4_acl_entry_short; 22 : 23 : typedef struct { 24 : __le32 a_version; 25 : } ext4_acl_header; 26 : 27 : static inline size_t ext4_acl_size(int count) 28 : { 29 913303 : if (count <= 4) { 30 910659 : return sizeof(ext4_acl_header) + 31 : count * sizeof(ext4_acl_entry_short); 32 : } else { 33 2644 : return sizeof(ext4_acl_header) + 34 2644 : 4 * sizeof(ext4_acl_entry_short) + 35 2644 : (count - 4) * sizeof(ext4_acl_entry); 36 : } 37 : } 38 : 39 3 : static inline int ext4_acl_count(size_t size) 40 : { 41 3 : ssize_t s; 42 3 : size -= sizeof(ext4_acl_header); 43 3 : s = size - 4 * sizeof(ext4_acl_entry_short); 44 3 : if (s < 0) { 45 0 : if (size % sizeof(ext4_acl_entry_short)) 46 : return -1; 47 0 : return size / sizeof(ext4_acl_entry_short); 48 : } else { 49 3 : if (s % sizeof(ext4_acl_entry)) 50 : return -1; 51 3 : return s / sizeof(ext4_acl_entry) + 4; 52 : } 53 : } 54 : 55 : #ifdef CONFIG_EXT4_FS_POSIX_ACL 56 : 57 : /* acl.c */ 58 : struct posix_acl *ext4_get_acl(struct inode *inode, int type, bool rcu); 59 : int ext4_set_acl(struct mnt_idmap *idmap, struct dentry *dentry, 60 : struct posix_acl *acl, int type); 61 : extern int ext4_init_acl(handle_t *, struct inode *, struct inode *); 62 : 63 : #else /* CONFIG_EXT4_FS_POSIX_ACL */ 64 : #include <linux/sched.h> 65 : #define ext4_get_acl NULL 66 : #define ext4_set_acl NULL 67 : 68 : static inline int 69 : ext4_init_acl(handle_t *handle, struct inode *inode, struct inode *dir) 70 : { 71 : return 0; 72 : } 73 : #endif /* CONFIG_EXT4_FS_POSIX_ACL */ 74 :