[linux-users: 109000] Re: カーネルスレッド内からのSCSI Genericデバイスの呼び出しについて

harrier @ mwe.biglobe.ne.jp harrier @ mwe.biglobe.ne.jp
2015年 12月 25日 (金) 18:06:58 JST


中村@川崎です。

追加でわかった情報です。

カーネル内からunlocked_ioctlハンドラを直接呼び出してSG_IOを実行した場合、
受信したデータをバッファにコピーするために

sg_ioctl() --> sg_new_read() --> sg_finish_rem_req()
  --> blk_rq_unmap_user() --> __blk_rq_unmap_user()
     --> bio_uncopy_user() 

と処理が流れてくるのですが、このbio_uncopy_user()の中で挙動の違いが
出ました。

・カーネルモジュール初期化処理やハンドラ内から呼び出した場合
 →"current->mm"は0ではなく、bio_copy_to_iter()が実行される

・カーネルスレッドを生成してその中から呼び出した場合
 →"current->mm"が0であるためにbio_copy_to_iter()が実行されない

これが直接の原因のようですが、なぜcurrent->mmに差が出るのか…。
やっぱり何かが足りてない気がしています。


--
Takahiro Nakamura
harrier @ mwe.biglobe.ne.jp


linux-users メーリングリストの案内