Hi,
I notice a regression report on Bugzilla [1]. Quoting from it:
Since commit a44be64, remounting a read-only ext4 filesystem to become read-write fails when quotas are enabled. The mount syscall returns -EROFS and outputs the following in dmesg:
EXT4-fs warning (device loop0): ext4_enable_quotas:7028: Failed to enable quota tracking (type=0, err=-30, ino=3). Please run e2fsck
Root cause
The problem can be traced back to the changes introduced in commit a44be64. It appears that the issue arises because the SB_RDONLY bit of the s_flags field is now only cleared after executing the ext4_enable_quotas function. However, the vfs_setup_quota_inode function, called by ext4_enable_quotas, checks whether this bit is set (fs/quota/dquot.c:2331):
if (IS_RDONLY(inode)) return -EROFS;
This condition therefore always triggers the -EROFS fail condition.
Steps to Reproduce
The bug can be reproduced by executing the following script on a current mainline kernel with defconfig:
#!/bin/bash set -ex truncate -s 1G /tmp/img mkfs.ext4 /tmp/img tune2fs -Q usrquota,grpquota,prjquota /tmp/img losetup /dev/loop0 /tmp/img mount -o ro /dev/loop0 /mnt mount -o remount,rw /mnt
Executing the script results in the following output:
+ truncate -s 1G /tmp/img + mkfs.ext4 /tmp/img mke2fs 1.47.0 (5-Feb-2023) Discarding device blocks: done Creating filesystem with 262144 4k blocks and 65536 inodes Filesystem UUID: b96a3da2-043f-11ee-b6f0-47c69db05231 Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done + tune2fs -Q usrquota,grpquota,prjquota /tmp/img tune2fs 1.47.0 (5-Feb-2023) + losetup /dev/loop0 /tmp/img [ 6.766763] loop0: detected capacity change from 0 to 2097152 + mount -o ro /dev/loop0 /mnt [ 6.791561] EXT4-fs (loop0): mounted filesystem b96a3da2-043f-11ee-b6f0-47c69db05231 ro with ordered data mode. Quota mode: journalled. + mount -o remount,rw /mnt [ 6.805546] EXT4-fs warning (device loop0): ext4_enable_quotas:7028: Failed to enable quota tracking (type=0, err=-30, ino=3). Please run e2fsck to fix. mount: /mnt: cannot remount /dev/loop0 read-write, is write-protected. dmesg(1) may have more information after failed mount system call.
See Bugzilla for the full thread.
Ted, it looks like this regression is caused by your ext4_xattr_block_set() fix to earlier syzbot report. Would you like to take a look on it?
Anyway, I'm adding it to regzbot:
#regzbot introduced: a44be64bbecb15 https://bugzilla.kernel.org/show_bug.cgi?id=217529 #regzbot title: Remounting ext4 filesystem from ro to rw fails when quotas are enabled
Thanks.
[1]: https://bugzilla.kernel.org/show_bug.cgi?id=217529