diff options
author | Dmitry Monakhov <dmonakhov@openvz.org> | 2010-02-09 17:53:36 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-04-01 16:02:12 -0700 |
commit | 1f371c1a285e3dab9c6951cb9f4410c17bcb6ba1 (patch) | |
tree | 78fadda328734944ec9bbc26abca14b948c9bdc1 /fs/quota | |
parent | e3f1272e2083ee9cf0a21a405ff24b95c2423a97 (diff) | |
download | kernel-crypto-1f371c1a285e3dab9c6951cb9f4410c17bcb6ba1.tar.gz kernel-crypto-1f371c1a285e3dab9c6951cb9f4410c17bcb6ba1.tar.xz kernel-crypto-1f371c1a285e3dab9c6951cb9f4410c17bcb6ba1.zip |
quota: manage reserved space when quota is not active [v2]
commit c469070aea5a0ada45a836937c776fd3083dae2b upstream.
Since we implemented generic reserved space management interface,
then it is possible to account reserved space even when quota
is not active (similar to i_blocks/i_bytes).
Without this patch following testcase result in massive comlain from
WARN_ON in dquot_claim_space()
TEST_CASE:
mount /dev/sdb /mnt -oquota
dd if=/dev/zero of=/mnt/test bs=1M count=1
quotaon /mnt
# fs_reserved_spave == 1Mb
# quota_reserved_space == 0, because quota was disabled
dd if=/dev/zero of=/mnt/test seek=1 bs=1M count=1
# fs_reserved_spave == 2Mb
# quota_reserved_space == 1Mb
sync # ->dquot_claim_space() -> WARN_ON
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs/quota')
-rw-r--r-- | fs/quota/dquot.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 3fc62b097be..7b980954993 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -1351,28 +1351,30 @@ static qsize_t *inode_reserved_space(struct inode * inode) return inode->i_sb->dq_op->get_reserved_space(inode); } -static void inode_add_rsv_space(struct inode *inode, qsize_t number) +void inode_add_rsv_space(struct inode *inode, qsize_t number) { spin_lock(&inode->i_lock); *inode_reserved_space(inode) += number; spin_unlock(&inode->i_lock); } +EXPORT_SYMBOL(inode_add_rsv_space); - -static void inode_claim_rsv_space(struct inode *inode, qsize_t number) +void inode_claim_rsv_space(struct inode *inode, qsize_t number) { spin_lock(&inode->i_lock); *inode_reserved_space(inode) -= number; __inode_add_bytes(inode, number); spin_unlock(&inode->i_lock); } +EXPORT_SYMBOL(inode_claim_rsv_space); -static void inode_sub_rsv_space(struct inode *inode, qsize_t number) +void inode_sub_rsv_space(struct inode *inode, qsize_t number) { spin_lock(&inode->i_lock); *inode_reserved_space(inode) -= number; spin_unlock(&inode->i_lock); } +EXPORT_SYMBOL(inode_sub_rsv_space); static qsize_t inode_get_rsv_space(struct inode *inode) { |