blob: 36353d95c8dbfb518687ad6c3b5d6e8db8fbe1f2 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * Definitions for diskquota-operations. When diskquota is configured these
3 * macros expand to the right source-code.
4 *
5 * Author: Marco van Wieringen <mvw@planets.elm.net>
Linus Torvalds1da177e2005-04-16 15:20:36 -07006 */
7#ifndef _LINUX_QUOTAOPS_
8#define _LINUX_QUOTAOPS_
9
Linus Torvalds1da177e2005-04-16 15:20:36 -070010#include <linux/smp_lock.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070011#include <linux/fs.h>
12
Jan Kara03b06342008-07-25 01:46:52 -070013static inline struct quota_info *sb_dqopt(struct super_block *sb)
14{
15 return &sb->s_dquot;
16}
Jan Kara74abb982008-07-25 01:46:51 -070017
Linus Torvalds1da177e2005-04-16 15:20:36 -070018#if defined(CONFIG_QUOTA)
19
20/*
21 * declaration of quota_function calls in kernel.
22 */
Jan Karab85f4b82008-07-25 01:46:50 -070023void sync_dquots(struct super_block *sb, int type);
Linus Torvalds1da177e2005-04-16 15:20:36 -070024
Jan Karab85f4b82008-07-25 01:46:50 -070025int dquot_initialize(struct inode *inode, int type);
26int dquot_drop(struct inode *inode);
Jan Kara3d9ea252008-10-10 16:12:23 +020027struct dquot *dqget(struct super_block *sb, unsigned int id, int type);
28void dqput(struct dquot *dquot);
Jan Kara12c77522008-10-20 17:05:00 +020029int dquot_scan_active(struct super_block *sb,
30 int (*fn)(struct dquot *dquot, unsigned long priv),
31 unsigned long priv);
Jan Kara7d9056b2008-11-25 15:31:32 +010032struct dquot *dquot_alloc(struct super_block *sb, int type);
33void dquot_destroy(struct dquot *dquot);
Linus Torvalds1da177e2005-04-16 15:20:36 -070034
Jan Karab85f4b82008-07-25 01:46:50 -070035int dquot_alloc_space(struct inode *inode, qsize_t number, int prealloc);
Jan Kara12095462008-08-20 14:45:12 +020036int dquot_alloc_inode(const struct inode *inode, qsize_t number);
Linus Torvalds1da177e2005-04-16 15:20:36 -070037
Mingming Cao740d9dc2009-01-13 16:43:14 +010038int dquot_reserve_space(struct inode *inode, qsize_t number, int prealloc);
39int dquot_claim_space(struct inode *inode, qsize_t number);
40void dquot_release_reserved_space(struct inode *inode, qsize_t number);
41qsize_t dquot_get_reserved_space(struct inode *inode);
42
Jan Karab85f4b82008-07-25 01:46:50 -070043int dquot_free_space(struct inode *inode, qsize_t number);
Jan Kara12095462008-08-20 14:45:12 +020044int dquot_free_inode(const struct inode *inode, qsize_t number);
Linus Torvalds1da177e2005-04-16 15:20:36 -070045
Jan Karab85f4b82008-07-25 01:46:50 -070046int dquot_transfer(struct inode *inode, struct iattr *iattr);
47int dquot_commit(struct dquot *dquot);
48int dquot_acquire(struct dquot *dquot);
49int dquot_release(struct dquot *dquot);
50int dquot_commit_info(struct super_block *sb, int type);
51int dquot_mark_dquot_dirty(struct dquot *dquot);
Linus Torvalds1da177e2005-04-16 15:20:36 -070052
Jan Karab85f4b82008-07-25 01:46:50 -070053int vfs_quota_on(struct super_block *sb, int type, int format_id,
54 char *path, int remount);
Jan Karaf55abc02008-08-20 17:50:32 +020055int vfs_quota_enable(struct inode *inode, int type, int format_id,
56 unsigned int flags);
Al Viro77e69da2008-08-01 04:29:18 -040057int vfs_quota_on_path(struct super_block *sb, int type, int format_id,
58 struct path *path);
Jan Karab85f4b82008-07-25 01:46:50 -070059int vfs_quota_on_mount(struct super_block *sb, char *qf_name,
60 int format_id, int type);
61int vfs_quota_off(struct super_block *sb, int type, int remount);
Jan Karaf55abc02008-08-20 17:50:32 +020062int vfs_quota_disable(struct super_block *sb, int type, unsigned int flags);
Jan Karab85f4b82008-07-25 01:46:50 -070063int vfs_quota_sync(struct super_block *sb, int type);
64int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
65int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
66int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di);
67int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di);
68
69void vfs_dq_drop(struct inode *inode);
70int vfs_dq_transfer(struct inode *inode, struct iattr *iattr);
71int vfs_dq_quota_on_remount(struct super_block *sb);
Linus Torvalds1da177e2005-04-16 15:20:36 -070072
Jan Kara03b06342008-07-25 01:46:52 -070073static inline struct mem_dqinfo *sb_dqinfo(struct super_block *sb, int type)
74{
75 return sb_dqopt(sb)->info + type;
76}
Jan Kara74abb982008-07-25 01:46:51 -070077
78/*
79 * Functions for checking status of quota
80 */
81
Jan Karaf55abc02008-08-20 17:50:32 +020082static inline int sb_has_quota_usage_enabled(struct super_block *sb, int type)
Jan Kara03b06342008-07-25 01:46:52 -070083{
Jan Karaf55abc02008-08-20 17:50:32 +020084 return sb_dqopt(sb)->flags &
85 dquot_state_flag(DQUOT_USAGE_ENABLED, type);
Jan Kara03b06342008-07-25 01:46:52 -070086}
Jan Kara74abb982008-07-25 01:46:51 -070087
Jan Karaf55abc02008-08-20 17:50:32 +020088static inline int sb_has_quota_limits_enabled(struct super_block *sb, int type)
Jan Kara03b06342008-07-25 01:46:52 -070089{
Jan Karaf55abc02008-08-20 17:50:32 +020090 return sb_dqopt(sb)->flags &
91 dquot_state_flag(DQUOT_LIMITS_ENABLED, type);
Jan Kara03b06342008-07-25 01:46:52 -070092}
Jan Kara74abb982008-07-25 01:46:51 -070093
Jan Kara03b06342008-07-25 01:46:52 -070094static inline int sb_has_quota_suspended(struct super_block *sb, int type)
95{
Jan Karaf55abc02008-08-20 17:50:32 +020096 return sb_dqopt(sb)->flags &
97 dquot_state_flag(DQUOT_SUSPENDED, type);
Jan Kara03b06342008-07-25 01:46:52 -070098}
Jan Kara74abb982008-07-25 01:46:51 -070099
Jan Kara03b06342008-07-25 01:46:52 -0700100static inline int sb_any_quota_suspended(struct super_block *sb)
101{
102 return sb_has_quota_suspended(sb, USRQUOTA) ||
103 sb_has_quota_suspended(sb, GRPQUOTA);
104}
Jan Kara74abb982008-07-25 01:46:51 -0700105
Jan Karaf55abc02008-08-20 17:50:32 +0200106/* Does kernel know about any quota information for given sb + type? */
107static inline int sb_has_quota_loaded(struct super_block *sb, int type)
108{
109 /* Currently if anything is on, then quota usage is on as well */
110 return sb_has_quota_usage_enabled(sb, type);
111}
112
113static inline int sb_any_quota_loaded(struct super_block *sb)
114{
115 return sb_has_quota_loaded(sb, USRQUOTA) ||
116 sb_has_quota_loaded(sb, GRPQUOTA);
117}
118
119static inline int sb_has_quota_active(struct super_block *sb, int type)
120{
121 return sb_has_quota_loaded(sb, type) &&
122 !sb_has_quota_suspended(sb, type);
123}
124
125static inline int sb_any_quota_active(struct super_block *sb)
126{
127 return sb_has_quota_active(sb, USRQUOTA) ||
128 sb_has_quota_active(sb, GRPQUOTA);
129}
130
Linus Torvalds1da177e2005-04-16 15:20:36 -0700131/*
132 * Operations supported for diskquotas.
133 */
134extern struct dquot_operations dquot_operations;
135extern struct quotactl_ops vfs_quotactl_ops;
136
137#define sb_dquot_ops (&dquot_operations)
138#define sb_quotactl_ops (&vfs_quotactl_ops)
139
140/* It is better to call this function outside of any transaction as it might
141 * need a lot of space in journal for dquot structure allocation. */
Jan Karab85f4b82008-07-25 01:46:50 -0700142static inline void vfs_dq_init(struct inode *inode)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700143{
144 BUG_ON(!inode->i_sb);
Jan Karaf55abc02008-08-20 17:50:32 +0200145 if (sb_any_quota_active(inode->i_sb) && !IS_NOQUOTA(inode))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700146 inode->i_sb->dq_op->initialize(inode, -1);
147}
148
Linus Torvalds1da177e2005-04-16 15:20:36 -0700149/* The following allocation/freeing/transfer functions *must* be called inside
150 * a transaction (deadlocks possible otherwise) */
Jan Karab85f4b82008-07-25 01:46:50 -0700151static inline int vfs_dq_prealloc_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700152{
Jan Karaf55abc02008-08-20 17:50:32 +0200153 if (sb_any_quota_active(inode->i_sb)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700154 /* Used space is updated in alloc_space() */
155 if (inode->i_sb->dq_op->alloc_space(inode, nr, 1) == NO_QUOTA)
156 return 1;
157 }
158 else
159 inode_add_bytes(inode, nr);
160 return 0;
161}
162
Jan Karab85f4b82008-07-25 01:46:50 -0700163static inline int vfs_dq_prealloc_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700164{
165 int ret;
Jan Karab85f4b82008-07-25 01:46:50 -0700166 if (!(ret = vfs_dq_prealloc_space_nodirty(inode, nr)))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700167 mark_inode_dirty(inode);
168 return ret;
169}
170
Jan Karab85f4b82008-07-25 01:46:50 -0700171static inline int vfs_dq_alloc_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700172{
Jan Karaf55abc02008-08-20 17:50:32 +0200173 if (sb_any_quota_active(inode->i_sb)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700174 /* Used space is updated in alloc_space() */
175 if (inode->i_sb->dq_op->alloc_space(inode, nr, 0) == NO_QUOTA)
176 return 1;
177 }
178 else
179 inode_add_bytes(inode, nr);
180 return 0;
181}
182
Jan Karab85f4b82008-07-25 01:46:50 -0700183static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700184{
185 int ret;
Jan Karab85f4b82008-07-25 01:46:50 -0700186 if (!(ret = vfs_dq_alloc_space_nodirty(inode, nr)))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700187 mark_inode_dirty(inode);
188 return ret;
189}
190
Mingming Caof18df222009-01-13 16:43:09 +0100191static inline int vfs_dq_reserve_space(struct inode *inode, qsize_t nr)
192{
193 if (sb_any_quota_active(inode->i_sb)) {
194 /* Used space is updated in alloc_space() */
195 if (inode->i_sb->dq_op->reserve_space(inode, nr, 0) == NO_QUOTA)
196 return 1;
197 }
198 return 0;
199}
200
Jan Karab85f4b82008-07-25 01:46:50 -0700201static inline int vfs_dq_alloc_inode(struct inode *inode)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700202{
Jan Karaf55abc02008-08-20 17:50:32 +0200203 if (sb_any_quota_active(inode->i_sb)) {
Jan Karab85f4b82008-07-25 01:46:50 -0700204 vfs_dq_init(inode);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700205 if (inode->i_sb->dq_op->alloc_inode(inode, 1) == NO_QUOTA)
206 return 1;
207 }
208 return 0;
209}
210
Mingming Cao740d9dc2009-01-13 16:43:14 +0100211/*
212 * Convert in-memory reserved quotas to real consumed quotas
213 */
214static inline int vfs_dq_claim_space(struct inode *inode, qsize_t nr)
215{
216 if (sb_any_quota_active(inode->i_sb)) {
217 if (inode->i_sb->dq_op->claim_space(inode, nr) == NO_QUOTA)
218 return 1;
219 } else
220 inode_add_bytes(inode, nr);
221
222 mark_inode_dirty(inode);
223 return 0;
224}
225
226/*
227 * Release reserved (in-memory) quotas
228 */
229static inline
230void vfs_dq_release_reservation_space(struct inode *inode, qsize_t nr)
231{
232 if (sb_any_quota_active(inode->i_sb))
233 inode->i_sb->dq_op->release_rsv(inode, nr);
234}
235
Jan Karab85f4b82008-07-25 01:46:50 -0700236static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700237{
Jan Karaf55abc02008-08-20 17:50:32 +0200238 if (sb_any_quota_active(inode->i_sb))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700239 inode->i_sb->dq_op->free_space(inode, nr);
240 else
241 inode_sub_bytes(inode, nr);
242}
243
Jan Karab85f4b82008-07-25 01:46:50 -0700244static inline void vfs_dq_free_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700245{
Jan Karab85f4b82008-07-25 01:46:50 -0700246 vfs_dq_free_space_nodirty(inode, nr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700247 mark_inode_dirty(inode);
248}
249
Jan Karab85f4b82008-07-25 01:46:50 -0700250static inline void vfs_dq_free_inode(struct inode *inode)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700251{
Jan Karaf55abc02008-08-20 17:50:32 +0200252 if (sb_any_quota_active(inode->i_sb))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700253 inode->i_sb->dq_op->free_inode(inode, 1);
254}
255
Linus Torvalds1da177e2005-04-16 15:20:36 -0700256/* The following two functions cannot be called inside a transaction */
Jan Karab85f4b82008-07-25 01:46:50 -0700257static inline void vfs_dq_sync(struct super_block *sb)
Jan Kara03f6e922008-04-28 02:14:32 -0700258{
259 sync_dquots(sb, -1);
260}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700261
Jan Karab85f4b82008-07-25 01:46:50 -0700262static inline int vfs_dq_off(struct super_block *sb, int remount)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700263{
264 int ret = -ENOSYS;
265
Jan Kara0ff5af82008-04-28 02:14:33 -0700266 if (sb->s_qcop && sb->s_qcop->quota_off)
267 ret = sb->s_qcop->quota_off(sb, -1, remount);
268 return ret;
269}
270
Linus Torvalds1da177e2005-04-16 15:20:36 -0700271#else
272
Jan Karaf55abc02008-08-20 17:50:32 +0200273static inline int sb_has_quota_usage_enabled(struct super_block *sb, int type)
Jan Kara03b06342008-07-25 01:46:52 -0700274{
275 return 0;
276}
277
Jan Karaf55abc02008-08-20 17:50:32 +0200278static inline int sb_has_quota_limits_enabled(struct super_block *sb, int type)
Jan Kara03b06342008-07-25 01:46:52 -0700279{
280 return 0;
281}
282
283static inline int sb_has_quota_suspended(struct super_block *sb, int type)
284{
285 return 0;
286}
287
288static inline int sb_any_quota_suspended(struct super_block *sb)
289{
290 return 0;
291}
Jan Kara74abb982008-07-25 01:46:51 -0700292
Jan Karaf55abc02008-08-20 17:50:32 +0200293/* Does kernel know about any quota information for given sb + type? */
294static inline int sb_has_quota_loaded(struct super_block *sb, int type)
295{
296 return 0;
297}
298
299static inline int sb_any_quota_loaded(struct super_block *sb)
300{
301 return 0;
302}
303
304static inline int sb_has_quota_active(struct super_block *sb, int type)
305{
306 return 0;
307}
308
309static inline int sb_any_quota_active(struct super_block *sb)
310{
311 return 0;
312}
313
Linus Torvalds1da177e2005-04-16 15:20:36 -0700314/*
315 * NO-OP when quota not configured.
316 */
317#define sb_dquot_ops (NULL)
318#define sb_quotactl_ops (NULL)
Andrew Morton50f8c372008-04-28 02:14:35 -0700319
Jan Karab85f4b82008-07-25 01:46:50 -0700320static inline void vfs_dq_init(struct inode *inode)
Andrew Morton50f8c372008-04-28 02:14:35 -0700321{
322}
323
Jan Karab85f4b82008-07-25 01:46:50 -0700324static inline void vfs_dq_drop(struct inode *inode)
Andrew Morton50f8c372008-04-28 02:14:35 -0700325{
326}
327
Jan Karab85f4b82008-07-25 01:46:50 -0700328static inline int vfs_dq_alloc_inode(struct inode *inode)
Andrew Morton50f8c372008-04-28 02:14:35 -0700329{
330 return 0;
331}
332
Jan Karab85f4b82008-07-25 01:46:50 -0700333static inline void vfs_dq_free_inode(struct inode *inode)
Andrew Morton50f8c372008-04-28 02:14:35 -0700334{
335}
336
Jan Karab85f4b82008-07-25 01:46:50 -0700337static inline void vfs_dq_sync(struct super_block *sb)
Andrew Morton50f8c372008-04-28 02:14:35 -0700338{
339}
340
Jan Karab85f4b82008-07-25 01:46:50 -0700341static inline int vfs_dq_off(struct super_block *sb, int remount)
Andrew Morton50f8c372008-04-28 02:14:35 -0700342{
343 return 0;
344}
345
Jan Karab85f4b82008-07-25 01:46:50 -0700346static inline int vfs_dq_quota_on_remount(struct super_block *sb)
Andrew Morton50f8c372008-04-28 02:14:35 -0700347{
348 return 0;
349}
350
Jan Karab85f4b82008-07-25 01:46:50 -0700351static inline int vfs_dq_transfer(struct inode *inode, struct iattr *iattr)
Andrew Morton50f8c372008-04-28 02:14:35 -0700352{
353 return 0;
354}
355
Jan Karab85f4b82008-07-25 01:46:50 -0700356static inline int vfs_dq_prealloc_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700357{
358 inode_add_bytes(inode, nr);
359 return 0;
360}
361
Jan Karab85f4b82008-07-25 01:46:50 -0700362static inline int vfs_dq_prealloc_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700363{
Jan Karab85f4b82008-07-25 01:46:50 -0700364 vfs_dq_prealloc_space_nodirty(inode, nr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700365 mark_inode_dirty(inode);
366 return 0;
367}
368
Jan Karab85f4b82008-07-25 01:46:50 -0700369static inline int vfs_dq_alloc_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700370{
371 inode_add_bytes(inode, nr);
372 return 0;
373}
374
Jan Karab85f4b82008-07-25 01:46:50 -0700375static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700376{
Jan Karab85f4b82008-07-25 01:46:50 -0700377 vfs_dq_alloc_space_nodirty(inode, nr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700378 mark_inode_dirty(inode);
379 return 0;
380}
381
Mingming Caof18df222009-01-13 16:43:09 +0100382static inline int vfs_dq_reserve_space(struct inode *inode, qsize_t nr)
383{
384 return 0;
385}
386
Mingming Cao740d9dc2009-01-13 16:43:14 +0100387static inline int vfs_dq_claim_space(struct inode *inode, qsize_t nr)
388{
389 return vfs_dq_alloc_space(inode, nr);
390}
391
392static inline
393int vfs_dq_release_reservation_space(struct inode *inode, qsize_t nr)
394{
395 return 0;
396}
397
Jan Karab85f4b82008-07-25 01:46:50 -0700398static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700399{
400 inode_sub_bytes(inode, nr);
401}
402
Jan Karab85f4b82008-07-25 01:46:50 -0700403static inline void vfs_dq_free_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700404{
Jan Karab85f4b82008-07-25 01:46:50 -0700405 vfs_dq_free_space_nodirty(inode, nr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700406 mark_inode_dirty(inode);
407}
408
409#endif /* CONFIG_QUOTA */
410
Jan Karab85f4b82008-07-25 01:46:50 -0700411static inline int vfs_dq_prealloc_block_nodirty(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700412{
Mingming Cao9900ba32009-01-14 16:18:57 +0100413 return vfs_dq_prealloc_space_nodirty(inode, nr << inode->i_blkbits);
Jan Kara03f6e922008-04-28 02:14:32 -0700414}
415
Jan Karab85f4b82008-07-25 01:46:50 -0700416static inline int vfs_dq_prealloc_block(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700417{
Mingming Cao9900ba32009-01-14 16:18:57 +0100418 return vfs_dq_prealloc_space(inode, nr << inode->i_blkbits);
Jan Kara03f6e922008-04-28 02:14:32 -0700419}
420
Jan Karab85f4b82008-07-25 01:46:50 -0700421static inline int vfs_dq_alloc_block_nodirty(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700422{
Mingming Cao9900ba32009-01-14 16:18:57 +0100423 return vfs_dq_alloc_space_nodirty(inode, nr << inode->i_blkbits);
Jan Kara03f6e922008-04-28 02:14:32 -0700424}
425
Jan Karab85f4b82008-07-25 01:46:50 -0700426static inline int vfs_dq_alloc_block(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700427{
Mingming Cao9900ba32009-01-14 16:18:57 +0100428 return vfs_dq_alloc_space(inode, nr << inode->i_blkbits);
Jan Kara03f6e922008-04-28 02:14:32 -0700429}
430
Mingming Caof18df222009-01-13 16:43:09 +0100431static inline int vfs_dq_reserve_block(struct inode *inode, qsize_t nr)
432{
Mingming Cao9900ba32009-01-14 16:18:57 +0100433 return vfs_dq_reserve_space(inode, nr << inode->i_blkbits);
Mingming Caof18df222009-01-13 16:43:09 +0100434}
435
Mingming Cao740d9dc2009-01-13 16:43:14 +0100436static inline int vfs_dq_claim_block(struct inode *inode, qsize_t nr)
437{
Mingming Cao9900ba32009-01-14 16:18:57 +0100438 return vfs_dq_claim_space(inode, nr << inode->i_blkbits);
Mingming Cao740d9dc2009-01-13 16:43:14 +0100439}
440
441static inline
442void vfs_dq_release_reservation_block(struct inode *inode, qsize_t nr)
443{
444 vfs_dq_release_reservation_space(inode, nr << inode->i_blkbits);
445}
446
Jan Karab85f4b82008-07-25 01:46:50 -0700447static inline void vfs_dq_free_block_nodirty(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700448{
Mingming Cao9900ba32009-01-14 16:18:57 +0100449 vfs_dq_free_space_nodirty(inode, nr << inode->i_blkbits);
Jan Kara03f6e922008-04-28 02:14:32 -0700450}
451
Jan Karab85f4b82008-07-25 01:46:50 -0700452static inline void vfs_dq_free_block(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700453{
Mingming Cao9900ba32009-01-14 16:18:57 +0100454 vfs_dq_free_space(inode, nr << inode->i_blkbits);
Jan Kara03f6e922008-04-28 02:14:32 -0700455}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700456
Linus Torvalds1da177e2005-04-16 15:20:36 -0700457#endif /* _LINUX_QUOTAOPS_ */