FUSE3 - 无法创建基于 inode 的虚拟文件系统

问题描述 投票:0回答:0

📜 简介 - 背景

我正在尝试开发一个FUSE3基于inode的虚拟文件系统(VFS),其中:

  1. 来自外部 ext4 文件系统的一组 inode 被映射到哈希映射中,如下所示
    <inode>:<filename>
  2. 通过
    ext2fs_read_inode(fs, <inode>, &<inode>)
  3. 提供属性(通过 hashmap &)
  4. 其他文件系统操作也通过 inode 进行管理。 [但这不是我现在的首要任务]

[1]:具体来说,使用 NoSQL 数据库 (kyotocabinet)。但这可以是任何具有键值性质的东西

🦠问题

在我尝试通过fuse_lowlevel.h

fuse.h
创建这样一个系统
时,我无法弄清楚如何在
readdir
中缓存\预设\预填充索引节点,因为我偶然发现了一个很多压倒性的不确定性\问题(主要是[由于我的知识和]文档的运气)例如:

1.
readdir_ino

虽然文档指出

readdir_ino
:

如果未给出 use_ino 选项,仍然尝试填写 readdir(2) 中的 d_ino 字段。如果该名称之前已查找过,并且仍在缓存中,则将使用在那里找到的索引节点号。否则将被设置为-1。如果给出了 use_ino 选项,则忽略此选项。

我没有看到(dentry)-

d_ino
被设置为illed作为示例任何地方,所以我认为他们的意思是(stat)-
st_ino
,这可能是一个错字?

...如果给出了 use_ino 选项,则忽略此选项。

(假设这意味着

readdir_ino
被忽略[基于开头“如果use_ino...”中所说的])那么我不明白为什么在下面提供的示例中设置
use_ino=1
做了相反的事情(通过
ls
不显示 inode)
,基于有关
use_ino
的文档指出:

...该值用于填写st_ino字段...

2.
filler

尽管

filler
中的
readdir
提供了
struct stat
条目和文档说明了有关
cfg->readdir_ino
的所有这些内容,但
st_ino
似乎被忽略了即使使用了
remember=-1

等等...

🤔问题

所以,我的问题是:有没有什么方法可以预先填写

c filesystems fuse inode vfs
© www.soinside.com 2019 - 2024. All rights reserved.