1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _BCACHEFS_ACL_H
3#define _BCACHEFS_ACL_H
4
5struct bch_inode_unpacked;
6struct bch_hash_info;
7struct bch_inode_info;
8struct posix_acl;
9
10#define BCH_ACL_VERSION	0x0001
11
12typedef struct {
13	__le16		e_tag;
14	__le16		e_perm;
15	__le32		e_id;
16} bch_acl_entry;
17
18typedef struct {
19	__le16		e_tag;
20	__le16		e_perm;
21} bch_acl_entry_short;
22
23typedef struct {
24	__le32		a_version;
25} bch_acl_header;
26
27void bch2_acl_to_text(struct printbuf *, const void *, size_t);
28
29#ifdef CONFIG_BCACHEFS_POSIX_ACL
30
31struct posix_acl *bch2_get_acl(struct mnt_idmap *, struct dentry *, int);
32
33int bch2_set_acl_trans(struct btree_trans *, subvol_inum,
34		       struct bch_inode_unpacked *,
35		       struct posix_acl *, int);
36int bch2_set_acl(struct mnt_idmap *, struct dentry *, struct posix_acl *, int);
37int bch2_acl_chmod(struct btree_trans *, subvol_inum,
38		   struct bch_inode_unpacked *,
39		   umode_t, struct posix_acl **);
40
41#else
42
43static inline int bch2_set_acl_trans(struct btree_trans *trans, subvol_inum inum,
44				     struct bch_inode_unpacked *inode_u,
45				     struct posix_acl *acl, int type)
46{
47	return 0;
48}
49
50static inline int bch2_acl_chmod(struct btree_trans *trans, subvol_inum inum,
51				 struct bch_inode_unpacked *inode,
52				 umode_t mode,
53				 struct posix_acl **new_acl)
54{
55	return 0;
56}
57
58#endif /* CONFIG_BCACHEFS_POSIX_ACL */
59
60#endif /* _BCACHEFS_ACL_H */
61