[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:29800] Re: udev and /dev/cdrom, /dev/dvd, etc..



本多です

自分につける事にします。
# rc.Sの処理、その他改善の判断はお任せします。

どうしても/dev/cdromの消える現象の詳細と理由を述べないといけないようですね。

私は家と職場に複数のmachinesを持っています。この現象(/dev/cdromが消える)
は1台を除き全て発生します。でも1台は発生しません。簡単な調査でなぜ
発生しなかの理由も判ります。どうしてこう錯綜するのでしょう。。。
#ちなみに、私の環境下では発生があたりまえです(1台を除き全て)。
#でもこのような事を言うのは無意味ですね。事象が発生する理由が全てです。

------------------------------------------------------------------------
さてこの現象は以下の理由で発生します(これは既に述べた事ですが繰替えします)
1) cdromを挿入すると"change" ueventが発生。
2) /etcはwrite可能なので/dev/.udev/tmp-*-70-*は参照されない事に注意する。
   該当cdromのlink情報は/etc/udev/rule.d/70-*には存在しない。また、75-*
   rulesはueventが"change”で"add"ではないので無視される。
3) よって該当するruleは発見されない。
4)udevは/dev/cdromのreferenceを1つ下げる。つまり0になるので/dev/cdromを削除する。
   (udev/udev/udev-event.cのudev_event_execute_rules()及び
    その中のudev_node_update_old_links()以下を参照せよ)
------------------------------------------------------------------------
    
ではなぜ私の1台は現象が発生しないのでしょうか?
簡単です。 "change" ueventが発生しないからです。もっと言うと一切
ueventはcd挿入で発生しません。これは、
   udevadm monitor
もしくは
   strace -fp "udevのpid"
をしてuevent or syscallsをみていれば簡単に判る事です。

Kernelで"change" ueventを発生するのはata-scsi-emulation(or acpi)の
時のみです。
#linux/driver/ata/libata_scsi.cのata_scsi_media_change_notify()と
#その呼出を参照せよ。
ですから、
*) hd?にattachされるcdromはkernel ueventなしで現象も発生しない!
*) ata?にattachされるcdromは"change" uevent発生で現象も発生!
#確か、どこかにideとscsi emulationのkernel eventの差と
#書いたと思いますが。。。

参考までに本当のscsi busに接続されたscsi devicesも即座には
"change" ueventは発生しません。
何故なら、target -> initiatorはscsi2の通常の状況では
起きえないからです。mediaを交換されたtargetはtargetのstateが
check conditionになりますがhostに通知する訳ではありません。
その後、何らかのscsi cmdがhostから発行された時に初めて
scsi statusでcheck conditionを知らせsense conditionを
hostが更に実行して初めてmedia changeを通知するのです。


Follow-Ups
[plamo:29801] Re: udev and /dev/cdrom, /dev/dvd, etc.., KATOH Yasufumi

[検索ページ] [メール一覧]
Plamo ML 公開システム