On Thu, Mar 15, 2018 at 09:30:58PM +0100, Arnd Bergmann wrote: > On Thu, Mar 15, 2018 at 8:05 PM, Dominik Brodowski > <li...@dominikbrodowski.net> wrote: > > > > */ > > -SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname, > > - int, newdfd, const char __user *, newname, int, flags) > > +int do_linkat(int olddfd, const char __user *oldname, int newdfd, > > + const char __user *newname, int flags) > > { > > struct dentry *new_dentry; > > struct path old_path, new_path; > > For consistency with other do_*() functions, I think it would be nice > to make this one not take a __user pointer either. However, I > have no idea how to do that without making the common case worse. > > > --- a/init/initramfs.c > > +++ b/init/initramfs.c > > @@ -306,7 +306,7 @@ static int __init maybe_link(void) > > if (nlink >= 2) { > > char *old = find_link(major, minor, ino, mode, collected); > > if (old) > > - return (sys_link(old, collected) < 0) ? -1 : 1; > > + return (ksys_link(old, collected) < 0) ? -1 : 1; > > } > > return 0; > > } > > Since this is the only caller outside of fs/namei.c, maybe it can be > changed to use vfs_link() instead? That might still be a larger rework > than you want to do.
In line with what I propose generally for this series, I have added the following paragraph to the commit message: In the near future, the only fs-external user of ksys_link() should be converted to use vfs_link() instead. Thanks, Dominik