1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef __XFS_QM_H__
19#define __XFS_QM_H__
20
21#include "xfs_dquot_item.h"
22#include "xfs_dquot.h"
23
24struct xfs_inode;
25
26extern struct kmem_zone *xfs_qm_dqtrxzone;
27
28
29
30
31
32#define XFS_DQITER_MAP_SIZE 10
33
34#define XFS_IS_DQUOT_UNINITIALIZED(dqp) ( \
35 !dqp->q_core.d_blk_hardlimit && \
36 !dqp->q_core.d_blk_softlimit && \
37 !dqp->q_core.d_rtb_hardlimit && \
38 !dqp->q_core.d_rtb_softlimit && \
39 !dqp->q_core.d_ino_hardlimit && \
40 !dqp->q_core.d_ino_softlimit && \
41 !dqp->q_core.d_bcount && \
42 !dqp->q_core.d_rtbcount && \
43 !dqp->q_core.d_icount)
44
45
46
47
48
49
50
51
52
53
54#define XFS_DQUOT_CLUSTER_SIZE_FSB (xfs_filblks_t)1
55
56
57
58
59
60typedef struct xfs_quotainfo {
61 struct radix_tree_root qi_uquota_tree;
62 struct radix_tree_root qi_gquota_tree;
63 struct radix_tree_root qi_pquota_tree;
64 struct mutex qi_tree_lock;
65 struct xfs_inode *qi_uquotaip;
66 struct xfs_inode *qi_gquotaip;
67 struct xfs_inode *qi_pquotaip;
68 struct list_lru qi_lru;
69 int qi_dquots;
70 time_t qi_btimelimit;
71 time_t qi_itimelimit;
72 time_t qi_rtbtimelimit;
73 xfs_qwarncnt_t qi_bwarnlimit;
74 xfs_qwarncnt_t qi_iwarnlimit;
75 xfs_qwarncnt_t qi_rtbwarnlimit;
76 struct mutex qi_quotaofflock;
77 xfs_filblks_t qi_dqchunklen;
78 uint qi_dqperchunk;
79 xfs_qcnt_t qi_bhardlimit;
80 xfs_qcnt_t qi_bsoftlimit;
81 xfs_qcnt_t qi_ihardlimit;
82 xfs_qcnt_t qi_isoftlimit;
83 xfs_qcnt_t qi_rtbhardlimit;
84 xfs_qcnt_t qi_rtbsoftlimit;
85 struct shrinker qi_shrinker;
86} xfs_quotainfo_t;
87
88static inline struct radix_tree_root *
89xfs_dquot_tree(
90 struct xfs_quotainfo *qi,
91 int type)
92{
93 switch (type) {
94 case XFS_DQ_USER:
95 return &qi->qi_uquota_tree;
96 case XFS_DQ_GROUP:
97 return &qi->qi_gquota_tree;
98 case XFS_DQ_PROJ:
99 return &qi->qi_pquota_tree;
100 default:
101 ASSERT(0);
102 }
103 return NULL;
104}
105
106static inline struct xfs_inode *
107xfs_dq_to_quota_inode(struct xfs_dquot *dqp)
108{
109 switch (dqp->dq_flags & XFS_DQ_ALLTYPES) {
110 case XFS_DQ_USER:
111 return dqp->q_mount->m_quotainfo->qi_uquotaip;
112 case XFS_DQ_GROUP:
113 return dqp->q_mount->m_quotainfo->qi_gquotaip;
114 case XFS_DQ_PROJ:
115 return dqp->q_mount->m_quotainfo->qi_pquotaip;
116 default:
117 ASSERT(0);
118 }
119 return NULL;
120}
121
122extern void xfs_trans_mod_dquot(struct xfs_trans *,
123 struct xfs_dquot *, uint, long);
124extern int xfs_trans_reserve_quota_bydquots(struct xfs_trans *,
125 struct xfs_mount *, struct xfs_dquot *,
126 struct xfs_dquot *, struct xfs_dquot *,
127 long, long, uint);
128extern void xfs_trans_dqjoin(struct xfs_trans *, struct xfs_dquot *);
129extern void xfs_trans_log_dquot(struct xfs_trans *, struct xfs_dquot *);
130
131
132
133
134
135
136enum {
137 XFS_QM_TRANS_USR = 0,
138 XFS_QM_TRANS_GRP,
139 XFS_QM_TRANS_PRJ,
140 XFS_QM_TRANS_DQTYPES
141};
142#define XFS_QM_TRANS_MAXDQS 2
143struct xfs_dquot_acct {
144 struct xfs_dqtrx dqs[XFS_QM_TRANS_DQTYPES][XFS_QM_TRANS_MAXDQS];
145};
146
147
148
149
150
151#define XFS_QM_BTIMELIMIT (7 * 24*60*60)
152#define XFS_QM_RTBTIMELIMIT (7 * 24*60*60)
153#define XFS_QM_ITIMELIMIT (7 * 24*60*60)
154
155#define XFS_QM_BWARNLIMIT 5
156#define XFS_QM_IWARNLIMIT 5
157#define XFS_QM_RTBWARNLIMIT 5
158
159extern void xfs_qm_destroy_quotainfo(struct xfs_mount *);
160extern int xfs_qm_write_sb_changes(struct xfs_mount *, __int64_t);
161
162
163extern void xfs_qm_dqpurge_all(struct xfs_mount *, uint);
164extern void xfs_qm_dqrele_all_inodes(struct xfs_mount *, uint);
165
166
167extern int xfs_qm_scall_trunc_qfiles(struct xfs_mount *, uint);
168extern int xfs_qm_scall_getquota(struct xfs_mount *, xfs_dqid_t,
169 uint, struct qc_dqblk *);
170extern int xfs_qm_scall_setqlim(struct xfs_mount *, xfs_dqid_t, uint,
171 struct qc_dqblk *);
172extern int xfs_qm_scall_getqstat(struct xfs_mount *,
173 struct fs_quota_stat *);
174extern int xfs_qm_scall_getqstatv(struct xfs_mount *,
175 struct fs_quota_statv *);
176extern int xfs_qm_scall_quotaon(struct xfs_mount *, uint);
177extern int xfs_qm_scall_quotaoff(struct xfs_mount *, uint);
178
179#endif
180