From: Aditya Kali Date: Fri, 13 Jul 2012 22:25:07 +0000 (-0700) Subject: libquota: fix quota_inode_truncate() X-Git-Tag: v1.42.5~17 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=ad64902b70282cc0d3453237b39a1d1388906509;p=tools%2Fe2fsprogs.git libquota: fix quota_inode_truncate() We failed to clear EXT2_FLAG_SUPER_ONLY after deleting the quota inode and so, the updated block bitmap was not written back. This caused fsck to complain after running 'tune2fs -O ^quota '. Clear this flag so that updated block bitmap gets written. Also, avoid truncating the quota inode if it is not hidden. Signed-off-by: Aditya Kali Signed-off-by: Theodore Ts'o --- diff --git a/lib/quota/quotaio.c b/lib/quota/quotaio.c index c0ebaa1..7cdd653 100644 --- a/lib/quota/quotaio.c +++ b/lib/quota/quotaio.c @@ -133,14 +133,18 @@ errcode_t quota_inode_truncate(ext2_filsys fs, ext2_ino_t ino) if ((err = ext2fs_read_inode(fs, ino, &inode))) return err; - inode.i_dtime = fs->now ? fs->now : time(0); - if (!ext2fs_inode_has_valid_blocks2(fs, &inode)) - return 0; - - ext2fs_block_iterate3(fs, ino, BLOCK_FLAG_READ_ONLY, NULL, - release_blocks_proc, NULL); - - memset(&inode, 0, sizeof(struct ext2_inode)); + if ((ino == EXT4_USR_QUOTA_INO) || (ino == EXT4_GRP_QUOTA_INO)) { + inode.i_dtime = fs->now ? fs->now : time(0); + if (!ext2fs_inode_has_valid_blocks2(fs, &inode)) + return 0; + + ext2fs_block_iterate3(fs, ino, BLOCK_FLAG_READ_ONLY, NULL, + release_blocks_proc, NULL); + fs->flags &= ~EXT2_FLAG_SUPER_ONLY; + memset(&inode, 0, sizeof(struct ext2_inode)); + } else { + inode.i_flags &= ~EXT2_IMMUTABLE_FL; + } err = ext2fs_write_inode(fs, ino, &inode); return err; }