blob: 3b3346fa657c9e871c5ef90db5fbd508f0c171c4 [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
119/* For backward compatibility until we remove all users */
120#define sb_any_quota_enabled(sb) sb_any_quota_active(sb)
121
Linus Torvalds1da177e2005-04-16 15:20:36 -0700122/*
123 * Operations supported for diskquotas.
124 */
125extern struct dquot_operations dquot_operations;
126extern struct quotactl_ops vfs_quotactl_ops;
127
128#define sb_dquot_ops (&dquot_operations)
129#define sb_quotactl_ops (&vfs_quotactl_ops)
130
131/* It is better to call this function outside of any transaction as it might
132 * need a lot of space in journal for dquot structure allocation. */
Jan Karab85f4b82008-07-25 01:46:50 -0700133static inline void vfs_dq_init(struct inode *inode)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700134{
135 BUG_ON(!inode->i_sb);
Jan Karaf55abc02008-08-20 17:50:32 +0200136 if (sb_any_quota_active(inode->i_sb) && !IS_NOQUOTA(inode))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700137 inode->i_sb->dq_op->initialize(inode, -1);
138}
139
Linus Torvalds1da177e2005-04-16 15:20:36 -0700140/* The following allocation/freeing/transfer functions *must* be called inside
141 * a transaction (deadlocks possible otherwise) */
Jan Karab85f4b82008-07-25 01:46:50 -0700142static inline int vfs_dq_prealloc_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700143{
Jan Karaf55abc02008-08-20 17:50:32 +0200144 if (sb_any_quota_active(inode->i_sb)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700145 /* Used space is updated in alloc_space() */
146 if (inode->i_sb->dq_op->alloc_space(inode, nr, 1) == NO_QUOTA)
147 return 1;
148 }
149 else
150 inode_add_bytes(inode, nr);
151 return 0;
152}
153
Jan Karab85f4b82008-07-25 01:46:50 -0700154static inline int vfs_dq_prealloc_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700155{
156 int ret;
Jan Karab85f4b82008-07-25 01:46:50 -0700157 if (!(ret = vfs_dq_prealloc_space_nodirty(inode, nr)))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700158 mark_inode_dirty(inode);
159 return ret;
160}
161
Jan Karab85f4b82008-07-25 01:46:50 -0700162static inline int vfs_dq_alloc_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700163{
Jan Karaf55abc02008-08-20 17:50:32 +0200164 if (sb_any_quota_active(inode->i_sb)) {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700165 /* Used space is updated in alloc_space() */
166 if (inode->i_sb->dq_op->alloc_space(inode, nr, 0) == NO_QUOTA)
167 return 1;
168 }
169 else
170 inode_add_bytes(inode, nr);
171 return 0;
172}
173
Jan Karab85f4b82008-07-25 01:46:50 -0700174static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700175{
176 int ret;
Jan Karab85f4b82008-07-25 01:46:50 -0700177 if (!(ret = vfs_dq_alloc_space_nodirty(inode, nr)))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700178 mark_inode_dirty(inode);
179 return ret;
180}
181
Jan Karab85f4b82008-07-25 01:46:50 -0700182static inline int vfs_dq_alloc_inode(struct inode *inode)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700183{
Jan Karaf55abc02008-08-20 17:50:32 +0200184 if (sb_any_quota_active(inode->i_sb)) {
Jan Karab85f4b82008-07-25 01:46:50 -0700185 vfs_dq_init(inode);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700186 if (inode->i_sb->dq_op->alloc_inode(inode, 1) == NO_QUOTA)
187 return 1;
188 }
189 return 0;
190}
191
Jan Karab85f4b82008-07-25 01:46:50 -0700192static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700193{
Jan Karaf55abc02008-08-20 17:50:32 +0200194 if (sb_any_quota_active(inode->i_sb))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700195 inode->i_sb->dq_op->free_space(inode, nr);
196 else
197 inode_sub_bytes(inode, nr);
198}
199
Jan Karab85f4b82008-07-25 01:46:50 -0700200static inline void vfs_dq_free_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700201{
Jan Karab85f4b82008-07-25 01:46:50 -0700202 vfs_dq_free_space_nodirty(inode, nr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700203 mark_inode_dirty(inode);
204}
205
Jan Karab85f4b82008-07-25 01:46:50 -0700206static inline void vfs_dq_free_inode(struct inode *inode)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700207{
Jan Karaf55abc02008-08-20 17:50:32 +0200208 if (sb_any_quota_active(inode->i_sb))
Linus Torvalds1da177e2005-04-16 15:20:36 -0700209 inode->i_sb->dq_op->free_inode(inode, 1);
210}
211
Linus Torvalds1da177e2005-04-16 15:20:36 -0700212/* The following two functions cannot be called inside a transaction */
Jan Karab85f4b82008-07-25 01:46:50 -0700213static inline void vfs_dq_sync(struct super_block *sb)
Jan Kara03f6e922008-04-28 02:14:32 -0700214{
215 sync_dquots(sb, -1);
216}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700217
Jan Karab85f4b82008-07-25 01:46:50 -0700218static inline int vfs_dq_off(struct super_block *sb, int remount)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700219{
220 int ret = -ENOSYS;
221
Jan Kara0ff5af82008-04-28 02:14:33 -0700222 if (sb->s_qcop && sb->s_qcop->quota_off)
223 ret = sb->s_qcop->quota_off(sb, -1, remount);
224 return ret;
225}
226
Linus Torvalds1da177e2005-04-16 15:20:36 -0700227#else
228
Jan Karaf55abc02008-08-20 17:50:32 +0200229static inline int sb_has_quota_usage_enabled(struct super_block *sb, int type)
Jan Kara03b06342008-07-25 01:46:52 -0700230{
231 return 0;
232}
233
Jan Karaf55abc02008-08-20 17:50:32 +0200234static inline int sb_has_quota_limits_enabled(struct super_block *sb, int type)
Jan Kara03b06342008-07-25 01:46:52 -0700235{
236 return 0;
237}
238
239static inline int sb_has_quota_suspended(struct super_block *sb, int type)
240{
241 return 0;
242}
243
244static inline int sb_any_quota_suspended(struct super_block *sb)
245{
246 return 0;
247}
Jan Kara74abb982008-07-25 01:46:51 -0700248
Jan Karaf55abc02008-08-20 17:50:32 +0200249/* Does kernel know about any quota information for given sb + type? */
250static inline int sb_has_quota_loaded(struct super_block *sb, int type)
251{
252 return 0;
253}
254
255static inline int sb_any_quota_loaded(struct super_block *sb)
256{
257 return 0;
258}
259
260static inline int sb_has_quota_active(struct super_block *sb, int type)
261{
262 return 0;
263}
264
265static inline int sb_any_quota_active(struct super_block *sb)
266{
267 return 0;
268}
269
270/* For backward compatibility until we remove all users */
271#define sb_any_quota_enabled(sb) sb_any_quota_active(sb)
272
Linus Torvalds1da177e2005-04-16 15:20:36 -0700273/*
274 * NO-OP when quota not configured.
275 */
276#define sb_dquot_ops (NULL)
277#define sb_quotactl_ops (NULL)
Andrew Morton50f8c372008-04-28 02:14:35 -0700278
Jan Karab85f4b82008-07-25 01:46:50 -0700279static inline void vfs_dq_init(struct inode *inode)
Andrew Morton50f8c372008-04-28 02:14:35 -0700280{
281}
282
Jan Karab85f4b82008-07-25 01:46:50 -0700283static inline void vfs_dq_drop(struct inode *inode)
Andrew Morton50f8c372008-04-28 02:14:35 -0700284{
285}
286
Jan Karab85f4b82008-07-25 01:46:50 -0700287static inline int vfs_dq_alloc_inode(struct inode *inode)
Andrew Morton50f8c372008-04-28 02:14:35 -0700288{
289 return 0;
290}
291
Jan Karab85f4b82008-07-25 01:46:50 -0700292static inline void vfs_dq_free_inode(struct inode *inode)
Andrew Morton50f8c372008-04-28 02:14:35 -0700293{
294}
295
Jan Karab85f4b82008-07-25 01:46:50 -0700296static inline void vfs_dq_sync(struct super_block *sb)
Andrew Morton50f8c372008-04-28 02:14:35 -0700297{
298}
299
Jan Karab85f4b82008-07-25 01:46:50 -0700300static inline int vfs_dq_off(struct super_block *sb, int remount)
Andrew Morton50f8c372008-04-28 02:14:35 -0700301{
302 return 0;
303}
304
Jan Karab85f4b82008-07-25 01:46:50 -0700305static inline int vfs_dq_quota_on_remount(struct super_block *sb)
Andrew Morton50f8c372008-04-28 02:14:35 -0700306{
307 return 0;
308}
309
Jan Karab85f4b82008-07-25 01:46:50 -0700310static inline int vfs_dq_transfer(struct inode *inode, struct iattr *iattr)
Andrew Morton50f8c372008-04-28 02:14:35 -0700311{
312 return 0;
313}
314
Jan Karab85f4b82008-07-25 01:46:50 -0700315static inline int vfs_dq_prealloc_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700316{
317 inode_add_bytes(inode, nr);
318 return 0;
319}
320
Jan Karab85f4b82008-07-25 01:46:50 -0700321static inline int vfs_dq_prealloc_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700322{
Jan Karab85f4b82008-07-25 01:46:50 -0700323 vfs_dq_prealloc_space_nodirty(inode, nr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700324 mark_inode_dirty(inode);
325 return 0;
326}
327
Jan Karab85f4b82008-07-25 01:46:50 -0700328static inline int vfs_dq_alloc_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700329{
330 inode_add_bytes(inode, nr);
331 return 0;
332}
333
Jan Karab85f4b82008-07-25 01:46:50 -0700334static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700335{
Jan Karab85f4b82008-07-25 01:46:50 -0700336 vfs_dq_alloc_space_nodirty(inode, nr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700337 mark_inode_dirty(inode);
338 return 0;
339}
340
Jan Karab85f4b82008-07-25 01:46:50 -0700341static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700342{
343 inode_sub_bytes(inode, nr);
344}
345
Jan Karab85f4b82008-07-25 01:46:50 -0700346static inline void vfs_dq_free_space(struct inode *inode, qsize_t nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700347{
Jan Karab85f4b82008-07-25 01:46:50 -0700348 vfs_dq_free_space_nodirty(inode, nr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700349 mark_inode_dirty(inode);
350}
351
352#endif /* CONFIG_QUOTA */
353
Jan Karab85f4b82008-07-25 01:46:50 -0700354static inline int vfs_dq_prealloc_block_nodirty(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_nodirty(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_prealloc_block(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_prealloc_space(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_nodirty(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_nodirty(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 int vfs_dq_alloc_block(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700373{
Jan Karab85f4b82008-07-25 01:46:50 -0700374 return vfs_dq_alloc_space(inode,
Jan Kara03f6e922008-04-28 02:14:32 -0700375 nr << inode->i_sb->s_blocksize_bits);
376}
377
Jan Karab85f4b82008-07-25 01:46:50 -0700378static inline void vfs_dq_free_block_nodirty(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700379{
Jan Karab85f4b82008-07-25 01:46:50 -0700380 vfs_dq_free_space_nodirty(inode, nr << inode->i_sb->s_blocksize_bits);
Jan Kara03f6e922008-04-28 02:14:32 -0700381}
382
Jan Karab85f4b82008-07-25 01:46:50 -0700383static inline void vfs_dq_free_block(struct inode *inode, qsize_t nr)
Jan Kara03f6e922008-04-28 02:14:32 -0700384{
Jan Karab85f4b82008-07-25 01:46:50 -0700385 vfs_dq_free_space(inode, nr << inode->i_sb->s_blocksize_bits);
Jan Kara03f6e922008-04-28 02:14:32 -0700386}
Linus Torvalds1da177e2005-04-16 15:20:36 -0700387
Jan Karab85f4b82008-07-25 01:46:50 -0700388/*
389 * Define uppercase equivalents for compatibility with old function names
390 * Can go away when we think all users have been converted (15/04/2008)
391 */
392#define DQUOT_INIT(inode) vfs_dq_init(inode)
393#define DQUOT_DROP(inode) vfs_dq_drop(inode)
394#define DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr) \
395 vfs_dq_prealloc_space_nodirty(inode, nr)
396#define DQUOT_PREALLOC_SPACE(inode, nr) vfs_dq_prealloc_space(inode, nr)
397#define DQUOT_ALLOC_SPACE_NODIRTY(inode, nr) \
398 vfs_dq_alloc_space_nodirty(inode, nr)
399#define DQUOT_ALLOC_SPACE(inode, nr) vfs_dq_alloc_space(inode, nr)
400#define DQUOT_PREALLOC_BLOCK_NODIRTY(inode, nr) \
401 vfs_dq_prealloc_block_nodirty(inode, nr)
402#define DQUOT_PREALLOC_BLOCK(inode, nr) vfs_dq_prealloc_block(inode, nr)
403#define DQUOT_ALLOC_BLOCK_NODIRTY(inode, nr) \
404 vfs_dq_alloc_block_nodirty(inode, nr)
405#define DQUOT_ALLOC_BLOCK(inode, nr) vfs_dq_alloc_block(inode, nr)
406#define DQUOT_ALLOC_INODE(inode) vfs_dq_alloc_inode(inode)
407#define DQUOT_FREE_SPACE_NODIRTY(inode, nr) \
408 vfs_dq_free_space_nodirty(inode, nr)
409#define DQUOT_FREE_SPACE(inode, nr) vfs_dq_free_space(inode, nr)
410#define DQUOT_FREE_BLOCK_NODIRTY(inode, nr) \
411 vfs_dq_free_block_nodirty(inode, nr)
412#define DQUOT_FREE_BLOCK(inode, nr) vfs_dq_free_block(inode, nr)
413#define DQUOT_FREE_INODE(inode) vfs_dq_free_inode(inode)
414#define DQUOT_TRANSFER(inode, iattr) vfs_dq_transfer(inode, iattr)
415#define DQUOT_SYNC(sb) vfs_dq_sync(sb)
416#define DQUOT_OFF(sb, remount) vfs_dq_off(sb, remount)
417#define DQUOT_ON_REMOUNT(sb) vfs_dq_quota_on_remount(sb)
418
Linus Torvalds1da177e2005-04-16 15:20:36 -0700419#endif /* _LINUX_QUOTAOPS_ */