寫檔案系統時,核心在寫操作的時候無法進行讀操作
阿新 • • 發佈:2018-11-14
在核心寫程式碼畢竟和在使用者層寫程式碼不太一樣,畢竟核心各種機制很複雜。
今天便遇到了一個問題,本來想在進行寫操作的時候,先判斷本地檔案中的內容,然後根據內容判斷本檔案是否是遠端檔案,類似於軟連線的形式,只是比那個更加複雜,應用於在核心中寫的一個分散式檔案系統。
我需要獲取一個量:
isize = wjfs_i_size_read(tmp_dentry->d_inode); //對應inode中的資訊數量+1
這樣就可以判斷這個inode中有沒有資訊了,但是問題就出在這兒了
在寫操作中,wjfs_write() 函式下呼叫這個函式,得到的isize總是0,但是在通過我設計的,軟連線觸發函式進行讀取的時候,簡單就是不在寫操作中,在讀操作或者其他不是寫的操作中進行這一步,得到的都是正常值,10, 23 。。。根據實際情況而定。
通過進一步的測試,發現在寫操作中,連inode對應存放資料的page都得不到了
感覺具體原因應該是在寫操作中,是不能讀取關於inode的任何資訊的。
又是一天中午,昨天晚上遇到這個問題之後總是想不明白,今天也沒有心情繼續做別的內容,總想著一定要搞明白,然後,我在兩個地方分別加了很多輸出,來看看裡面到底發生了什麼鬼
插入輸出後就進行測試了,結果如下:
我的天,同樣的inode,拿到的變數的值就是這麼不一樣,多次測試與順序無關,我想,是不是本來inode->i_size的值就是不同的,然後我就到兩個地方分別進行了直接的inode的isize值輸出測試,程式碼如下:
輸出的結果是:
一個是14,一個是 0,徹底無語了,等著天使降臨來救我。
後續探索,搞明白了再加!