Linux カーネル 2.4 系は「安定版」ですが、バグフィックスだけでなく、かなりの 変更があります。下記のリストには低レベル(アダプタ)の変更は入っていません。 リストそれぞれの項目の先頭部分は、その変更がアナウンスされたカーネル バージョンです。 [1]
[2.4.4] SCSI_IOCTL_GET_PCI ioctl() 追加。
[2.4.7] デバイスへの INQUIRY で SCSI レベルが SCSI_2 より上位であると わかった場合、今後「LUN」ビット(SCSI 1 と SCSI 2 規格では 3 ビットで LUN の値は 0 から 7) による SCSI コマンドの 2 バイト目のマスクは行わない。
[2.4.7] カーネル(と scsi_mod モジュール)オプション max_scsi_luns が取る値は 1 から 7 だったが、より大きな値がとれるようになった。(スキャンアルゴリズムは、 まだ REPORT_LUNS を利用せずにシーケンシャルスキャンを行う)。
[2.4.7] scsi_unregister_host() と scsi_unregister_module() が intを返す ようになった(以前は、void を返した)。0 が成功で、-1 が失敗(たいていは busy 状態)。
[2.4.7] 高レベルのドライバが、接続している SCSI デバイス名を正しく返すように なった。(「Detected ...」ではじまるログのメッセージが、時としておかしな デバイス名を返していた(例えば sdb ではなく sdc というように))。カーネル のブート時のメッセージに「Attached ...」のように、SCSI デバイスが出るように なった。
[2.4.7] Scsi_Host 構造体に「max_sectors」が追加された。
[2.4.8] 中間レベルのロジックが変更され、センスバッファで論理ユニットが 準備完了(ASC=4, ASQ=1)を示すと、コマンドをリトライするようになった。
[2.4.9] st のメジャーアップデート。
[2.4.9] 低レベル(アダプタ)が DID_RESET を返すと コマンドをリトライするよう、中間レベルが変更された。
[2.4.10] 中間レベルが REQUEST SENSE を発行すると、元々の結果(SCSI の状態を 含む)が保存されるようになり、後で復元できるようになった。
[2.4.10] BLKGETSIZE64、BLKBSZSET、BLKBSZGET 各 ioctl が sd と sr へ追加された。
[2.4.10] sg の競合が修正され、open 時に access_count を増加(および解放時に 減少)するようになった。
[2.4.11] MODULE_LICENSE("GPL")であるほとんどのドライバへ MODULE_LICENSE マクロを追加。
[2.4.11] 各コマンドの scsi_pid が 1 増えた(なんで?)。
st が更新され、access_count が増えた。これで高レベルのドライバは、 すべて open 時に access_count を増やし、解放時に減らす。
[2.4.13] scatterlist 構造体の拡張(alt_address が削除され、page と offset が 追加)。
[2.4.13] ターゲット <= SCSI_2 なら、8 以上の LUN はスキャンしない。
[2.4.14] scatterlist 構造体の変更に関したチューニング(バグ修正)(st が壊れた?)
[2.4.15] 16 バイトの SCSI コマンドを許可(MAX_COMMAND_SIZE が 12 から 16 に変更)。中間レベルが 16 バイトの SCSI コマンドを扱うには、HBA ドライバは Scsi_Host::max_cmd_len を 16 に設定する必要がある。
[2.4.15] SCSI サブシステムから、BLKGETSIZE、BLKGETSIZE64 各 ioctl()の実装 が削除された(ブロックサブシステムに移動)。
[2.4.15] st の大幅なアップデート。
[2.4.15] Linux カーネル 2.5.0 が分岐し、Linux カーネル 2.4.15 == Linux カーネル 2.5.0 になる。
[2.4.17] scsi_wait_req()に generic_unplug_device()が追加。これで SCSI_IOCTL_SEND_COMMAND における長い wait が解消。
[2.4.17] デバイスをスキャンする際に scsi_level(つまり SCSI 規格への対応レベル) を間違えるバグがあった。
[2.4.17] sg ドライバの大幅な更新。mmap()-ed IO の追加。
[2.4.18] 高レベルのドライバが、「init()」関数を許可(例えば sd_init())を、 きちんと手続きを踏んだ上で失敗できるようになった。(Scsi_Device::detected と scsi_unregister_module()が追加)。
[2.4.18] MO デバイスでの SCSI コマンドのクラスタリングを修正。
[2.4.18] st ドライバの更新(圧縮アルゴリズム)。
[2.4.18] Documentation/scsi.txt と scsi-generic.txt の更新。
[2.4.18] scsi_debug ドライバの修正。
[2.4.19] SCSI の予約機能とリセット機能を追加。予約によって、複数マシンが同じ デバイスを(予約・解放機構により)共有できるようになった。 予約しているのに反応の無いマシンを「中断」するには、(sg 経由の)SCSI をリセット が必要とされる。
[2.4.19] BLIST_LARGELUN を導入し、SCSI 2 と認識しても 7 より大きい LUN を扱うようにした。
[2.4.19] sd と sr を変更し、RECOVERED_ERROR をハードエラーと 扱わないようにした。ログもしくはコンソールに警告を送る。
[2.4.19] 使用前に sg のバッファをゼロに設定する。(sg のバージョンが 3.1.22 から 3.1.24 へアップグレードしたが、sg.h には(表面的には)反映されて いない)。
[2.4.20] ハイメモリ(HIGHMEM)入出力のサポート追加。aic7xxx や 3w-xxxx、esp、 megaraid、qlogicfc、sym53c8xx_2 LLD。
[2.4.20] st にブート時及びモジュールロード時の「blocking_open」パラメタを追加。
[1] | このリストは www.kernel.orgに ある公式のカーネル 2.4 系リリースから集めたものです。 ディストリビューションは独立して公式のカーネルをいじっていますので、SCSI サブシステムのサポート(もしくは変更)にも影響が出るでしょう。 例えばこのマシンではカーネルが「2.4.18-27.8.0」となっています。 おそらく公式のカーネル 2.4.18 を元にしていて、ディストリビューションの「8.0」 版のために、ベンダーが 27 回に渡って修正をかけたということでしょう。 変更の種類の一例として、公式の 2.4.18 に入っている aic7xxx ドライバは Adaptec の Ultra 320 シリーズの PCI アダプタをサポートしていませんが、 ベンダーのバージョンではサポートしています。 |