block: fix max segment size handling in blk_queue_virt_boundary
authorChristoph Hellwig <hch@lst.de>
Wed, 24 Jul 2019 16:26:56 +0000 (18:26 +0200)
committerJens Axboe <axboe@kernel.dk>
Fri, 26 Jul 2019 18:50:57 +0000 (12:50 -0600)
We should only set the max segment size to unlimited if we actually
have a virt boundary.  Otherwise we accidentally clear that limit
when called from the SCSI midlayer, which always calls
blk_queue_virt_boundary, even if that mask is 0.

Fixes: 7ad388d8e4c7 ("scsi: core: add a host / host template field for the virt boundary")
Reported-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-settings.c

index 2ae348c101a05f004a069d04726445436e68acef..2c1831207a8f74de455679551f79d8862450eed0 100644 (file)
@@ -752,7 +752,8 @@ void blk_queue_virt_boundary(struct request_queue *q, unsigned long mask)
         * page (which might not be idential to the Linux PAGE_SIZE).  Because
         * of that they are not limited by our notion of "segment size".
         */
-       q->limits.max_segment_size = UINT_MAX;
+       if (mask)
+               q->limits.max_segment_size = UINT_MAX;
 }
 EXPORT_SYMBOL(blk_queue_virt_boundary);