ext4: fix quota accounting during migration
The tmp_inode should have same uid/gid as the original inode. Otherwise new metadata blocks will be accounted to wrong quota-id, which will result in a quota leak after the inode migration is completed. Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
committed by
Theodore Ts'o
parent
fba90ffee8
commit
5cb81dabcc
@@ -691,7 +691,7 @@ err_ret:
|
||||
* group to find a free inode.
|
||||
*/
|
||||
struct inode *ext4_new_inode(handle_t *handle, struct inode *dir, int mode,
|
||||
const struct qstr *qstr, __u32 goal)
|
||||
const struct qstr *qstr, __u32 goal, uid_t *owner)
|
||||
{
|
||||
struct super_block *sb;
|
||||
struct buffer_head *inode_bitmap_bh = NULL;
|
||||
@@ -852,8 +852,11 @@ got:
|
||||
flex_group = ext4_flex_group(sbi, group);
|
||||
atomic_dec(&sbi->s_flex_groups[flex_group].free_inodes);
|
||||
}
|
||||
|
||||
if (test_opt(sb, GRPID)) {
|
||||
if (owner) {
|
||||
inode->i_mode = mode;
|
||||
inode->i_uid = owner[0];
|
||||
inode->i_gid = owner[1];
|
||||
} else if (test_opt(sb, GRPID)) {
|
||||
inode->i_mode = mode;
|
||||
inode->i_uid = current_fsuid();
|
||||
inode->i_gid = dir->i_gid;
|
||||
|
Reference in New Issue
Block a user