Some controllers (particulary IDE) can not handle DMA requests that cross memory regions at 4MB. Think of it as segment:index addressing where index can not be larger that the set boundary.
There is also a blk_queue_max_segment_size
. Both are used to construct correct requests to the device - requests get reordered and merged.
There are other uses. For example, from xen-blkfront.c
:
/* Each segment in a request is up to an aligned page in size. */
blk_queue_segment_boundary(rq, PAGE_SIZE - 1);
blk_queue_max_segment_size(rq, PAGE_SIZE);
Requests are limited to PAGE_SIZE
for better performance.