NFS客户端流程理解

来源:互联网 发布:图片切换js 编辑:程序博客网 时间:2024/04/28 02:08

系统调用-> vfs_readir->inode->i_fop()(这是在inode初始化时候,填入的钩子函数,一般会填成nfs的函数nfs_readdir)

nfs_readdir()先在缓存中查找,如没找到,则发送一个RPC操作号给服务器,服务器接收到操作号。调用对应的PROCEDURE,然后调用VFS的代码。

const struct nfs_rpc_ops nfs_v2_clientops = {
    .version    = 2,               /* protocol version */
    .dentry_ops    = &nfs_dentry_operations,
    .dir_inode_ops    = &nfs_dir_inode_operations,
    .file_inode_ops    = &nfs_file_inode_operations,
    .file_ops    = &nfs_file_operations,
    .getroot    = nfs_proc_get_root,
    .getattr    = nfs_proc_getattr,
    .setattr    = nfs_proc_setattr,
    .lookup        = nfs_proc_lookup,
    .access        = NULL,               /* access */
    .readlink    = nfs_proc_readlink,
    .create        = nfs_proc_create,
    .remove        = nfs_proc_remove,
    .unlink_setup    = nfs_proc_unlink_setup,
    .unlink_done    = nfs_proc_unlink_done,
    .rename        = nfs_proc_rename,
    .link        = nfs_proc_link,
    .symlink    = nfs_proc_symlink,
    .mkdir        = nfs_proc_mkdir,
    .rmdir        = nfs_proc_rmdir,
    .readdir    = nfs_proc_readdir,
    .mknod        = nfs_proc_mknod,
    .statfs        = nfs_proc_statfs,
    .fsinfo        = nfs_proc_fsinfo,
    .pathconf    = nfs_proc_pathconf,
    .decode_dirent    = nfs_decode_dirent,
    .read_setup    = nfs_proc_read_setup,
    .read_done    = nfs_read_done,
    .write_setup    = nfs_proc_write_setup,
    .write_done    = nfs_write_done,
    .commit_setup    = nfs_proc_commit_setup,
    .lock        = nfs_proc_lock,
    .lock_check_bounds = nfs_lock_check_bounds,
    .close_context    = nfs_close_context,
};

这个结构中注册了大量的钩子函数,上面的四个结构体,是用来注册到inode file 等结构中的,下面的钩子函数,是用来在run_rpc_task()用的。

关键在于,inode初始化的时候注册哪个钩子函数。


原创粉丝点击