aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/dm.c
diff options
context:
space:
mode:
authorMike Snitzer <snitzer@redhat.com>2014-10-09 19:32:22 -0400
committerMike Snitzer <snitzer@redhat.com>2014-11-10 15:25:27 -0500
commit148e51baf8e7ae2070ec47c2a0ec05ddf6a47da1 (patch)
treebf734d271d8f30aa41a4fd9439133f4398ff6d44 /drivers/md/dm.c
parent604ea90641b45f41f8dee34ce45694f1e0c53a5a (diff)
dm: improve documentation and code clarity in dm_merge_bvec
These code changes do not introduce a functional change. But bio_add_page() will never attempt to build up a bio larger than queue_max_sectors(). Similarly, bio_get_nr_vecs() is also bound by queue_max_sectors(). Therefore, there is no point in allowing dm_merge_bvec() to answer "how many sectors can a bio have at this offset?" with anything larger than queue_max_sectors(). Using queue_max_sectors() rather than BIO_MAX_SECTORS serves to more accurately convey the limits that are being imposed. Also, use unlikely() to clarify the fact that the defensive code in dm_merge_bvec() relative to max_size going negative shouldn't ever happen -- if it does happen there is a bug in the block layer for requesting larger than dm_merge_bvec()'s initial response for a given offset. Also, update a comment in dm_merge_bvec() relative to max_hw_sectors_kb. And fix empty newline whitespace. Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'drivers/md/dm.c')
-rw-r--r--drivers/md/dm.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 58f3927fd7cc..0fee0e54d36f 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1607,9 +1607,9 @@ static int dm_merge_bvec(struct request_queue *q,
1607 * Find maximum amount of I/O that won't need splitting 1607 * Find maximum amount of I/O that won't need splitting
1608 */ 1608 */
1609 max_sectors = min(max_io_len(bvm->bi_sector, ti), 1609 max_sectors = min(max_io_len(bvm->bi_sector, ti),
1610 (sector_t) BIO_MAX_SECTORS); 1610 (sector_t) queue_max_sectors(q));
1611 max_size = (max_sectors << SECTOR_SHIFT) - bvm->bi_size; 1611 max_size = (max_sectors << SECTOR_SHIFT) - bvm->bi_size;
1612 if (max_size < 0) 1612 if (unlikely(max_size < 0)) /* this shouldn't _ever_ happen */
1613 max_size = 0; 1613 max_size = 0;
1614 1614
1615 /* 1615 /*
@@ -1621,10 +1621,10 @@ static int dm_merge_bvec(struct request_queue *q,
1621 max_size = ti->type->merge(ti, bvm, biovec, max_size); 1621 max_size = ti->type->merge(ti, bvm, biovec, max_size);
1622 /* 1622 /*
1623 * If the target doesn't support merge method and some of the devices 1623 * If the target doesn't support merge method and some of the devices
1624 * provided their merge_bvec method (we know this by looking at 1624 * provided their merge_bvec method (we know this by looking for the
1625 * queue_max_hw_sectors), then we can't allow bios with multiple vector 1625 * max_hw_sectors that dm_set_device_limits may set), then we can't
1626 * entries. So always set max_size to 0, and the code below allows 1626 * allow bios with multiple vector entries. So always set max_size
1627 * just one page. 1627 * to 0, and the code below allows just one page.
1628 */ 1628 */
1629 else if (queue_max_hw_sectors(q) <= PAGE_SIZE >> 9) 1629 else if (queue_max_hw_sectors(q) <= PAGE_SIZE >> 9)
1630 max_size = 0; 1630 max_size = 0;