1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BCACHEFS_QUOTA_H
3 #define _BCACHEFS_QUOTA_H
6 #include "quota_types.h"
8 enum bch_validate_flags
;
9 extern const struct bch_sb_field_ops bch_sb_field_ops_quota
;
11 int bch2_quota_validate(struct bch_fs
*, struct bkey_s_c
, enum bch_validate_flags
);
12 void bch2_quota_to_text(struct printbuf
*, struct bch_fs
*, struct bkey_s_c
);
14 #define bch2_bkey_ops_quota ((struct bkey_ops) { \
15 .key_validate = bch2_quota_validate, \
16 .val_to_text = bch2_quota_to_text, \
20 static inline struct bch_qid
bch_qid(struct bch_inode_unpacked
*u
)
22 return (struct bch_qid
) {
23 .q
[QTYP_USR
] = u
->bi_uid
,
24 .q
[QTYP_GRP
] = u
->bi_gid
,
25 .q
[QTYP_PRJ
] = u
->bi_project
? u
->bi_project
- 1 : 0,
29 static inline unsigned enabled_qtypes(struct bch_fs
*c
)
31 return ((c
->opts
.usrquota
<< QTYP_USR
)|
32 (c
->opts
.grpquota
<< QTYP_GRP
)|
33 (c
->opts
.prjquota
<< QTYP_PRJ
));
36 #ifdef CONFIG_BCACHEFS_QUOTA
38 int bch2_quota_acct(struct bch_fs
*, struct bch_qid
, enum quota_counters
,
39 s64
, enum quota_acct_mode
);
41 int bch2_quota_transfer(struct bch_fs
*, unsigned, struct bch_qid
,
42 struct bch_qid
, u64
, enum quota_acct_mode
);
44 void bch2_fs_quota_exit(struct bch_fs
*);
45 void bch2_fs_quota_init(struct bch_fs
*);
46 int bch2_fs_quota_read(struct bch_fs
*);
48 extern const struct quotactl_ops bch2_quotactl_operations
;
52 static inline int bch2_quota_acct(struct bch_fs
*c
, struct bch_qid qid
,
53 enum quota_counters counter
, s64 v
,
54 enum quota_acct_mode mode
)
59 static inline int bch2_quota_transfer(struct bch_fs
*c
, unsigned qtypes
,
61 struct bch_qid src
, u64 space
,
62 enum quota_acct_mode mode
)
67 static inline void bch2_fs_quota_exit(struct bch_fs
*c
) {}
68 static inline void bch2_fs_quota_init(struct bch_fs
*c
) {}
69 static inline int bch2_fs_quota_read(struct bch_fs
*c
) { return 0; }
73 #endif /* _BCACHEFS_QUOTA_H */