簡體   English   中英

在內核模塊中,如何知道給定的inode是否屬於特定目錄?

[英]In a kernel module, how to know whether given inode belongs to a specific directory?

一種可能的方式是,將給定的索引節點與該目錄中的索引節點列表進行比較。 索引節點的列表可以是預先確定的,也可以是計算的運行時間,兩種方法都有其各自的問題:

  • 預定列表:可以在此操作期間更改列表,即可以在該目錄中添加或刪除文件。

  • 運行時間列表:如果該目錄中的文件過多,則每次訪問系統中任何文件的開銷都太大。

有什么有效的解決方案/方法嗎? 我嘗試通過按路徑比較文件,這確實是一個壞主意。

無論是在內核模式下還是在用戶模式下進行操作,都沒有任何好處。 要查看inode是否確實在某個目錄中,您必須讀取該目錄,因為文件通常以線性列表的形式位於目錄中。 這可能導致您的進程阻塞,如果沒有緩存就存在目錄塊,並且在那個時候可以修改目錄內容。 僅當您在執行該操作時保持目錄inode處於阻塞狀態才有幫助時,但這會給操作系統增加嚴重的性能限制。 另一個問題是每個文件系統都可以自由使用其自己的格式來實現目錄內容。 在userland中,您可以獲得統一的目錄格式,但是在內核模式下,您必須處理針對不同文件系統類型的不同方法。 為什么需要知道這一點? 我無法想象可能需要這種情況。 也許您可以重新設計算法,以免目錄內容不必要。

順便說一句,處理完整路徑或搜索目錄具有模糊的競爭條件,這些競爭條件可能會以某種方式處理您的系統。 如果在您的搜索中間,有人試圖取消鏈接您要搜索的索引節點,將會發生什么? 否則必須修改目錄內容; 或者其他一些過程正在使用namei()向上遍歷您的目錄; 或向下。 您是否考慮過所有這些可能性?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM