2. bcachefs 私有錯誤碼

在 bcachefs 中,作為一項嚴格的規定,我們不丟擲或直接使用標準錯誤碼(-EINVAL, -EBUSY 等)。相反,我們根據需要在 fs/bcachefs/errcode.h 中定義私有錯誤碼。

這使我們能夠獲得更好的錯誤訊息,並使除錯變得更加容易。您在原始碼中看到的任何直接使用標準錯誤碼的地方都只是尚未轉換的舊程式碼——請隨意清理它們!

私有錯誤碼可以派生自另一個錯誤碼,這允許對應該以類似方式處理的相關錯誤進行分組(例如事務重啟錯誤),以及指定在 bcachefs 模組邊界處應該返回哪個標準錯誤碼。

在模組邊界處,我們使用 bch2_err_class() 轉換為標準錯誤碼;這也會發出一個跟蹤事件,以便即使沒有記錄原始錯誤碼也能恢復它。

不要重用錯誤碼!一般來說,一個私有錯誤碼應該只在一個地方丟擲。這意味著當我們在日誌訊息中看到它時,我們可以毫無歧義地確切知道它是從哪個檔案和行號返回的。

儘量給錯誤碼起一個儘可能描述錯誤的名字。通常,錯誤會在遠離錯誤生成的地方記錄;良好的錯誤碼名稱意味著更具描述性和更有用的錯誤訊息。