ext4: fix incorrect quotaoff if the quota feature is enabled
commit b0a5a9589decd07db755d6a8d9c0910d96ff7992 upstream. Current ext4 quota should always "usage enabled" if the quota feautre is enabled. But in ext4_orphan_cleanup(), it turn quotas off directly (used for the older journaled quota), so we cannot turn it on again via "quotaon" unless umount and remount ext4. Simple reproduce: mkfs.ext4 -O project,quota /dev/vdb1 mount -o prjquota /dev/vdb1 /mnt chattr -p 123 /mnt chattr +P /mnt touch /mnt/aa /mnt/bb exec 100<>/mnt/aa rm -f /mnt/aa sync echo c > /proc/sysrq-trigger #reboot and mount mount -o prjquota /dev/vdb1 /mnt #query status quotaon -Ppv /dev/vdb1 #output quotaon: Cannot find mountpoint for device /dev/vdb1 quotaon: No correct mountpoint specified. This patch add check for journaled quotas to avoid incorrect quotaoff when ext4 has quota feautre. Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5e9d28b003
commit
cd46241eb0
1 changed files with 3 additions and 3 deletions
|
@ -2243,7 +2243,7 @@ static void ext4_orphan_cleanup(struct super_block *sb,
|
||||||
#ifdef CONFIG_QUOTA
|
#ifdef CONFIG_QUOTA
|
||||||
/* Needed for iput() to work correctly and not trash data */
|
/* Needed for iput() to work correctly and not trash data */
|
||||||
sb->s_flags |= MS_ACTIVE;
|
sb->s_flags |= MS_ACTIVE;
|
||||||
/* Turn on quotas so that they are updated correctly */
|
/* Turn on journaled quotas so that they are updated correctly */
|
||||||
for (i = 0; i < EXT4_MAXQUOTAS; i++) {
|
for (i = 0; i < EXT4_MAXQUOTAS; i++) {
|
||||||
if (EXT4_SB(sb)->s_qf_names[i]) {
|
if (EXT4_SB(sb)->s_qf_names[i]) {
|
||||||
int ret = ext4_quota_on_mount(sb, i);
|
int ret = ext4_quota_on_mount(sb, i);
|
||||||
|
@ -2309,9 +2309,9 @@ static void ext4_orphan_cleanup(struct super_block *sb,
|
||||||
ext4_msg(sb, KERN_INFO, "%d truncate%s cleaned up",
|
ext4_msg(sb, KERN_INFO, "%d truncate%s cleaned up",
|
||||||
PLURAL(nr_truncates));
|
PLURAL(nr_truncates));
|
||||||
#ifdef CONFIG_QUOTA
|
#ifdef CONFIG_QUOTA
|
||||||
/* Turn quotas off */
|
/* Turn off journaled quotas if they were enabled for orphan cleanup */
|
||||||
for (i = 0; i < EXT4_MAXQUOTAS; i++) {
|
for (i = 0; i < EXT4_MAXQUOTAS; i++) {
|
||||||
if (sb_dqopt(sb)->files[i])
|
if (EXT4_SB(sb)->s_qf_names[i] && sb_dqopt(sb)->files[i])
|
||||||
dquot_quota_off(sb, i);
|
dquot_quota_off(sb, i);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue