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

Re: RAW_PART number (Re: Forward: [Noriyuki Soda <soda@netbsd.org>] CVS commit: basesrc)



> >bounds_check_with_label でやっている、disklabel の書き込み禁止に
> >ついては、BSDI はどうしているのでしょう? NetBSD/arm32 と同様に
> >a を必須にしている?
> >あるいは cpu_disklabel みたいな構造体に別途 disklabel の場所を
> >覚えているだけでも良いかもしれません…
> 
> 	filesystem屋じゃないんで上記の関数がどこにいるのか暗唱
> 	してないのですが、どのへんみればいいですか? 調べます。

NetBSD の場合、
定義しているところ:
	sys/arch/${MACHINE}/${MACHINE}/disksubr.c:bounds_check_with_label()
	で、誤って LABELSECTOR を上書きしそうになったら EROFS を設定。
呼び出しているところ:
	ディスクの書き込み、例えば sys/dev/scsipi/sd.c:sdstrategy()
	で、読み書きが partition の範囲を越えたり、LABELSECTOR を上書
	きしようとしてないかチェックするために呼び出し。
という感じです。

が、しかし、4.4BSD-Lite2 のソース
	sys/ufs/ufs/ufs_disksubr.c
	sys/dev/scsi/sd.c
を見ると、そもそも、こういうチェックをやっている気配がないので、
これは NetBSD 特有で、BSD/OS にはそもそも対応するところがないかも
しれません。
Lite2 だと、disklabel の位置は、指定されたデバイスの partition offset 
値が 0 だったらそのデバイス、 そもなくば `a' の partition offset が 0
だったら `a' の先頭 としているみたいです。(つまり、常にディスクの先頭
から LABELSECTOR だけ後のセクタを disklabel と見なす。)
だいたい、そもそも RAW_PART って定数が存在しないみたい…
--
soda