2. bcachefs 私有错误代码

在 bcachefs 中,作为一个硬性规定,我们不抛出或直接使用标准错误代码(-EINVAL,-EBUSY 等)。相反,我们根据需要在 fs/bcachefs/errcode.h 中定义私有错误代码。

这使我们能够获得更好的错误消息,并使调试更容易。您在源代码中看到的任何直接使用标准错误代码的情况都只是尚未转换的旧代码 - 请随时清理它!

私有错误代码可以细分为另一个错误代码,这允许对应该以类似方式处理的相关错误进行分组(例如,事务重启错误),并指定应该在 bcachefs 模块边界返回哪个标准错误代码。

在模块边界,我们使用 bch2_err_class() 转换为标准错误代码; 这也会发出跟踪事件,以便即使未记录原始错误代码也可以恢复。

不要重用错误代码!一般来说,私有错误代码应该只在一个地方抛出。这意味着,当我们在日志消息中看到它时,我们可以清楚地看到它返回自哪个文件和行号。

尽量给错误代码命名,使其尽可能合理地描述错误。通常,错误会在远离生成错误的地方记录; 好的错误代码名称意味着更具描述性和更有用的错误消息。