トップ 最新 追記

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

2013-03-07 [長年日記]

_ [FreeBSD]recoverdisk errata

FreeBSD/amd64環境にて、sectorsizeが non-zeroかつ stripsizeが zeroの レアケースで発生するrecoverdiskのerrataです

stable/9で見つけましたが、headにも同様の問題があると思われる

  • Cではioctl(2)のような任意引数を受ける APIで型検査が出来ない
  • DIOCGSECTORSIZE/DIOCGSTRIPESIZE ioctlは u_int/off_t型を書き戻す
  • LP64環境では、u_intは 32bit unsigned int、off_tは 64bit signed intである
  • stripesize/sectorsizeの順に連続した領域に割り当てられている(コンパイラ依存)

結果として、ioctl(fdr, DIOCGSECTORSIZE, &sectorsize)の呼び出し後に ioctl(fdr, DIOCGSTRIPESIZE, &stripesize)を呼び出した時点で、sectorsize が上書きされて zeroになり bigsize = (bigsize / sectorsize) * sectorsize にて除算例外が発生する

diskinfoは正しく実装されてるのでケアレスミスの類ですが off_t型を返す ioctlの実装が直感的では無い気がします

DIOCGSTRIPESIZEと対になるDIOCGSTRIPEOFFSETが off_t型を返すのは当然ですが、 値の範囲は stripe offsetと同じなので同じ型なのだと思いますが、 本来は DIOCGSECTORSIZE/DIOCGSTRIPESIZE共に size_t型で戻す方が 現代的な Cの型システム的には自然に思えます

Index: sbin/recoverdisk/recoverdisk.c
===================================================================
--- sbin/recoverdisk/recoverdisk.c	(revision 247904)
+++ sbin/recoverdisk/recoverdisk.c	(working copy)
@@ -156,7 +156,7 @@
 	int error, state;
 	u_char *buf;
 	u_int sectorsize;
-	u_int stripesize;
+	off_t stripesize;
 	time_t t1, t2;
 	struct stat sb;
 	u_int n, snapshot = 60;

2013-03-18 [長年日記]

_ [雑記]今日も風が…

今日も風強めで、土埃が orz

あと、前の時ほどではないが風が生温かい気がする。 また、雨でも降って急に寒くなるのかな?


カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記