JBD2 上下文中的 BJ_Shadow 是什么?

What is BJ_Shadow in JBD2 context?

我正在研究 jbd2 源代码,我无法理解 BJ_Shadow 标志对于给定 buffer_head 的含义。

BJ_Shadow 是给定 buffer_head 的副本还是什么?

当一个缓冲区处于BJ_Shadow状态时,表示有copy-out个缓冲区正在写入磁盘。

所以,基本上当事务提交时,要写入的缓冲区头(BH)处于BJ_Metadata状态,提交线程将复制这个BH用于IO提交。复制完成后,事务将BH的状态变为BJ_Shadow,最终IO完成后的最后一个状态为BJ_Forget状态。