ファイルシステムが破損する問題の修正へ
先日紹介したext4ファイルシステムが破損する問題の調査が行われ、原因の特定と修正パッチの投稿が行われました。BLK-MQが原因か
この問題はext4の実装に起因するものではなく、「blk-mq(Multi-Queue Block IO Queueing Mechanism)」の実装に起因する問題であることが分かりました。「blk-mq」はカーネルのブロックサブシステムであり、I/Oクエリーを分散させパフォーマンスの向上を図ります。
- It's Looking Like The EXT4 Corruption Issue On Linux 4.19 Is Caused By BLK-MQ
- The "EXT4 Corruption Issue" Has Been Fixed In Linux 4.20, Backport Pending To 4.19
この問題は「Linux kernel 4.19-rc1」で行われた修正で発生する問題であり、 「Linux kernel 4.19」及び開発中の「Linux kernel 4.20」で発生します。
またこの問題は「BLK-MQ」を使用している時に発生します。
加えて「BLK-MQ」の問題であれば、この問題はファイルシステムの種類に限定されません。
つまりext4以外でも発生する可能性が示唆されています。
特定の状況下でデータが破損
本問題を修正するパッチが投稿されました。問題の詳細は修正パッチ内のコメントに記述されています。
SCSIデバイスに直接リクエストを発行しデバイスからBUSYが返ると、リクエストをキューに入れて保留します。
しかしSCSIレイヤーはある特定コマンドのためにすでにSGテーブルのセットアップ等を行っています。
後でリクエストをマージする際、更新されたこれらの情報を使用せずその時の情報で処理を行います。
そのため本現象が発生します。