文件系统是通过inode id来操作文件的。目录树的维护,也是通过parent inode id + name的方式维护。
每个inode id对应的inode有一个reference count,当refrence count减为0的时候,内核就不会再缓存该inode了,意味着在再次获得该inode id之前,不会继续使用该inode id进行文件读写。此时fuse程序,可以释放该inode,来节省内存。
reference count维护规则,如下表:
fuse command | newly created inode | old inode |
FUSE_LOOKUP | 1 | +1 |
FUSE_CREATE FUSE_MKNOD FUSE_MKDIR FUSE_SYMLINK | 1 | N/A |
FUSE_RENAME | N/A | +0 |
FUSE_LINK | N/A | +1 |
FUSE_FORGET | -nlookup | |
FUSE_UNLINK FUSE_RMDIR | N/A | -0 |
FUSE_OPEN | +0 | |
FUSE_GETATTR | N/A | +0 |
FUSE_SETATTR | N/A | +0 |
总结如下:
1 新建操作,如FUSE_CREATE,初始refcnt为1。
2 lookup,每次+1
3 创建硬链接,+1。注意创建硬链接不会新建inode。也不会产生新的inode id。
4 其它操作,如删除、打开、读取属性等都不改变refcnt。