NFS客户端流程理解

本文详细阐述了NFS客户端的工作流程,从系统调用到VFS的读取目录操作,再到NFS的缓存查找及RPC通信。通过分析nfs_rpc_ops结构体,展示了NFS客户端如何注册和调用各种钩子函数来处理文件系统操作,如lookup、readlink、create等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统调用-> 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初始化的时候注册哪个钩子函数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值