本 ldd は、関数 blk_queue_segment_boundary() について次のように述べています。
一部のデバイスは、特定のサイズのメモリ境界を超える要求を処理できません。あなたのデバイスがそれらのいずれかである場合、この関数を使用してカーネルにその境界について伝えます。たとえば、4 MB の境界を超える要求でデバイスに問題がある場合は、0x3fffff のマスクを渡します。デフォルトのマスクは 0xffffffff です。
ここで境界が何を意味するのかよくわかりません。たとえば、実際に 4MB のファイルで構成されている仮想ブロック デバイスがあるので、リクエストが 4MB の境界を超えないようにしたいのですが、
unsigned long sector = blk_rq_pos(req);
unsigned long offset = sector << 9;
unsigned long nbytes = blk_rq_bytes(req);
int file_offset = offset % (1 << 22);
私が欲しいのは、 (file_offset + nbytes) が 4M を超えないことですが、実際には 4M を超えることもあるので、 blk_queue_segment_boundary() の誤解はありますか?