Skip to content

Commit cd46241

Browse files
zhangyi089gregkh
authored andcommitted
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>
1 parent 5e9d28b commit cd46241

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

fs/ext4/super.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2243,7 +2243,7 @@ static void ext4_orphan_cleanup(struct super_block *sb,
22432243
#ifdef CONFIG_QUOTA
22442244
/* Needed for iput() to work correctly and not trash data */
22452245
sb->s_flags |= MS_ACTIVE;
2246-
/* Turn on quotas so that they are updated correctly */
2246+
/* Turn on journaled quotas so that they are updated correctly */
22472247
for (i = 0; i < EXT4_MAXQUOTAS; i++) {
22482248
if (EXT4_SB(sb)->s_qf_names[i]) {
22492249
int ret = ext4_quota_on_mount(sb, i);
@@ -2309,9 +2309,9 @@ static void ext4_orphan_cleanup(struct super_block *sb,
23092309
ext4_msg(sb, KERN_INFO, "%d truncate%s cleaned up",
23102310
PLURAL(nr_truncates));
23112311
#ifdef CONFIG_QUOTA
2312-
/* Turn quotas off */
2312+
/* Turn off journaled quotas if they were enabled for orphan cleanup */
23132313
for (i = 0; i < EXT4_MAXQUOTAS; i++) {
2314-
if (sb_dqopt(sb)->files[i])
2314+
if (EXT4_SB(sb)->s_qf_names[i] && sb_dqopt(sb)->files[i])
23152315
dquot_quota_off(sb, i);
23162316
}
23172317
#endif

0 commit comments

Comments
 (0)