blob: e840ca523175b929ef349c6a17b478ca31f08d24 [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);
Linus Torvalds1da177e2005-04-16 15:20:36 -070027
Jan Karab85f4b82008-07-25 01:46:50 -070028int dquot_alloc_space(struct inode *inode, qsize_t number, int prealloc);
Jan Kara12095462008-08-20 14:45:12 +020029int dquot_alloc_inode(const struct inode *inode, qsize_t number);
Linus Torvalds1da177e2005-04-16 15:20:36 -070030
Jan Karab85f4b82008-07-25 01:46:50 -070031int dquot_free_space(struct inode *inode, qsize_t number);
Jan Kara12095462008-08-20 14:45:12 +020032int dquot_free_inode(const struct inode *inode, qsize_t number);
Linus Torvalds1da177e2005-04-16 15:20:36 -070033
Jan Karab85f4b82008-07-25 01:46:50 -070034int dquot_transfer(struct inode *inode, struct iattr *iattr);
35int dquot_commit(struct dquot *dquot);
36int dquot_acquire(struct dquot *dquot);
37int dquot_release(struct dquot *dquot);
38int dquot_commit_info(struct super_block *sb, int type);
39int dquot_mark_dquot_dirty(struct dquot *dquot);
Linus Torvalds1da177e2005-04-16 15:20:36 -070040
Jan Karab85f4b82008-07-25 01:46:50 -070041int vfs_quota_on(struct super_block *sb, int type, int format_id,
42 char *path, int remount);
Jan Karaf55abc02008-08-20 17:50:32 +020043int vfs_quota_enable(struct inode *inode, int type, int format_id,
44 unsigned int flags);
Al Viro77e69da2008-08-01 04:29:18 -040045int vfs_quota_on_path(struct super_block *sb, int type, int format_id,
46 struct path *path);
Jan Karab85f4b82008-07-25 01:46:50 -070047int vfs_quota_on_mount(struct super_block *sb, char *qf_name,
48 int format_id, int type);
49int vfs_quota_off(struct super_block *sb, int type, int remount);
Jan Karaf55abc02008-08-20 17:50:32 +020050int vfs_quota_disable(struct super_block *sb, int type, unsigned int flags);
Jan Karab85f4b82008-07-25 01:46:50 -070051int vfs_quota_sync(struct super_block *sb, int type);
52int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
53int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
54int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di);
55int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di);
56
57void vfs_dq_drop(struct inode *inode);
58int vfs_dq_transfer(struct inode *inode, struct iattr *iattr);
59int vfs_dq_quota_on_remount(struct super_block *sb);
Linus Torvalds1da177e2005-04-16 15:20:36 -070060
Jan Kara03b06342008-07-25 01:46:52 -070061static inline struct mem_dqinfo *sb_dqinfo(struct super_block *sb, int type)
62{
63 return sb_dqopt(sb)->info + type;
64}
Jan Kara74abb982008-07-25 01:46:51 -070065
66/*
67 * Functions for checking status of quota
68 */
69
Jan Karaf55abc02008-08-20 17:50:32 +020070static inline int sb_has_quota_usage_enabled(struct super_block *sb, int type)
Jan Kara03b06342008-07-25 01:46:52 -070071{
Jan Karaf55abc02008-08-20 17:50:32 +020072 return sb_dqopt(sb)->flags &
73 dquot_state_flag(DQUOT_USAGE_ENABLED, type);
Jan Kara03b06342008-07-25 01:46:52 -070074}
Jan Kara74abb982008-07-25 01:46:51 -070075
Jan Karaf55abc02008-08-20 17:50:32 +020076static inline int sb_has_quota_limits_enabled(struct super_block *sb, int type)
Jan Kara03b06342008-07-25 01:46:52 -070077{
Jan Karaf55abc02008-08-20 17:50:32 +020078 return sb_dqopt(sb)->flags &
79 dquot_state_flag(DQUOT_LIMITS_ENABLED, type);
Jan Kara03b06342008-07-25 01:46:52 -070080}
Jan Kara74abb982008-07-25 01:46:51 -070081
Jan Kara03b06342008-07-25 01:46:52 -070082static inline int sb_has_quota_suspended(struct super_block *sb, int type)
83{
Jan Karaf55abc02008-08-20 17:50:32 +020084 return sb_dqopt(sb)->flags &
85 dquot_state_flag(DQUOT_SUSPENDED, type);
Jan Kara03b06342008-07-25 01:46:52 -070086}
Jan Kara74abb982008-07-25 01:46:51 -070087
Jan Kara03b06342008-07-25 01:46:52 -070088static inline int sb_any_quota_suspended(struct super_block *sb)
89{
90 return sb_has_quota_suspended(sb, USRQUOTA) ||
91 sb_has_quota_suspended(sb, GRPQUOTA);
92}
Jan Kara74abb982008-07-25 01:46:51 -070093
Jan Karaf55abc02008-08-20 17:50:32 +020094/* Does kernel know about any quota information for given sb + type? */
95static inline int sb_has_quota_loaded(struct super_block *sb, int type)
96{
97 /* Currently if anything is on, then quota usage is on as well */
98 return sb_has_quota_usage_enabled(sb, type);
99}
100
101static inline int sb_any_quota_loaded(struct super_block *sb)
102{
103 return sb_has_quota_loaded(sb, USRQUOTA) ||
104 sb_has_quota_loaded(sb, GRPQUOTA);
105}
106
107static inline int sb_has_quota_active(struct super_block *sb, int type)
108{
109 return sb_has_quota_loaded(sb, type) &&
110 !sb_has_quota_suspended(sb, type);
111}
112
113static inline int sb_any_quota_active(struct super_block *sb)
114{
115 return sb_has_quota_active(sb, USRQUOTA) ||
116 sb_has_quota_active(sb, GRPQUOTA);
117}
118
Linus Torvalds1da177e2005-04-16 15:20:36 -0700119/*
120 * Operations supported for diskquotas.
121 */
122extern struct dquot_operations dquot_operations;
123extern struct quotactl_ops vfs_quotactl_ops;
124
125#define sb_dquot_ops (&dquot_operations)
126#define sb_quotactl_ops (&vfs_quotactl_ops)
127
128/* It is better to call this function outside of any transaction as it might
129 * need a lot of space in journal for dquot structure allocation. */
Jan Karab85f4b82008-07-25 01:46:50 -0700130static inline void vfs_dq_init(struct inode *inode)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700131{
132 BUG_ON(!inode->i_sb);
Jan Karaf55abc02008-08-20 17:50:32 +0200133 if (sb_any_quota_active(inode->i_sb) && !IS_NOQUOTA(inode))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700134 inode->i_sb->dq_op->initialize(inode, -1);
135}
136
Linus Torvalds1da177e2005-04-16 15:20:36 -0700137/* The following allocation/freeing/transfer functions *must* be called inside
138 * a transaction (deadlocks possible otherwise) */
Jan Karab85f4b82008-07-25 01:46:50 -0700139static inline int vfs_dq_prealloc_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700140{
Jan Karaf55abc02008-08-20 17:50:32 +0200141 if (sb_any_quota_active(inode->i_sb)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700142 /* Used space is updated in alloc_space() */
143 if (inode->i_sb->dq_op->alloc_space(inode, nr, 1) == NO_QUOTA)
144 return 1;
145 }
146 else
147 inode_add_bytes(inode, nr);
148 return 0;
149}
150
Jan Karab85f4b82008-07-25 01:46:50 -0700151static inline int vfs_dq_prealloc_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700152{
153 int ret;
Jan Karab85f4b82008-07-25 01:46:50 -0700154 if (!(ret = vfs_dq_prealloc_space_nodirty(inode, nr)))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700155 mark_inode_dirty(inode);
156 return ret;
157}
158
Jan Karab85f4b82008-07-25 01:46:50 -0700159static inline int vfs_dq_alloc_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700160{
Jan Karaf55abc02008-08-20 17:50:32 +0200161 if (sb_any_quota_active(inode->i_sb)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700162 /* Used space is updated in alloc_space() */
163 if (inode->i_sb->dq_op->alloc_space(inode, nr, 0) == NO_QUOTA)
164 return 1;
165 }
166 else
167 inode_add_bytes(inode, nr);
168 return 0;
169}
170
Jan Karab85f4b82008-07-25 01:46:50 -0700171static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700172{
173 int ret;
Jan Karab85f4b82008-07-25 01:46:50 -0700174 if (!(ret = vfs_dq_alloc_space_nodirty(inode, nr)))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700175 mark_inode_dirty(inode);
176 return ret;
177}
178
Jan Karab85f4b82008-07-25 01:46:50 -0700179static inline int vfs_dq_alloc_inode(struct inode *inode)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700180{
Jan Karaf55abc02008-08-20 17:50:32 +0200181 if (sb_any_quota_active(inode->i_sb)) {
Jan Karab85f4b82008-07-25 01:46:50 -0700182 vfs_dq_init(inode);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700183 if (inode->i_sb->dq_op->alloc_inode(inode, 1) == NO_QUOTA)
184 return 1;
185 }
186 return 0;
187}
188
Jan Karab85f4b82008-07-25 01:46:50 -0700189static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700190{
Jan Karaf55abc02008-08-20 17:50:32 +0200191 if (sb_any_quota_active(inode->i_sb))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700192 inode->i_sb->dq_op->free_space(inode, nr);
193 else
194 inode_sub_bytes(inode, nr);
195}
196
Jan Karab85f4b82008-07-25 01:46:50 -0700197static inline void vfs_dq_free_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700198{
Jan Karab85f4b82008-07-25 01:46:50 -0700199 vfs_dq_free_space_nodirty(inode, nr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700200 mark_inode_dirty(inode);
201}
202
Jan Karab85f4b82008-07-25 01:46:50 -0700203static inline void vfs_dq_free_inode(struct inode *inode)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700204{
Jan Karaf55abc02008-08-20 17:50:32 +0200205 if (sb_any_quota_active(inode->i_sb))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700206 inode->i_sb->dq_op->free_inode(inode, 1);
207}
208
Linus Torvalds1da177e2005-04-16 15:20:36 -0700209/* The following two functions cannot be called inside a transaction */
Jan Karab85f4b82008-07-25 01:46:50 -0700210static inline void vfs_dq_sync(struct super_block *sb)
Jan Kara03f6e922008-04-28 02:14:32 -0700211{
212 sync_dquots(sb, -1);
213}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700214
Jan Karab85f4b82008-07-25 01:46:50 -0700215static inline int vfs_dq_off(struct super_block *sb, int remount)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700216{
217 int ret = -ENOSYS;
218
Jan Kara0ff5af82008-04-28 02:14:33 -0700219 if (sb->s_qcop && sb->s_qcop->quota_off)
220 ret = sb->s_qcop->quota_off(sb, -1, remount);
221 return ret;
222}
223
Linus Torvalds1da177e2005-04-16 15:20:36 -0700224#else
225
Jan Karaf55abc02008-08-20 17:50:32 +0200226static inline int sb_has_quota_usage_enabled(struct super_block *sb, int type)
Jan Kara03b06342008-07-25 01:46:52 -0700227{
228 return 0;
229}
230
Jan Karaf55abc02008-08-20 17:50:32 +0200231static inline int sb_has_quota_limits_enabled(struct super_block *sb, int type)
Jan Kara03b06342008-07-25 01:46:52 -0700232{
233 return 0;
234}
235
236static inline int sb_has_quota_suspended(struct super_block *sb, int type)
237{
238 return 0;
239}
240
241static inline int sb_any_quota_suspended(struct super_block *sb)
242{
243 return 0;
244}
Jan Kara74abb982008-07-25 01:46:51 -0700245
Jan Karaf55abc02008-08-20 17:50:32 +0200246/* Does kernel know about any quota information for given sb + type? */
247static inline int sb_has_quota_loaded(struct super_block *sb, int type)
248{
249 return 0;
250}
251
252static inline int sb_any_quota_loaded(struct super_block *sb)
253{
254 return 0;
255}
256
257static inline int sb_has_quota_active(struct super_block *sb, int type)
258{
259 return 0;
260}
261
262static inline int sb_any_quota_active(struct super_block *sb)
263{
264 return 0;
265}
266
Linus Torvalds1da177e2005-04-16 15:20:36 -0700267/*
268 * NO-OP when quota not configured.
269 */
270#define sb_dquot_ops (NULL)
271#define sb_quotactl_ops (NULL)
Andrew Morton50f8c372008-04-28 02:14:35 -0700272
Jan Karab85f4b82008-07-25 01:46:50 -0700273static inline void vfs_dq_init(struct inode *inode)
Andrew Morton50f8c372008-04-28 02:14:35 -0700274{
275}
276
Jan Karab85f4b82008-07-25 01:46:50 -0700277static inline void vfs_dq_drop(struct inode *inode)
Andrew Morton50f8c372008-04-28 02:14:35 -0700278{
279}
280
Jan Karab85f4b82008-07-25 01:46:50 -0700281static inline int vfs_dq_alloc_inode(struct inode *inode)
Andrew Morton50f8c372008-04-28 02:14:35 -0700282{
283 return 0;
284}
285
Jan Karab85f4b82008-07-25 01:46:50 -0700286static inline void vfs_dq_free_inode(struct inode *inode)
Andrew Morton50f8c372008-04-28 02:14:35 -0700287{
288}
289
Jan Karab85f4b82008-07-25 01:46:50 -0700290static inline void vfs_dq_sync(struct super_block *sb)
Andrew Morton50f8c372008-04-28 02:14:35 -0700291{
292}
293
Jan Karab85f4b82008-07-25 01:46:50 -0700294static inline int vfs_dq_off(struct super_block *sb, int remount)
Andrew Morton50f8c372008-04-28 02:14:35 -0700295{
296 return 0;
297}
298
Jan Karab85f4b82008-07-25 01:46:50 -0700299static inline int vfs_dq_quota_on_remount(struct super_block *sb)
Andrew Morton50f8c372008-04-28 02:14:35 -0700300{
301 return 0;
302}
303
Jan Karab85f4b82008-07-25 01:46:50 -0700304static inline int vfs_dq_transfer(struct inode *inode, struct iattr *iattr)
Andrew Morton50f8c372008-04-28 02:14:35 -0700305{
306 return 0;
307}
308
Jan Karab85f4b82008-07-25 01:46:50 -0700309static inline int vfs_dq_prealloc_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700310{
311 inode_add_bytes(inode, nr);
312 return 0;
313}
314
Jan Karab85f4b82008-07-25 01:46:50 -0700315static inline int vfs_dq_prealloc_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700316{
Jan Karab85f4b82008-07-25 01:46:50 -0700317 vfs_dq_prealloc_space_nodirty(inode, nr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700318 mark_inode_dirty(inode);
319 return 0;
320}
321
Jan Karab85f4b82008-07-25 01:46:50 -0700322static inline int vfs_dq_alloc_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700323{
324 inode_add_bytes(inode, nr);
325 return 0;
326}
327
Jan Karab85f4b82008-07-25 01:46:50 -0700328static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700329{
Jan Karab85f4b82008-07-25 01:46:50 -0700330 vfs_dq_alloc_space_nodirty(inode, nr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700331 mark_inode_dirty(inode);
332 return 0;
333}
334
Jan Karab85f4b82008-07-25 01:46:50 -0700335static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700336{
337 inode_sub_bytes(inode, nr);
338}
339
Jan Karab85f4b82008-07-25 01:46:50 -0700340static inline void vfs_dq_free_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700341{
Jan Karab85f4b82008-07-25 01:46:50 -0700342 vfs_dq_free_space_nodirty(inode, nr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700343 mark_inode_dirty(inode);
344}
345
346#endif /* CONFIG_QUOTA */
347
Jan Karab85f4b82008-07-25 01:46:50 -0700348static inline int vfs_dq_prealloc_block_nodirty(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700349{
Jan Karab85f4b82008-07-25 01:46:50 -0700350 return vfs_dq_prealloc_space_nodirty(inode,
Jan Kara03f6e922008-04-28 02:14:32 -0700351 nr << inode->i_sb->s_blocksize_bits);
352}
353
Jan Karab85f4b82008-07-25 01:46:50 -0700354static inline int vfs_dq_prealloc_block(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700355{
Jan Karab85f4b82008-07-25 01:46:50 -0700356 return vfs_dq_prealloc_space(inode,
Jan Kara03f6e922008-04-28 02:14:32 -0700357 nr << inode->i_sb->s_blocksize_bits);
358}
359
Jan Karab85f4b82008-07-25 01:46:50 -0700360static inline int vfs_dq_alloc_block_nodirty(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700361{
Jan Karab85f4b82008-07-25 01:46:50 -0700362 return vfs_dq_alloc_space_nodirty(inode,
Jan Kara03f6e922008-04-28 02:14:32 -0700363 nr << inode->i_sb->s_blocksize_bits);
364}
365
Jan Karab85f4b82008-07-25 01:46:50 -0700366static inline int vfs_dq_alloc_block(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700367{
Jan Karab85f4b82008-07-25 01:46:50 -0700368 return vfs_dq_alloc_space(inode,
Jan Kara03f6e922008-04-28 02:14:32 -0700369 nr << inode->i_sb->s_blocksize_bits);
370}
371
Jan Karab85f4b82008-07-25 01:46:50 -0700372static inline void vfs_dq_free_block_nodirty(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700373{
Jan Karab85f4b82008-07-25 01:46:50 -0700374 vfs_dq_free_space_nodirty(inode, nr << inode->i_sb->s_blocksize_bits);
Jan Kara03f6e922008-04-28 02:14:32 -0700375}
376
Jan Karab85f4b82008-07-25 01:46:50 -0700377static inline void vfs_dq_free_block(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700378{
Jan Karab85f4b82008-07-25 01:46:50 -0700379 vfs_dq_free_space(inode, nr << inode->i_sb->s_blocksize_bits);
Jan Kara03f6e922008-04-28 02:14:32 -0700380}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700381
Jan Karab85f4b82008-07-25 01:46:50 -0700382/*
383 * Define uppercase equivalents for compatibility with old function names
384 * Can go away when we think all users have been converted (15/04/2008)
385 */
386#define DQUOT_INIT(inode) vfs_dq_init(inode)
387#define DQUOT_DROP(inode) vfs_dq_drop(inode)
388#define DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr) \
389 vfs_dq_prealloc_space_nodirty(inode, nr)
390#define DQUOT_PREALLOC_SPACE(inode, nr) vfs_dq_prealloc_space(inode, nr)
391#define DQUOT_ALLOC_SPACE_NODIRTY(inode, nr) \
392 vfs_dq_alloc_space_nodirty(inode, nr)
393#define DQUOT_ALLOC_SPACE(inode, nr) vfs_dq_alloc_space(inode, nr)
394#define DQUOT_PREALLOC_BLOCK_NODIRTY(inode, nr) \
395 vfs_dq_prealloc_block_nodirty(inode, nr)
396#define DQUOT_PREALLOC_BLOCK(inode, nr) vfs_dq_prealloc_block(inode, nr)
397#define DQUOT_ALLOC_BLOCK_NODIRTY(inode, nr) \
398 vfs_dq_alloc_block_nodirty(inode, nr)
399#define DQUOT_ALLOC_BLOCK(inode, nr) vfs_dq_alloc_block(inode, nr)
400#define DQUOT_ALLOC_INODE(inode) vfs_dq_alloc_inode(inode)
401#define DQUOT_FREE_SPACE_NODIRTY(inode, nr) \
402 vfs_dq_free_space_nodirty(inode, nr)
403#define DQUOT_FREE_SPACE(inode, nr) vfs_dq_free_space(inode, nr)
404#define DQUOT_FREE_BLOCK_NODIRTY(inode, nr) \
405 vfs_dq_free_block_nodirty(inode, nr)
406#define DQUOT_FREE_BLOCK(inode, nr) vfs_dq_free_block(inode, nr)
407#define DQUOT_FREE_INODE(inode) vfs_dq_free_inode(inode)
408#define DQUOT_TRANSFER(inode, iattr) vfs_dq_transfer(inode, iattr)
409#define DQUOT_SYNC(sb) vfs_dq_sync(sb)
410#define DQUOT_OFF(sb, remount) vfs_dq_off(sb, remount)
411#define DQUOT_ON_REMOUNT(sb) vfs_dq_quota_on_remount(sb)
412
Linus Torvalds1da177e2005-04-16 15:20:36 -0700413#endif /* _LINUX_QUOTAOPS_ */