Blame view
fs/xfs/xfs_dquot.h
6.07 KB
0b61f8a40 xfs: convert to S... |
1 |
// SPDX-License-Identifier: GPL-2.0 |
1da177e4c Linux-2.6.12-rc2 |
2 |
/* |
4ce3121f6 [XFS] Update lice... |
3 4 |
* Copyright (c) 2000-2005 Silicon Graphics, Inc. * All Rights Reserved. |
1da177e4c Linux-2.6.12-rc2 |
5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
*/ #ifndef __XFS_DQUOT_H__ #define __XFS_DQUOT_H__ /* * Dquots are structures that hold quota information about a user or a group, * much like inodes are for files. In fact, dquots share many characteristics * with inodes. However, dquots can also be a centralized resource, relative * to a collection of inodes. In this respect, dquots share some characteristics * of the superblock. * XFS dquots exploit both those in its algorithms. They make every attempt * to not be a bottleneck when quotas are on and have minimal impact, if any, * when quotas are off. */ |
1da177e4c Linux-2.6.12-rc2 |
19 20 |
struct xfs_mount; struct xfs_trans; |
b13664511 xfs: xfs_dquot pr... |
21 22 23 24 25 26 |
enum { XFS_QLOWSP_1_PCNT = 0, XFS_QLOWSP_3_PCNT, XFS_QLOWSP_5_PCNT, XFS_QLOWSP_MAX }; |
784e80f56 xfs: use a per-re... |
27 28 29 |
struct xfs_dquot_res { /* Total resources allocated and reserved. */ xfs_qcnt_t reserved; |
d3537cf93 xfs: stop using q... |
30 |
|
be37d40c1 xfs: stop using q... |
31 32 |
/* Total resources allocated. */ xfs_qcnt_t count; |
d3537cf93 xfs: stop using q... |
33 34 35 |
/* Absolute and preferred limits. */ xfs_qcnt_t hardlimit; xfs_qcnt_t softlimit; |
c8c45fb2f xfs: stop using q... |
36 37 |
/* |
19dce7eae xfs: stop using q... |
38 39 40 41 42 43 44 |
* For root dquots, this is the default grace period, in seconds. * Otherwise, this is when the quota grace period expires, * in seconds since the Unix epoch. */ time64_t timer; /* |
c8c45fb2f xfs: stop using q... |
45 46 47 48 49 50 |
* For root dquots, this is the maximum number of warnings that will * be issued for this quota type. Otherwise, this is the number of * warnings issued against this quota. Note that none of this is * implemented. */ xfs_qwarncnt_t warnings; |
784e80f56 xfs: use a per-re... |
51 |
}; |
1da177e4c Linux-2.6.12-rc2 |
52 |
/* |
1da177e4c Linux-2.6.12-rc2 |
53 54 |
* The incore dquot structure */ |
aefe69a45 xfs: remove the x... |
55 |
struct xfs_dquot { |
aefe69a45 xfs: remove the x... |
56 57 |
struct list_head q_lru; struct xfs_mount *q_mount; |
1a7ed2716 xfs: create xfs_d... |
58 |
xfs_dqtype_t q_type; |
985a78fdd xfs: rename dquot... |
59 |
uint16_t q_flags; |
c51df7334 xfs: stop using q... |
60 |
xfs_dqid_t q_id; |
aefe69a45 xfs: remove the x... |
61 |
uint q_nrefs; |
aefe69a45 xfs: remove the x... |
62 |
int q_bufoffset; |
c51df7334 xfs: stop using q... |
63 |
xfs_daddr_t q_blkno; |
aefe69a45 xfs: remove the x... |
64 |
xfs_fileoff_t q_fileoffset; |
784e80f56 xfs: use a per-re... |
65 66 67 |
struct xfs_dquot_res q_blk; /* regular blocks */ struct xfs_dquot_res q_ino; /* inodes */ struct xfs_dquot_res q_rtb; /* realtime blocks */ |
fd8b81dbb xfs: remove the x... |
68 |
struct xfs_dq_logitem q_logitem; |
784e80f56 xfs: use a per-re... |
69 |
|
aefe69a45 xfs: remove the x... |
70 71 72 73 74 75 76 77 |
xfs_qcnt_t q_prealloc_lo_wmark; xfs_qcnt_t q_prealloc_hi_wmark; int64_t q_low_space[XFS_QLOWSP_MAX]; struct mutex q_qlock; struct completion q_flush; atomic_t q_pincount; struct wait_queue_head q_pinwait; }; |
1da177e4c Linux-2.6.12-rc2 |
78 |
|
5bb87a33b xfs: lockdep anno... |
79 |
/* |
af901ca18 tree-wide: fix as... |
80 |
* Lock hierarchy for q_qlock: |
5bb87a33b xfs: lockdep anno... |
81 |
* XFS_QLOCK_NORMAL is the implicit default, |
aefe69a45 xfs: remove the x... |
82 |
* XFS_QLOCK_NESTED is the dquot with the higher id in xfs_dqlock2 |
5bb87a33b xfs: lockdep anno... |
83 84 85 86 87 |
*/ enum { XFS_QLOCK_NORMAL = 0, XFS_QLOCK_NESTED, }; |
1da177e4c Linux-2.6.12-rc2 |
88 |
/* |
aefe69a45 xfs: remove the x... |
89 |
* Manage the q_flush completion queue embedded in the dquot. This completion |
e1f49cf20 [XFS] replace dqu... |
90 91 |
* queue synchronizes processes attempting to flush the in-core dquot back to * disk. |
1da177e4c Linux-2.6.12-rc2 |
92 |
*/ |
aefe69a45 xfs: remove the x... |
93 |
static inline void xfs_dqflock(struct xfs_dquot *dqp) |
e1f49cf20 [XFS] replace dqu... |
94 95 96 |
{ wait_for_completion(&dqp->q_flush); } |
aefe69a45 xfs: remove the x... |
97 |
static inline bool xfs_dqflock_nowait(struct xfs_dquot *dqp) |
e1f49cf20 [XFS] replace dqu... |
98 99 100 |
{ return try_wait_for_completion(&dqp->q_flush); } |
aefe69a45 xfs: remove the x... |
101 |
static inline void xfs_dqfunlock(struct xfs_dquot *dqp) |
e1f49cf20 [XFS] replace dqu... |
102 103 104 |
{ complete(&dqp->q_flush); } |
1da177e4c Linux-2.6.12-rc2 |
105 |
|
800b484ec xfs: cleanup dquo... |
106 107 108 109 110 111 112 113 114 |
static inline int xfs_dqlock_nowait(struct xfs_dquot *dqp) { return mutex_trylock(&dqp->q_qlock); } static inline void xfs_dqlock(struct xfs_dquot *dqp) { mutex_lock(&dqp->q_qlock); } |
5b03ff1b2 xfs: remove xfs_t... |
115 |
static inline void xfs_dqunlock(struct xfs_dquot *dqp) |
800b484ec xfs: cleanup dquo... |
116 117 118 |
{ mutex_unlock(&dqp->q_qlock); } |
00a342e49 xfs: remove the X... |
119 120 121 |
static inline int xfs_dquot_type(const struct xfs_dquot *dqp) { |
1a7ed2716 xfs: create xfs_d... |
122 |
return dqp->q_type & XFS_DQTYPE_REC_MASK; |
00a342e49 xfs: remove the X... |
123 |
} |
1a7ed2716 xfs: create xfs_d... |
124 |
static inline int xfs_this_quota_on(struct xfs_mount *mp, xfs_dqtype_t type) |
6967b964c Define a new func... |
125 |
{ |
af1db8f12 xfs: remove unnec... |
126 |
switch (type) { |
8cd4901da xfs: rename XFS_D... |
127 |
case XFS_DQTYPE_USER: |
6967b964c Define a new func... |
128 |
return XFS_IS_UQUOTA_ON(mp); |
8cd4901da xfs: rename XFS_D... |
129 |
case XFS_DQTYPE_GROUP: |
92f8ff73f xfs: Add pquota f... |
130 |
return XFS_IS_GQUOTA_ON(mp); |
8cd4901da xfs: rename XFS_D... |
131 |
case XFS_DQTYPE_PROJ: |
92f8ff73f xfs: Add pquota f... |
132 |
return XFS_IS_PQUOTA_ON(mp); |
6967b964c Define a new func... |
133 134 135 136 |
default: return 0; } } |
1a7ed2716 xfs: create xfs_d... |
137 138 139 |
static inline struct xfs_dquot *xfs_inode_dquot( struct xfs_inode *ip, xfs_dqtype_t type) |
367314108 Define a new func... |
140 |
{ |
af1db8f12 xfs: remove unnec... |
141 |
switch (type) { |
8cd4901da xfs: rename XFS_D... |
142 |
case XFS_DQTYPE_USER: |
367314108 Define a new func... |
143 |
return ip->i_udquot; |
8cd4901da xfs: rename XFS_D... |
144 |
case XFS_DQTYPE_GROUP: |
367314108 Define a new func... |
145 |
return ip->i_gdquot; |
8cd4901da xfs: rename XFS_D... |
146 |
case XFS_DQTYPE_PROJ: |
92f8ff73f xfs: Add pquota f... |
147 |
return ip->i_pdquot; |
367314108 Define a new func... |
148 149 150 151 |
default: return NULL; } } |
dbcbc7b90 xfs: refactor tes... |
152 153 154 155 156 |
/* Decide if the dquot's limits are actually being enforced. */ static inline bool xfs_dquot_is_enforced( const struct xfs_dquot *dqp) { |
0b04dd5d7 xfs: always use x... |
157 |
switch (xfs_dquot_type(dqp)) { |
dbcbc7b90 xfs: refactor tes... |
158 159 160 161 162 163 164 165 166 167 |
case XFS_DQTYPE_USER: return XFS_IS_UQUOTA_ENFORCED(dqp->q_mount); case XFS_DQTYPE_GROUP: return XFS_IS_GQUOTA_ENFORCED(dqp->q_mount); case XFS_DQTYPE_PROJ: return XFS_IS_PQUOTA_ENFORCED(dqp->q_mount); } ASSERT(0); return false; } |
dc06f398f xfs: run an eofbl... |
168 169 170 171 172 173 174 |
/* * Check whether a dquot is under low free space conditions. We assume the quota * is enabled and enforced. */ static inline bool xfs_dquot_lowsp(struct xfs_dquot *dqp) { int64_t freesp; |
d3537cf93 xfs: stop using q... |
175 |
freesp = dqp->q_blk.hardlimit - dqp->q_blk.reserved; |
dc06f398f xfs: run an eofbl... |
176 177 178 179 180 |
if (freesp < dqp->q_low_space[XFS_QLOWSP_1_PCNT]) return true; return false; } |
0b0fa1d1d xfs: stop using q... |
181 |
void xfs_dquot_to_disk(struct xfs_disk_dquot *ddqp, struct xfs_dquot *dqp); |
7201813bf xfs: use mutex_is... |
182 |
#define XFS_DQ_IS_LOCKED(dqp) (mutex_is_locked(&((dqp)->q_qlock))) |
985a78fdd xfs: rename dquot... |
183 |
#define XFS_DQ_IS_DIRTY(dqp) ((dqp)->q_flags & XFS_DQFLAG_DIRTY) |
1da177e4c Linux-2.6.12-rc2 |
184 |
|
aefe69a45 xfs: remove the x... |
185 186 187 |
void xfs_qm_dqdestroy(struct xfs_dquot *dqp); int xfs_qm_dqflush(struct xfs_dquot *dqp, struct xfs_buf **bpp); void xfs_qm_dqunpin_wait(struct xfs_dquot *dqp); |
c8c753e19 xfs: remove unnec... |
188 189 190 |
void xfs_qm_adjust_dqtimers(struct xfs_dquot *d); void xfs_qm_adjust_dqlimits(struct xfs_dquot *d); xfs_dqid_t xfs_qm_id_for_quotatype(struct xfs_inode *ip, |
1a7ed2716 xfs: create xfs_d... |
191 |
xfs_dqtype_t type); |
aefe69a45 xfs: remove the x... |
192 |
int xfs_qm_dqget(struct xfs_mount *mp, xfs_dqid_t id, |
1a7ed2716 xfs: create xfs_d... |
193 194 195 196 |
xfs_dqtype_t type, bool can_alloc, struct xfs_dquot **dqpp); int xfs_qm_dqget_inode(struct xfs_inode *ip, xfs_dqtype_t type, bool can_alloc, struct xfs_dquot **dqpp); |
aefe69a45 xfs: remove the x... |
197 |
int xfs_qm_dqget_next(struct xfs_mount *mp, xfs_dqid_t id, |
1a7ed2716 xfs: create xfs_d... |
198 |
xfs_dqtype_t type, struct xfs_dquot **dqpp); |
aefe69a45 xfs: remove the x... |
199 |
int xfs_qm_dqget_uncached(struct xfs_mount *mp, |
1a7ed2716 xfs: create xfs_d... |
200 201 |
xfs_dqid_t id, xfs_dqtype_t type, struct xfs_dquot **dqpp); |
aefe69a45 xfs: remove the x... |
202 |
void xfs_qm_dqput(struct xfs_dquot *dqp); |
800b484ec xfs: cleanup dquo... |
203 |
|
aefe69a45 xfs: remove the x... |
204 |
void xfs_dqlock2(struct xfs_dquot *, struct xfs_dquot *); |
1da177e4c Linux-2.6.12-rc2 |
205 |
|
aefe69a45 xfs: remove the x... |
206 |
void xfs_dquot_set_prealloc_limits(struct xfs_dquot *); |
b13664511 xfs: xfs_dquot pr... |
207 |
|
78e55892d xfs: add a xfs_dq... |
208 209 210 211 212 213 214 |
static inline struct xfs_dquot *xfs_qm_dqhold(struct xfs_dquot *dqp) { xfs_dqlock(dqp); dqp->q_nrefs++; xfs_dqunlock(dqp); return dqp; } |
1a7ed2716 xfs: create xfs_d... |
215 216 217 |
typedef int (*xfs_qm_dqiterate_fn)(struct xfs_dquot *dq, xfs_dqtype_t type, void *priv); int xfs_qm_dqiterate(struct xfs_mount *mp, xfs_dqtype_t type, |
554ba9654 xfs: refactor dqu... |
218 |
xfs_qm_dqiterate_fn iter_fn, void *priv); |
11d8a9190 xfs: refactor quo... |
219 |
time64_t xfs_dquot_set_timeout(struct xfs_mount *mp, time64_t timeout); |
ccc8e771a xfs: refactor def... |
220 |
time64_t xfs_dquot_set_grace_period(time64_t grace); |
11d8a9190 xfs: refactor quo... |
221 |
|
1da177e4c Linux-2.6.12-rc2 |
222 |
#endif /* __XFS_DQUOT_H__ */ |