|
@@ -1607,9 +1607,9 @@ static int dm_merge_bvec(struct request_queue *q,
|
|
|
* Find maximum amount of I/O that won't need splitting
|
|
|
*/
|
|
|
max_sectors = min(max_io_len(bvm->bi_sector, ti),
|
|
|
- (sector_t) BIO_MAX_SECTORS);
|
|
|
+ (sector_t) queue_max_sectors(q));
|
|
|
max_size = (max_sectors << SECTOR_SHIFT) - bvm->bi_size;
|
|
|
- if (max_size < 0)
|
|
|
+ if (unlikely(max_size < 0)) /* this shouldn't _ever_ happen */
|
|
|
max_size = 0;
|
|
|
|
|
|
/*
|
|
@@ -1621,10 +1621,10 @@ static int dm_merge_bvec(struct request_queue *q,
|
|
|
max_size = ti->type->merge(ti, bvm, biovec, max_size);
|
|
|
/*
|
|
|
* If the target doesn't support merge method and some of the devices
|
|
|
- * provided their merge_bvec method (we know this by looking at
|
|
|
- * queue_max_hw_sectors), then we can't allow bios with multiple vector
|
|
|
- * entries. So always set max_size to 0, and the code below allows
|
|
|
- * just one page.
|
|
|
+ * provided their merge_bvec method (we know this by looking for the
|
|
|
+ * max_hw_sectors that dm_set_device_limits may set), then we can't
|
|
|
+ * allow bios with multiple vector entries. So always set max_size
|
|
|
+ * to 0, and the code below allows just one page.
|
|
|
*/
|
|
|
else if (queue_max_hw_sectors(q) <= PAGE_SIZE >> 9)
|
|
|
max_size = 0;
|