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 | |
7 | typedef struct { |
8 | __le16 e_tag; |
9 | __le16 e_perm; |
10 | __le32 e_id; |
11 | } reiserfs_acl_entry; |
12 | |
13 | typedef struct { |
14 | __le16 e_tag; |
15 | __le16 e_perm; |
16 | } reiserfs_acl_entry_short; |
17 | |
18 | typedef struct { |
19 | __le32 ; |
20 | } ; |
21 | |
22 | static 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 | |
34 | static 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 |
51 | struct posix_acl *reiserfs_get_acl(struct inode *inode, int type, bool rcu); |
52 | int reiserfs_set_acl(struct mnt_idmap *idmap, struct dentry *dentry, |
53 | struct posix_acl *acl, int type); |
54 | int reiserfs_acl_chmod(struct dentry *dentry); |
55 | int reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th, |
56 | struct inode *dir, struct dentry *dentry, |
57 | struct inode *inode); |
58 | int reiserfs_cache_default_acl(struct inode *dir); |
59 | |
60 | #else |
61 | |
62 | #define reiserfs_cache_default_acl(inode) 0 |
63 | #define reiserfs_get_acl NULL |
64 | #define reiserfs_set_acl NULL |
65 | |
66 | static inline int reiserfs_acl_chmod(struct dentry *dentry) |
67 | { |
68 | return 0; |
69 | } |
70 | |
71 | static inline int |
72 | reiserfs_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 | #endif |
79 | |