1/* SPDX-License-Identifier: GPL-2.0 */ 2#include <linux/init.h> 3#include <linux/posix_acl.h> 4 5#define REISERFS_ACL_VERSION 0x0001 6 7typedef struct { 8 __le16 e_tag; 9 __le16 e_perm; 10 __le32 e_id; 11} reiserfs_acl_entry; 12 13typedef struct { 14 __le16 e_tag; 15 __le16 e_perm; 16} reiserfs_acl_entry_short; 17 18typedef struct { 19 __le32 a_version; 20} reiserfs_acl_header; 21 22static inline size_t reiserfs_acl_size(int count) 23{ 24 if (count <= 4) { 25 return sizeof(reiserfs_acl_header) + 26 count * sizeof(reiserfs_acl_entry_short); 27 } else { 28 return sizeof(reiserfs_acl_header) + 29 4 * sizeof(reiserfs_acl_entry_short) + 30 (count - 4) * sizeof(reiserfs_acl_entry); 31 } 32} 33 34static inline int reiserfs_acl_count(size_t size) 35{ 36 ssize_t s; 37 size -= sizeof(reiserfs_acl_header); 38 s = size - 4 * sizeof(reiserfs_acl_entry_short); 39 if (s < 0) { 40 if (size % sizeof(reiserfs_acl_entry_short)) 41 return -1; 42 return size / sizeof(reiserfs_acl_entry_short); 43 } else { 44 if (s % sizeof(reiserfs_acl_entry)) 45 return -1; 46 return s / sizeof(reiserfs_acl_entry) + 4; 47 } 48} 49 50#ifdef CONFIG_REISERFS_FS_POSIX_ACL 51struct posix_acl *reiserfs_get_acl(struct inode *inode, int type); 52int reiserfs_set_acl(struct inode *inode, struct posix_acl *acl, int type); 53int reiserfs_acl_chmod(struct inode *inode); 54int reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th, 55 struct inode *dir, struct dentry *dentry, 56 struct inode *inode); 57int reiserfs_cache_default_acl(struct inode *dir); 58 59#else 60 61#define reiserfs_cache_default_acl(inode) 0 62#define reiserfs_get_acl NULL 63#define reiserfs_set_acl NULL 64 65static inline int reiserfs_acl_chmod(struct inode *inode) 66{ 67 return 0; 68} 69 70static inline int 71reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th, 72 const struct inode *dir, struct dentry *dentry, 73 struct inode *inode) 74{ 75 return 0; 76} 77#endif 78