0

2.6.43.2-6.fc15 でホットプラグ可能な PCI メモリ デバイス用のブロック デバイス ドライバを作成しています (そのため、LDD3 は多くの機能に関して古くなっています)。ブロック デバイス de を取得するのに問題があります。 -登録がスムーズに進みます。デバイスが削除されたら、gendisk と request_queue を破棄しますが、ハングしblk_cleanup_queue()ます。おそらく、その前に実行するのを怠ったキュー関連のプロセスがいくつかありますが、参照用に使用しているカーネルツリーの他のブロックドライバーとの大きな一貫した違いは見られません ( memstickcciss、など)。キューと gendisk を整理する前に、どのような手順を実行する必要がありますか?

.open.release、および添付の を実装.ioctlしていますが、リクエストが発生したとき、またはブロックデバイスの登録を解除するときに、キューを整理する方法が正確にはわかりません。block_opsmydev_request(struct request_queue *q)blk_init_queue(mydev_request, &mydev->lock)

4

1 に答える 1

0

これは、キューからフェッチしたリクエストを終了しないことが原因です。これを修正するには、次のようにリクエストを終了します。

while ((req = blk_fetch_request(q)) != NULL )
{
    res = mydev_submit_request_sg(mydev, req);

    if (res)
        __blk_end_request_all(req, res);
    else
        __blk_end_request_cur (req, res);
}
于 2012-11-28T14:17:24.013 に答える