kfifo 試す (3)

仕事中に write が常に 0 を戻している事を発見。
# 何してるんだか ...
帰宅後、それのみを盛り込んでみたら write は正常に動作している模様??
基本 read/write は{読んだ, 書いた}数を戻さないと駄目という事ですか。でも正常に終了しているように見えるだけで、ちょっと色々 printk して一つづつ確認する必要ありそげ。

write

ひたすら printk で確認。
渡される size は strlen(buf) な模様。とゆーコトは '\0' 分をプラスした領域を用意して memcpy する必要があるのか。
や、違うな。と言いつつ printk を盛り込んでは vmware に scp して make して rmmod して insmod してデバイスに cat で書き込み、な repeat。
現時点で kfifo にコピーできてなさげ、という所まで行き着いてますが、まだまだ向こうは見えてません。もしや、と言いつつ見てみるとやはり copy_to_user が失敗している事が判明。やはりここですか。

	if(!copy_from_user(ptr, buf, size))
		ret = -EFAULT;
	else
		ret = kfifo_put(fifo_ptr, ptr, size);

ってヤッてるんですが、もしかして判定が逆??

copy_from_user はコピーできなかったサイズを返す。つまり、成功時は 0 になる。

Linux カーネル関数リファレンス より引用

とほほほ。その上 AC アダプタのソレがきちんとササッておらずいきなり電源 off。その上職場なソレの呼び出しが云々 (鬱

今日は gdgd

帰宅時点でへろへろでしたもので。
しかも tail してた端末が freeze した。kill できぬ。一応 copy_from_user はきちんとデキてるハズなんですが、明日再度確認します。