The Pedigree Project 0.1
Ext2Quota.h
1/* Copyright (c) 2026, Pedigree Developers. */
2#ifndef PEDIGREE_EXT2_QUOTA_H
3#define PEDIGREE_EXT2_QUOTA_H
4
5#include "pedigree/kernel/utilities/Tree.h"
6
7#include "modules/system/vfs/QuotaTable.h"
8
11 public:
12 struct InodeCharge {
13 uint32_t uid = 0, gid = 0;
14 uint64_t bytes = 0;
15 bool exempt = false;
16 };
17
19 InodeCharge* find(uint32_t inode) const;
20 QuotaStatus track(uint32_t inode, uint32_t uid, uint32_t gid, uint64_t bytes);
21 QuotaStatus create(uint32_t inode, uint32_t uid, uint32_t gid);
22 QuotaStatus reserve(uint32_t inode, uint64_t bytes);
23 void refund(uint32_t inode, uint64_t bytes);
24 void forget(uint32_t inode);
25 QuotaStatus transfer(uint32_t inode, uint32_t uid, uint32_t gid);
26 QuotaStatus exempt(uint32_t inode, bool exempt);
27 QuotaStatus enable(QuotaType type, QuotaTable& loaded, uint32_t maximumId = 0xffffffffU);
28 void disable(QuotaType type);
29 bool enabled(QuotaType type) const;
30 QuotaTable& table(QuotaType type);
31 const Tree<uint32_t, InodeCharge*>& inodes() const {
32 return m_Inodes;
33 }
34
35 private:
36 QuotaStatus prepareCharge(uint32_t uid, uint32_t gid, uint64_t bytes, uint64_t inodes,
37 bool enforce);
38 void charge(uint32_t uid, uint32_t gid, uint64_t bytes, uint64_t inodes);
39 void refund(uint32_t uid, uint32_t gid, uint64_t bytes, uint64_t inodes);
41 QuotaTable m_Tables[2];
42 bool m_Enabled[2] = {};
43 uint32_t m_MaximumId[2] = {0xffffffffU, 0xffffffffU};
44};
45
46#endif
A key/value dictionary.
Definition Tree.h:33