分析fuse 的源码应该说是迫不得已。很多人在介绍fuse
时,可以让不熟悉内核的人员也能编写文件系统。这个还是蛮吸引的。但是实际上要能够编写一个好的类似文件系统。不熟悉内核还真的不行。
现在吧fuse源码中一些个人感兴趣的地方说明。之前对于fuse中的信息传输通道进行了说明。这应该来说是最为佩服的。能够这样顺畅的使用两种模块,应
用同一种调用机制,灵活的游走在内核和用户态之间。不得不说是一种相当cool的设计。
自己对于内核并没有太多的兴趣。主要是本职工作不在这里。但是既然进来了。就随意的收集些。先对fuse进行一些说明吧。开始看源码的时候没有什么总结。
现在也没有统一的框架来组织这些,还是有什么感兴趣的地方就说明下。
void
request_send(struct fuse_conn *fc, struct
fuse_req *req)
{
req->isreply =
1;
spin_lock(&fc->lock);
if (!fc->connected)
req->out.h.error = -ENOTCONN;
else if (fc->conn_error)
req->out.h.error = -ECONNREFUSED;
else {
queue_request(fc, req);
/* acquire extra
reference, since request is still needed
after request_end() */
__fuse_get_request(req);
request_wait_answer(fc, req);
}
spin_unlock(&fc->lock);
}
|
以
上的函数 是fuse中用来发送请求的。在fuse 对vfs 提供的文件和目录的接口中都有调用。
阅读(507) | 评论(0) | 转发(0) |