【问题标题】:Howto access file system-dependant data from a lkm如何从 lkm 访问文件系统相关数据
【发布时间】:2013-01-04 14:10:19
【问题描述】:

我正在为 Linux 内核开发 LKM,我希望它能够获取一些与文件系统相关的特定信息。实际上这个信息就是ext4文件系统的inode结构的字段i_crtime(创建时间)。

我的问题是,我如何从 lkm 访问该字段?现在我知道如何获取特定文件的 inode:

kern_path(<path to file>, LOOKUP_FOLLOW, &path)

所以在此之后我通过以下方式获得了 inode:

path.dentry->d_inode

但是这个 inode (d_inode) 是通用的 VFS inode 结构,而不是之前显示的 ext4_inode(也不是 ext4_inode_info)。

有人知道怎么做吗?我正在尝试研究 VFS 代码,stat (coreutil) 代码,跟踪它,但我仍然卡住了:-S

TIA。

【问题讨论】:

    标签: linux-kernel


    【解决方案1】:

    EXT4_I() function 从 VFS inode 获取 ext4_inode_info。但是 VFS inode 的 ctime 与 EXT4 inode 的 ctime 完全相同。所以你不妨访问inode->i_ctime

    【讨论】:

    • 谢谢,这正是我想要的。顺便说一句,您已经链接了 ext4_new_inode() 函数,此时出于逻辑原因,所有时间戳都是相同的,但它们会随着时间而变化(实际上除了 crtime 之外......我猜)。
    • 嗯,我一直在尝试使用它,但我意识到 EXT4_I() 是 ext4 驱动程序的辅助函数,未导出,因此我们不能在 ext4 驱动程序范围之外使用它。我什至尝试使用 container_of() 而不是 EXT4_I() 但我没有 struct ext4_inode_info 的定义。你知道现在该做什么了吗?
    • "#include " 在你的 LKM 中
    • VFS inode 是嵌入在文件系统特定 inode 中的结构(在本例中为 ext4_inode_info)。所有时间戳更新都对 VFS inode 进行,然后稍后同步到磁盘。参见 ext4_rename() 例如。AFAIK,您的 VFS inode 时间戳应始终反映最新的 c/a/mtime 值。
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2010-11-24
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多