【发布时间】:2012-01-15 09:12:20
【问题描述】:
我正在编写一个可堆叠的文件系统,它将默认将未链接的文件重命名为特定文件夹,例如 abc。因此,当任何文件 /xyz 被取消链接时,其重命名为 /abc/xyz。我想通过覆盖可堆叠文件系统的 unlink 函数来做到这一点。我正在使用 wrapfs,所以我正在为此修改 wrapfs_unlink。我有未链接文件的dentry,也有父目录的inode,现在我需要/abc 的inode 和/abc/xyz 的dentry 来调用vfs_rename 而不是vfs_unlink。我可以找到 / 的 dentry 和 vfsmount,所以我有 / 的 dentry,但我不知道如何获得 /abc 的 dentry/inode 我知道我可以从 dentry 获得 inode,但我也无法获得 dentry。我尝试使用 lookup_one_len /abc 创建,但它仍然返回负 inode ,我也尝试使用 vfs_path_lookup 查找目录 /abc 它也返回错误。我使用了错误的功能吗?或者这些方法只看到缓存而不是实际的目录结构?请帮忙。
【问题讨论】:
-
(又一个联合/堆栈文件系统?叹息。)
-
我不确定在内核空间中更改
unlink系统调用的语义是否有意义。你为什么不使用fuse来实现你的奇异目标fuse.sourceforge.net -
@jørgensen:你能解释一下你的评论吗?
-
@BasileStarynkevitch :我会看看保险丝。
标签: linux filesystems linux-kernel kernel-module vfs