Firstly, kernel code cannot call functions like "sys_xyzzy()" anymore, because they have the wrong calling convention.
But secondly, "rules on how data may be accessed may differ between kernel data and user data."
There are now some functions which are direct replacements for the old "sys_xyzzy()" calls. For example: ksys_mount().
ksys_mount() takes pointers to
__user memory, just like calls to sys_mount() did. Therefore it should fail if you pass it a pointer to kernel memory. Specifically, it will fail when it calls copy_from_user(), unless you play games with set_fs().
So... why do we have a couple of calls to ksys_mount() in various places inside the kernel? How can these possibly work? They are not wrapped with calls to set_fs().