2 * Definitions for diskquota-operations. When diskquota is configured these
3 * macros expand to the right source-code.
5 * Author: Marco van Wieringen <mvw@planets.elm.net>
7 #ifndef _LINUX_QUOTAOPS_
8 #define _LINUX_QUOTAOPS_
12 static inline struct quota_info *sb_dqopt(struct super_block *sb)
17 /* i_mutex must being held */
18 static inline bool is_quota_modification(struct inode *inode, struct iattr *ia)
20 return (ia->ia_valid & ATTR_SIZE && ia->ia_size != inode->i_size) ||
21 (ia->ia_valid & ATTR_UID && ia->ia_uid != inode->i_uid) ||
22 (ia->ia_valid & ATTR_GID && ia->ia_gid != inode->i_gid);
25 #if defined(CONFIG_QUOTA)
28 * declaration of quota_function calls in kernel.
30 void inode_add_rsv_space(struct inode *inode, qsize_t number);
31 void inode_claim_rsv_space(struct inode *inode, qsize_t number);
32 void inode_sub_rsv_space(struct inode *inode, qsize_t number);
34 void dquot_initialize(struct inode *inode);
35 void dquot_drop(struct inode *inode);
36 struct dquot *dqget(struct super_block *sb, unsigned int id, int type);
37 void dqput(struct dquot *dquot);
38 int dquot_scan_active(struct super_block *sb,
39 int (*fn)(struct dquot *dquot, unsigned long priv),
41 struct dquot *dquot_alloc(struct super_block *sb, int type);
42 void dquot_destroy(struct dquot *dquot);
44 int __dquot_alloc_space(struct inode *inode, qsize_t number,
45 int warn, int reserve);
46 void __dquot_free_space(struct inode *inode, qsize_t number, int reserve);
48 int dquot_alloc_inode(const struct inode *inode);
50 int dquot_claim_space_nodirty(struct inode *inode, qsize_t number);
51 void dquot_free_inode(const struct inode *inode);
53 int dquot_commit(struct dquot *dquot);
54 int dquot_acquire(struct dquot *dquot);
55 int dquot_release(struct dquot *dquot);
56 int dquot_commit_info(struct super_block *sb, int type);
57 int dquot_mark_dquot_dirty(struct dquot *dquot);
59 int dquot_file_open(struct inode *inode, struct file *file);
61 int vfs_quota_on(struct super_block *sb, int type, int format_id,
62 char *path, int remount);
63 int vfs_quota_enable(struct inode *inode, int type, int format_id,
65 int vfs_quota_on_path(struct super_block *sb, int type, int format_id,
67 int vfs_quota_on_mount(struct super_block *sb, char *qf_name,
68 int format_id, int type);
69 int vfs_quota_off(struct super_block *sb, int type, int remount);
70 int vfs_quota_disable(struct super_block *sb, int type, unsigned int flags);
71 int vfs_quota_sync(struct super_block *sb, int type, int wait);
72 int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
73 int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
74 int vfs_get_dqblk(struct super_block *sb, int type, qid_t id,
75 struct fs_disk_quota *di);
76 int vfs_set_dqblk(struct super_block *sb, int type, qid_t id,
77 struct fs_disk_quota *di);
79 int dquot_transfer(struct inode *inode, struct iattr *iattr);
80 int vfs_dq_quota_on_remount(struct super_block *sb);
82 static inline struct mem_dqinfo *sb_dqinfo(struct super_block *sb, int type)
84 return sb_dqopt(sb)->info + type;
88 * Functions for checking status of quota
91 static inline bool sb_has_quota_usage_enabled(struct super_block *sb, int type)
93 return sb_dqopt(sb)->flags &
94 dquot_state_flag(DQUOT_USAGE_ENABLED, type);
97 static inline bool sb_has_quota_limits_enabled(struct super_block *sb, int type)
99 return sb_dqopt(sb)->flags &
100 dquot_state_flag(DQUOT_LIMITS_ENABLED, type);
103 static inline bool sb_has_quota_suspended(struct super_block *sb, int type)
105 return sb_dqopt(sb)->flags &
106 dquot_state_flag(DQUOT_SUSPENDED, type);
109 static inline unsigned sb_any_quota_suspended(struct super_block *sb)
111 unsigned type, tmsk = 0;
112 for (type = 0; type < MAXQUOTAS; type++)
113 tmsk |= sb_has_quota_suspended(sb, type) << type;
117 /* Does kernel know about any quota information for given sb + type? */
118 static inline bool sb_has_quota_loaded(struct super_block *sb, int type)
120 /* Currently if anything is on, then quota usage is on as well */
121 return sb_has_quota_usage_enabled(sb, type);
124 static inline unsigned sb_any_quota_loaded(struct super_block *sb)
126 unsigned type, tmsk = 0;
127 for (type = 0; type < MAXQUOTAS; type++)
128 tmsk |= sb_has_quota_loaded(sb, type) << type;
132 static inline bool sb_has_quota_active(struct super_block *sb, int type)
134 return sb_has_quota_loaded(sb, type) &&
135 !sb_has_quota_suspended(sb, type);
138 static inline unsigned sb_any_quota_active(struct super_block *sb)
140 return sb_any_quota_loaded(sb) & ~sb_any_quota_suspended(sb);
144 * Operations supported for diskquotas.
146 extern const struct dquot_operations dquot_operations;
147 extern const struct quotactl_ops vfs_quotactl_ops;
149 #define sb_dquot_ops (&dquot_operations)
150 #define sb_quotactl_ops (&vfs_quotactl_ops)
152 /* Cannot be called inside a transaction */
153 static inline int vfs_dq_off(struct super_block *sb, int remount)
157 if (sb->s_qcop && sb->s_qcop->quota_off)
158 ret = sb->s_qcop->quota_off(sb, -1, remount);
164 static inline int sb_has_quota_usage_enabled(struct super_block *sb, int type)
169 static inline int sb_has_quota_limits_enabled(struct super_block *sb, int type)
174 static inline int sb_has_quota_suspended(struct super_block *sb, int type)
179 static inline int sb_any_quota_suspended(struct super_block *sb)
184 /* Does kernel know about any quota information for given sb + type? */
185 static inline int sb_has_quota_loaded(struct super_block *sb, int type)
190 static inline int sb_any_quota_loaded(struct super_block *sb)
195 static inline int sb_has_quota_active(struct super_block *sb, int type)
200 static inline int sb_any_quota_active(struct super_block *sb)
206 * NO-OP when quota not configured.
208 #define sb_dquot_ops (NULL)
209 #define sb_quotactl_ops (NULL)
211 static inline void dquot_initialize(struct inode *inode)
215 static inline void dquot_drop(struct inode *inode)
219 static inline int dquot_alloc_inode(const struct inode *inode)
224 static inline void dquot_free_inode(const struct inode *inode)
228 static inline int vfs_dq_off(struct super_block *sb, int remount)
233 static inline int vfs_dq_quota_on_remount(struct super_block *sb)
238 static inline int dquot_transfer(struct inode *inode, struct iattr *iattr)
243 static inline int __dquot_alloc_space(struct inode *inode, qsize_t number,
244 int warn, int reserve)
247 inode_add_bytes(inode, number);
251 static inline void __dquot_free_space(struct inode *inode, qsize_t number,
255 inode_sub_bytes(inode, number);
258 static inline int dquot_claim_space_nodirty(struct inode *inode, qsize_t number)
260 inode_add_bytes(inode, number);
264 #define dquot_file_open generic_file_open
266 #endif /* CONFIG_QUOTA */
268 static inline int dquot_alloc_space_nodirty(struct inode *inode, qsize_t nr)
270 return __dquot_alloc_space(inode, nr, 1, 0);
273 static inline int dquot_alloc_space(struct inode *inode, qsize_t nr)
277 ret = dquot_alloc_space_nodirty(inode, nr);
279 mark_inode_dirty(inode);
283 static inline int dquot_alloc_block_nodirty(struct inode *inode, qsize_t nr)
285 return dquot_alloc_space_nodirty(inode, nr << inode->i_blkbits);
288 static inline int dquot_alloc_block(struct inode *inode, qsize_t nr)
290 return dquot_alloc_space(inode, nr << inode->i_blkbits);
293 static inline int dquot_prealloc_block_nodirty(struct inode *inode, qsize_t nr)
295 return __dquot_alloc_space(inode, nr << inode->i_blkbits, 0, 0);
298 static inline int dquot_prealloc_block(struct inode *inode, qsize_t nr)
302 ret = dquot_prealloc_block_nodirty(inode, nr);
304 mark_inode_dirty(inode);
308 static inline int dquot_reserve_block(struct inode *inode, qsize_t nr)
310 return __dquot_alloc_space(inode, nr << inode->i_blkbits, 1, 1);
313 static inline int dquot_claim_block(struct inode *inode, qsize_t nr)
317 ret = dquot_claim_space_nodirty(inode, nr << inode->i_blkbits);
319 mark_inode_dirty(inode);
323 static inline void dquot_free_space_nodirty(struct inode *inode, qsize_t nr)
325 __dquot_free_space(inode, nr, 0);
328 static inline void dquot_free_space(struct inode *inode, qsize_t nr)
330 dquot_free_space_nodirty(inode, nr);
331 mark_inode_dirty(inode);
334 static inline void dquot_free_block_nodirty(struct inode *inode, qsize_t nr)
336 dquot_free_space_nodirty(inode, nr << inode->i_blkbits);
339 static inline void dquot_free_block(struct inode *inode, qsize_t nr)
341 dquot_free_space(inode, nr << inode->i_blkbits);
344 static inline void dquot_release_reservation_block(struct inode *inode,
347 __dquot_free_space(inode, nr << inode->i_blkbits, 1);
350 #endif /* _LINUX_QUOTAOPS_ */