diff options
author | Dmitry Monakhov <dmonakhov@openvz.org> | 2011-10-29 15:05:00 +0200 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2011-10-29 15:05:00 +0200 |
commit | 5cb81dabcc28863e7d04e6fd9ede154bd8459c14 (patch) | |
tree | 704df9fffdc243449dc5eba697cec133162ee1bf /fs/ext4/migrate.c | |
parent | ext4: migrate cleanup (diff) | |
download | linux-5cb81dabcc28863e7d04e6fd9ede154bd8459c14.tar.xz linux-5cb81dabcc28863e7d04e6fd9ede154bd8459c14.zip |
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>
Diffstat (limited to 'fs/ext4/migrate.c')
-rw-r--r-- | fs/ext4/migrate.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c index 8a9a0912fdae..f729377bf043 100644 --- a/fs/ext4/migrate.c +++ b/fs/ext4/migrate.c @@ -439,6 +439,7 @@ int ext4_ext_migrate(struct inode *inode) struct migrate_struct lb; unsigned long max_entries; __u32 goal; + uid_t owner[2]; /* * If the filesystem does not support extents, or the inode @@ -466,10 +467,12 @@ int ext4_ext_migrate(struct inode *inode) } goal = (((inode->i_ino - 1) / EXT4_INODES_PER_GROUP(inode->i_sb)) * EXT4_INODES_PER_GROUP(inode->i_sb)) + 1; + owner[0] = inode->i_uid; + owner[1] = inode->i_gid; tmp_inode = ext4_new_inode(handle, inode->i_sb->s_root->d_inode, - S_IFREG, NULL, goal); + S_IFREG, NULL, goal, owner); if (IS_ERR(tmp_inode)) { - retval = -ENOMEM; + retval = PTR_ERR(inode); ext4_journal_stop(handle); return retval; } |