diff options
author | Dmitry Monakhov <dmonakhov@openvz.org> | 2009-12-14 07:21:14 -0500 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2009-12-23 07:33:55 -0500 |
commit | a9e7f4472075fb6937c545af3f6329e9946bbe66 (patch) | |
tree | 399e294982e1c9691332eca72942910a7f74e9f8 /fs/ext4/inode.c | |
parent | fd8fbfc1709822bd94247c5b2ab15a5f5041e103 (diff) |
ext4: Convert to generic reserved quota's space management.
This patch also fixes write vs chown race condition.
Acked-by: "Theodore Ts'o" <tytso@mit.edu>
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/ext4/inode.c')
-rw-r--r-- | fs/ext4/inode.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 5352db1a3086..a31980dd9b86 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -1003,17 +1003,12 @@ out: | |||
1003 | return err; | 1003 | return err; |
1004 | } | 1004 | } |
1005 | 1005 | ||
1006 | qsize_t ext4_get_reserved_space(struct inode *inode) | 1006 | #ifdef CONFIG_QUOTA |
1007 | qsize_t *ext4_get_reserved_space(struct inode *inode) | ||
1007 | { | 1008 | { |
1008 | unsigned long long total; | 1009 | return &EXT4_I(inode)->i_reserved_quota; |
1009 | |||
1010 | spin_lock(&EXT4_I(inode)->i_block_reservation_lock); | ||
1011 | total = EXT4_I(inode)->i_reserved_data_blocks + | ||
1012 | EXT4_I(inode)->i_reserved_meta_blocks; | ||
1013 | spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); | ||
1014 | |||
1015 | return (total << inode->i_blkbits); | ||
1016 | } | 1010 | } |
1011 | #endif | ||
1017 | /* | 1012 | /* |
1018 | * Calculate the number of metadata blocks need to reserve | 1013 | * Calculate the number of metadata blocks need to reserve |
1019 | * to allocate @blocks for non extent file based file | 1014 | * to allocate @blocks for non extent file based file |
@@ -4794,6 +4789,9 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino) | |||
4794 | ((__u64)le16_to_cpu(raw_inode->i_file_acl_high)) << 32; | 4789 | ((__u64)le16_to_cpu(raw_inode->i_file_acl_high)) << 32; |
4795 | inode->i_size = ext4_isize(raw_inode); | 4790 | inode->i_size = ext4_isize(raw_inode); |
4796 | ei->i_disksize = inode->i_size; | 4791 | ei->i_disksize = inode->i_size; |
4792 | #ifdef CONFIG_QUOTA | ||
4793 | ei->i_reserved_quota = 0; | ||
4794 | #endif | ||
4797 | inode->i_generation = le32_to_cpu(raw_inode->i_generation); | 4795 | inode->i_generation = le32_to_cpu(raw_inode->i_generation); |
4798 | ei->i_block_group = iloc.block_group; | 4796 | ei->i_block_group = iloc.block_group; |
4799 | ei->i_last_alloc_group = ~0; | 4797 | ei->i_last_alloc_group = ~0; |