On 6/2/26 13:46, Pavel Tikhomirov wrote:
>> @@ -3338,6 +3344,10 @@ static int do_remount(struct path *path, int
>> ms_flags, int sb_flags,
>>
>> mnt_warn_timestamp_expiry(path, &mnt->mnt);
>>
>> +free_mnt_data:
>> + if (mnt_data && mnt_data != data)
>> + free_page((unsigned long)mnt_data);
>> +err:
>> put_fs_context(fc);
>> return err;
>> }
>> @@ -3774,8 +3784,17 @@ static int do_new_mount(struct path *path, const char
>> *fstype, int sb_flags,
>> subtype, strlen(subtype));
>> if (!err && name)
>> err = vfs_parse_fs_string(fc, "source", name, strlen(name));
>> - if (!err)
>> - err = parse_monolithic_mount_data(fc, data);
>> + if (!err) {
>> + void *mnt_data = legacy_merge_mount_data(fc, data);
>> +
>> + if (IS_ERR(mnt_data)) {
>> + err = PTR_ERR(mnt_data);
>> + } else {
>> + err = parse_monolithic_mount_data(fc, mnt_data);
>> + if (mnt_data != data)
>> + free_page((unsigned long)mnt_data);
>> + }
>> + }
> Why do we change this codepath? We don't have any vz-specific code (e.g.
> ve_prepare_mount_options()) here.
>
>> if (!err && !mount_capable(fc))
>> err = -EPERM;
>> if (!err)
Ah I see
int parse_monolithic_mount_data(struct fs_context *fc, void *data)
{
int (*monolithic_mount_data)(struct fs_context *, void *);
monolithic_mount_data = fc->ops->parse_monolithic;
if (!monolithic_mount_data)
monolithic_mount_data = generic_parse_monolithic;
return monolithic_mount_data(fc, data);
}
in generic_parse_monolithic case we get to vfs_parse_monolithic_sep ->
ve_devmnt_process.
--
Best regards, Pavel Tikhomirov
Senior Software Developer, Virtuozzo.
_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel