From: Dmitry Monakhov Date: Wed, 9 Dec 2009 03:42:28 +0000 (-0500) Subject: ext4: fix incorrect block reservation on quota transfer. X-Git-Tag: firefly_0821_release~11625^2~639 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=caa305aa349212c285ad9564b9ff2ffa040b193c;p=firefly-linux-kernel-4.4.55.git ext4: fix incorrect block reservation on quota transfer. (cherry picked from commit 194074acacebc169ded90a4657193f5180015051) Inside ->setattr() call both ATTR_UID and ATTR_GID may be valid This means that we may end-up with transferring all quotas. Add we have to reserve QUOTA_DEL_BLOCKS for all quotas, as we do in case of QUOTA_INIT_BLOCKS. Signed-off-by: Dmitry Monakhov Reviewed-by: Mingming Cao Signed-off-by: "Theodore Ts'o" Signed-off-by: Greg Kroah-Hartman --- diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index e08e81b4f7d1..64086fb96e47 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5232,7 +5232,7 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr) /* (user+group)*(old+new) structure, inode write (sb, * inode block, ? - but truncate inode update has it) */ handle = ext4_journal_start(inode, (EXT4_MAXQUOTAS_INIT_BLOCKS(inode->i_sb)+ - EXT4_QUOTA_DEL_BLOCKS(inode->i_sb))+3); + EXT4_MAXQUOTAS_DEL_BLOCKS(inode->i_sb))+3); if (IS_ERR(handle)) { error = PTR_ERR(handle); goto err_out;