这本书 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() 有什么误解吗?