| From cff0634e0281875732cb4c23d7316927cde1de0d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 18 Aug 2025 10:09:39 +0800 |
| Subject: f2fs: fix to allow removing qf_name |
| |
| From: Chao Yu <chao@kernel.org> |
| |
| [ Upstream commit ff11d8701b77e303593fd86cf9ef74ef3ac4048e ] |
| |
| The mount behavior changed after commit d18535132523 ("f2fs: separate the |
| options parsing and options checking"), let's fix it. |
| |
| [Scripts] |
| mkfs.f2fs -f /dev/vdb |
| mount -t f2fs -o usrquota /dev/vdb /mnt/f2fs |
| quotacheck -uc /mnt/f2fs |
| umount /mnt/f2fs |
| mount -t f2fs -o usrjquota=aquota.user,jqfmt=vfsold /dev/vdb /mnt/f2fs |
| mount|grep f2fs |
| mount -t f2fs -o remount,usrjquota=,jqfmt=vfsold /dev/vdb /mnt/f2fs |
| mount|grep f2fs |
| dmesg |
| |
| [Before commit] |
| mount#1: ...,quota,jqfmt=vfsold,usrjquota=aquota.user,... |
| mount#2: ...,quota,jqfmt=vfsold,... |
| kmsg: no output |
| |
| [After commit] |
| mount#1: ...,quota,jqfmt=vfsold,usrjquota=aquota.user,... |
| mount#2: ...,quota,jqfmt=vfsold,usrjquota=aquota.user,... |
| kmsg: "user quota file already specified" |
| |
| [After patch] |
| mount#1: ...,quota,jqfmt=vfsold,usrjquota=aquota.user,... |
| mount#2: ...,quota,jqfmt=vfsold,... |
| kmsg: "remove qf_name aquota.user" |
| |
| Fixes: d18535132523 ("f2fs: separate the options parsing and options checking") |
| Cc: Hongbo Li <lihongbo22@huawei.com> |
| Signed-off-by: Chao Yu <chao@kernel.org> |
| Reviewed-by: Hongbo Li <lihongbo22@huawei.com> |
| Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/f2fs/super.c | 7 +++++-- |
| 1 file changed, 5 insertions(+), 2 deletions(-) |
| |
| diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c |
| index bf0497187bdff..8086a3456e4d3 100644 |
| --- a/fs/f2fs/super.c |
| +++ b/fs/f2fs/super.c |
| @@ -1189,8 +1189,11 @@ static int f2fs_check_quota_consistency(struct fs_context *fc, |
| goto err_jquota_change; |
| |
| if (old_qname) { |
| - if (new_qname && |
| - strcmp(old_qname, new_qname) == 0) { |
| + if (!new_qname) { |
| + f2fs_info(sbi, "remove qf_name %s", |
| + old_qname); |
| + continue; |
| + } else if (strcmp(old_qname, new_qname) == 0) { |
| ctx->qname_mask &= ~(1 << i); |
| continue; |
| } |
| -- |
| 2.51.0 |
| |