最近在centos7.6遇到的問題,提交ext4 supperblock的buffer_head時在summit_bh_wbc函數鍾發生了BUG_ON,
原因在於ext4的sb對應的buffer_head沒有與page建立映射,運行到submit_bh_wbc函數時就出錯了,
社區的解決方案是,在ext4_commit_super函數中判斷如果buffer_head沒有映射的話,就直接退出:
社區做這個修改遇到的問題是,nvme設備被熱插拔了,設備已不存在,所以在同步superblock時出錯了:
我們遇到的問題在nbd存儲時,nbd(Network Block Device)可以將一個遠程主機的磁盤空間當作一個塊設備來使用,就像一塊硬盤一樣使用它,你可以很方便的將另一臺服務器的硬盤空間增加到本地服務器上,linux內核提供給了nbd.ko驅動來支持這一功能。詳細可參考https://blog.csdn.net/zhonglinzhang/article/details/103815508。
所以在網絡出現問題(network disconnection)時,nbd設備就會出現類似於上述nvme設備熱插拔的現象,導致BUG_ON。
但解決方案是一致的,判斷buffer_head如果沒有映射,就退出。