[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 メーリングリストの案内