gpt4 book ai didi

linux-kernel - 关于 struct file_operations 的 .owner 字段

转载 作者:行者123 更新时间:2023-12-04 04:16:59 24 4
gpt4 key购买 nike

引用 LDD-3 pg-50。据记载

  struct module *owner

第一个 file_operations 字段根本不是一个操作;它是指向“拥有”该结构的模块的指针。该字段用于防止模块在其操作正在使用时被卸载。几乎所有时候,它都被简单地初始化为 THIS_MODULE。

如果我们引用 LDD-2,解释是

“这个字段不像 file_operations 结构中的其他所有内容一样是一个方法。相反,它是指向“拥有”这个结构的模块的指针;内核使用它来维护模块的使用计数。”

现在我的问题是这个字段实际上是如何阻止模块被卸载的?

谢谢,

最佳答案

当打开使用这些操作的文件时,在调用.open() 文件操作之前,为 调用一个函数try_module_get()。所有者 模块。这会增加模块的使用计数器,因此无法使用 rmmod 命令卸载模块。

当文件的最后一个引用被删除,并且它的 .release() 操作完成时,一个函数 module_put 被调用给 .owner 模块。这会减少模块的使用计数器,因此可以再次卸载模块(除非其引用计数器因其他原因而增加)。

关于linux-kernel - 关于 struct file_operations 的 .owner 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com