The functions provided on the system call side is not equal in terms of name, parameters, amount or executions time to the functions on the file system side, and can not be mapped one to one.
On the system call side those are some of the functions provided: (the following is just a few of the more well known, and are copied from syscalls.h. In user space they are named without the _sys)
asmlinkage long sys_mount(char __user *dev_name,
char __user *dir_name,
char __user *type,
unsigned long flags,
void __user *data);
asmlinkage long sys_mkdir(const char __user *pathname,
int mode);
asmlinkage long sys_chdir(const char __user *filename);
asmlinkage long sys_chmod(const char __user *filename,
mode_t mode);
asmlinkage long sys_stat(char __user *filename,
struct __old_kernel_stat __user *statbuf);
asmlinkage long sys_open(const char __user *filename,
int flags,
int mode);
asmlinkage long sys_close(unsigned int fd);
On the VFS side the functions provided is divided into the following four categories:
create(dir, dentry, mode, nameidata) lookup(dir, dentry, nameidata) unlink(dir, dentry) mknod(dir, dentry, mode, rdev) read(file, buf, count, offset) aio_read(req, buf, len, pos) write(file, buf, count, offset)
An example on that functions can not be mapped one to one between the system call interface, could be the system call open. The system call open is handled by the function sys_open11 and is among other functions in the VFS API calling lookup. To give tiny insight in what happens in the VFS part of the kernel when the open system call is issued, I have described the most important steps which are preformed (the source for the following list is [4] and the Linux kernel version 2.6.20-gentoo-r8 examined by cscope):