diff options
author | Mike Snitzer <snitzer@redhat.com> | 2014-10-09 19:32:22 -0400 |
---|---|---|
committer | Mike Snitzer <snitzer@redhat.com> | 2014-11-10 15:25:27 -0500 |
commit | 148e51baf8e7ae2070ec47c2a0ec05ddf6a47da1 (patch) | |
tree | bf734d271d8f30aa41a4fd9439133f4398ff6d44 /drivers/md/dm.c | |
parent | 604ea90641b45f41f8dee34ce45694f1e0c53a5a (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.c | 12 |
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; |