fuse的write过程到底是怎么样的,128KB的buffer怎么用?

1. 在fuse/lib/fuse_kern_chan.c中有一个buffer设置

  #define MIN_BUFSIZE 0x21000 //十进制132×1024  //为何不是128?

  下面有一句 

size_t bufsize = getpagesize() + 0x1000;

看来这多出来的 0x1000 是有特别用途的。

 

2. 不管怎么样,这个buffer size是怎么被使用的呢?

    对于读操作,可以这样推测。应用调用read,被VFS传递给内核fuse,再到libfuse然后到前端fuse,前端fuse进行实际的读操作,比如读一个EXT4文件,读到的内容返给libfuse,再给内核fuse,再返回给应用。

    那么,对于写操作,前端fuse写一个ext4文件后,内容就通过fwrite写了,这怎么使用上面所提的buffer呢?

      因此,对于read的推测可能也是不准确的。

 

留待证明。。。。。。。。。

 

17.5.11

上面的2推测过程是有bug的。写操作的流程应该是这样的。应用调用vfs,将要写的内容传递给内核fuse,内核fuse将内容传递给libfuse,libfuse对这内容进行缓存,达到128KB时调用前端的fuse进行写操作。这样,buffer被怎么用就清楚了。

 

posted on 2017-05-08 09:16  longbigfish  阅读(599)  评论(0编辑  收藏  举报

导航