Allow mount options to be parsed on remount when using the new mount(8) API. This allows to give a precise error code to userspace when the remount is using wrong arguments instead of a generic -EINVAL error. Signed-off-by: André Almeida <andrealmeid@xxxxxxxxxx> --- Hi folks, I was playing with xfstest with overlayfs and I got those fails: $ sudo TEST_DIR=/tmp/dir1 TEST_DEV=/dev/vdb SCRATCH_DEV=/dev/vdc SCRATCH_MNT=/tmp/dir2 ./check -overlay ... Failures: generic/294 generic/306 generic/452 generic/599 generic/623 overlay/035 Failed 6 of 859 tests 5 of those 6 fails were related to the same issue, where fsconfig syscall returns EINVAL instead of EROFS: -mount: cannot remount device read-write, is write-protected +mount: /tmp/dir2/ovl-mnt: fsconfig() failed: overlay: No changes allowed in reconfigure I tracked down the origin of this issue being commit ceecc2d87f00 ("ovl: reserve ability to reconfigure mount options with new mount api"), where ovl_parse_param() was modified to reject any reconfiguration when using the new mount API, returning -EINVAL. This was done to avoid non-sense parameters being accepted by the new API, as exemplified in the commit message: mount -t overlay overlay -o lowerdir=/mnt/a:/mnt/b,upperdir=/mnt/upper,workdir=/mnt/work /mnt/merged and then issue a remount via: # force mount(8) to use mount(2) export LIBMOUNT_FORCE_MOUNT2=always mount -t overlay overlay -o remount,WOOTWOOT,lowerdir=/DOESNT-EXIST /mnt/merged with completely nonsensical mount options whatsoever it will succeed nonetheless. However, after manually reverting such commit, I found out that currently those nonsensical mount options are being reject by the kernel: $ mount -t overlay overlay -o remount,WOOTWOOT,lowerdir=/DOESNT-EXIST /mnt/merged mount: /mnt/merged: fsconfig() failed: overlay: Unknown parameter 'WOOTWOOT'. $ mount -t overlay overlay -o remount,lowerdir=/DOESNT-EXIST /mnt/merged mount: /mnt/merged: special device overlay does not exist. dmesg(1) may have more information after failed mount system call And now 5 tests are passing because the code can now returns EROFS: Failures: generic/623 Failed 1 of 1 tests So this patch basically allows for the parameters to be parsed and to return an appropriated error message instead of a generic EINVAL one. Please let me know if this looks like going in the right direction. Thanks! --- fs/overlayfs/params.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/fs/overlayfs/params.c b/fs/overlayfs/params.c index f42488c019572479d8fdcfc1efd62b21d2995875..f6b7acc0fee6174c48fcc8b87481fbcb60e6d421 100644 --- a/fs/overlayfs/params.c +++ b/fs/overlayfs/params.c @@ -600,15 +600,6 @@ static int ovl_parse_param(struct fs_context *fc, struct fs_parameter *param) */ if (fc->oldapi) return 0; - - /* - * Give us the freedom to allow changing mount options - * with the new mount api in the future. So instead of - * silently ignoring everything we report a proper - * error. This is only visible for users of the new - * mount api. - */ - return invalfc(fc, "No changes allowed in reconfigure"); } opt = fs_parse(fc, ovl_parameter_spec, param, &result); --- base-commit: b87e2318cdaa14024b62ab428b3471d81eafaf1a change-id: 20250521-ovl_ro-b38a57d2984d Best regards, -- André Almeida <andrealmeid@xxxxxxxxxx>