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