客户端模块初始函数static int __init init_nfs_fs(void)
->#ifdef CONFIG_PNFS
err = pnfs_initialize();
在 pnfs_initialize();
pnfs_v4_clientops_init();
pnfs_initialized = 1;//标记PNFS已经初始化了,在layout模块中会检测此标记
在pnfs_v4_clientops_init(),中
pnfs_v4_clientops_init(void)
{
struct nfs_rpc_ops *p = (struct nfs_rpc_ops *)&pnfs_v4_clientops;
//复制了pnfs-v4_clientops的内存,并在下面补充特有的操作
memcpy(p, &nfs_v4_clientops, sizeof(*p));
p->file_ops = &pnfs_file_operations;
p->setattr = pnfs4_proc_setattr;
p->read_done = pnfs4_read_done;
p->write_setup = pnfs4_proc_write_setup;
p->write_done = pnfs4_write_done;
p->commit_setup = pnfs4_proc_commit_setup;
p->commit_done = pnfs4_commit_done;
}
set_pnfs_layoutdriver()中会将pnfs_v4_clientops注册到
server->nfs_client->rpc_ops = &pnfs_v4_clientops;
其中server是SB中的一个结构。
set_pnfs_layoutdriver()会在mount时候调用
nfs4_get_sb
nfs4_try_mount
nfs4_remote_fs_type
nfs4_remote_get_sb
nfs4_init_pnfs
set_pnfs_layoutdriver
->#ifdef CONFIG_PNFS
err = pnfs_initialize();
在 pnfs_initialize();
pnfs_v4_clientops_init();
pnfs_initialized = 1;//标记PNFS已经初始化了,在layout模块中会检测此标记
在pnfs_v4_clientops_init(),中
pnfs_v4_clientops_init(void)
{
struct nfs_rpc_ops *p = (struct nfs_rpc_ops *)&pnfs_v4_clientops;
//复制了pnfs-v4_clientops的内存,并在下面补充特有的操作
memcpy(p, &nfs_v4_clientops, sizeof(*p));
p->file_ops = &pnfs_file_operations;
p->setattr = pnfs4_proc_setattr;
p->read_done = pnfs4_read_done;
p->write_setup = pnfs4_proc_write_setup;
p->write_done = pnfs4_write_done;
p->commit_setup = pnfs4_proc_commit_setup;
p->commit_done = pnfs4_commit_done;
}
set_pnfs_layoutdriver()中会将pnfs_v4_clientops注册到
server->nfs_client->rpc_ops = &pnfs_v4_clientops;
其中server是SB中的一个结构。
set_pnfs_layoutdriver()会在mount时候调用
nfs4_get_sb
nfs4_try_mount
nfs4_remote_fs_type
nfs4_remote_get_sb
nfs4_init_pnfs
set_pnfs_layoutdriver