aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/quotaops.h
diff options
context:
space:
mode:
authorEric Sandeen <sandeen@redhat.com>2010-05-16 10:00:00 -0400
committerTheodore Ts'o <tytso@mit.edu>2010-05-16 10:00:00 -0400
commit0e05842bc117ea70ceb979cca798fd026879951b (patch)
tree9cac03004706c912b15a859d9e35fedd496653b2 /include/linux/quotaops.h
parent56246f9ae4cfa95b460f9dfbcfb1b772d85db046 (diff)
quota: add the option to not fail with EDQUOT in block
To simplify metadata tracking for delalloc writes, ext4 will simply claim metadata blocks at allocation time, without first speculatively reserving the worst case and then freeing what was not used. To do this, we need a mechanism to track allocations in the quota subsystem, but potentially allow that allocation to actually go over quota. This patch adds a DQUOT_SPACE_NOFAIL flag and function variants for this purpose. Signed-off-by: Eric Sandeen <sandeen@redhat.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'include/linux/quotaops.h')
-rw-r--r--include/linux/quotaops.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h
index 9edd53c24984..f8dbeb0fe0c9 100644
--- a/include/linux/quotaops.h
+++ b/include/linux/quotaops.h
@@ -11,6 +11,7 @@
11 11
12#define DQUOT_SPACE_WARN 0x1 12#define DQUOT_SPACE_WARN 0x1
13#define DQUOT_SPACE_RESERVE 0x2 13#define DQUOT_SPACE_RESERVE 0x2
14#define DQUOT_SPACE_NOFAIL 0x4
14 15
15static inline struct quota_info *sb_dqopt(struct super_block *sb) 16static inline struct quota_info *sb_dqopt(struct super_block *sb)
16{ 17{
@@ -262,6 +263,12 @@ static inline int dquot_alloc_space_nodirty(struct inode *inode, qsize_t nr)
262 return __dquot_alloc_space(inode, nr, DQUOT_SPACE_WARN); 263 return __dquot_alloc_space(inode, nr, DQUOT_SPACE_WARN);
263} 264}
264 265
266static inline void dquot_alloc_space_nofail(struct inode *inode, qsize_t nr)
267{
268 __dquot_alloc_space(inode, nr, DQUOT_SPACE_WARN|DQUOT_SPACE_NOFAIL);
269 mark_inode_dirty(inode);
270}
271
265static inline int dquot_alloc_space(struct inode *inode, qsize_t nr) 272static inline int dquot_alloc_space(struct inode *inode, qsize_t nr)
266{ 273{
267 int ret; 274 int ret;
@@ -277,6 +284,11 @@ static inline int dquot_alloc_block_nodirty(struct inode *inode, qsize_t nr)
277 return dquot_alloc_space_nodirty(inode, nr << inode->i_blkbits); 284 return dquot_alloc_space_nodirty(inode, nr << inode->i_blkbits);
278} 285}
279 286
287static inline void dquot_alloc_block_nofail(struct inode *inode, qsize_t nr)
288{
289 dquot_alloc_space_nofail(inode, nr << inode->i_blkbits);
290}
291
280static inline int dquot_alloc_block(struct inode *inode, qsize_t nr) 292static inline int dquot_alloc_block(struct inode *inode, qsize_t nr)
281{ 293{
282 return dquot_alloc_space(inode, nr << inode->i_blkbits); 294 return dquot_alloc_space(inode, nr << inode->i_blkbits);