79 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#include <linux/init.h>3#include <linux/posix_acl.h>4 5#define REISERFS_ACL_VERSION 0x00016 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_ACL51struct posix_acl *reiserfs_get_acl(struct inode *inode, int type, bool rcu);52int reiserfs_set_acl(struct mnt_idmap *idmap, struct dentry *dentry,53 struct posix_acl *acl, int type);54int reiserfs_acl_chmod(struct dentry *dentry);55int reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th,56 struct inode *dir, struct dentry *dentry,57 struct inode *inode);58int reiserfs_cache_default_acl(struct inode *dir);59 60#else61 62#define reiserfs_cache_default_acl(inode) 063#define reiserfs_get_acl NULL64#define reiserfs_set_acl NULL65 66static inline int reiserfs_acl_chmod(struct dentry *dentry)67{68 return 0;69}70 71static inline int72reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th,73 const struct inode *dir, struct dentry *dentry,74 struct inode *inode)75{76 return 0;77}78#endif79