diff options
author | Christoph Hellwig <hch@lst.de> | 2015-01-18 10:16:32 -0500 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2015-02-05 11:30:42 -0500 |
commit | 75c72b8366f35f2e5cf1b841b52095948878b794 (patch) | |
tree | 7b7637a0d6dde82baaa894f3244175fd93d8c68c /block | |
parent | 26e49cfc7e988a76bf1e55cef0d9e438e5489180 (diff) |
block: merge __bio_map_kern into bio_map_kern
This saves a little code, and allow to simplify the error handling.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Ming Lei <tom.leiming@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block')
-rw-r--r-- | block/bio.c | 50 |
1 files changed, 17 insertions, 33 deletions
diff --git a/block/bio.c b/block/bio.c index 7d8c6555e3f3..a69a9c9e7c93 100644 --- a/block/bio.c +++ b/block/bio.c | |||
@@ -1429,8 +1429,18 @@ static void bio_map_kern_endio(struct bio *bio, int err) | |||
1429 | bio_put(bio); | 1429 | bio_put(bio); |
1430 | } | 1430 | } |
1431 | 1431 | ||
1432 | static struct bio *__bio_map_kern(struct request_queue *q, void *data, | 1432 | /** |
1433 | unsigned int len, gfp_t gfp_mask) | 1433 | * bio_map_kern - map kernel address into bio |
1434 | * @q: the struct request_queue for the bio | ||
1435 | * @data: pointer to buffer to map | ||
1436 | * @len: length in bytes | ||
1437 | * @gfp_mask: allocation flags for bio allocation | ||
1438 | * | ||
1439 | * Map the kernel address into a bio suitable for io to a block | ||
1440 | * device. Returns an error pointer in case of error. | ||
1441 | */ | ||
1442 | struct bio *bio_map_kern(struct request_queue *q, void *data, unsigned int len, | ||
1443 | gfp_t gfp_mask) | ||
1434 | { | 1444 | { |
1435 | unsigned long kaddr = (unsigned long)data; | 1445 | unsigned long kaddr = (unsigned long)data; |
1436 | unsigned long end = (kaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT; | 1446 | unsigned long end = (kaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT; |
@@ -1454,8 +1464,11 @@ static struct bio *__bio_map_kern(struct request_queue *q, void *data, | |||
1454 | bytes = len; | 1464 | bytes = len; |
1455 | 1465 | ||
1456 | if (bio_add_pc_page(q, bio, virt_to_page(data), bytes, | 1466 | if (bio_add_pc_page(q, bio, virt_to_page(data), bytes, |
1457 | offset) < bytes) | 1467 | offset) < bytes) { |
1458 | break; | 1468 | /* we don't support partial mappings */ |
1469 | bio_put(bio); | ||
1470 | return ERR_PTR(-EINVAL); | ||
1471 | } | ||
1459 | 1472 | ||
1460 | data += bytes; | 1473 | data += bytes; |
1461 | len -= bytes; | 1474 | len -= bytes; |
@@ -1465,35 +1478,6 @@ static struct bio *__bio_map_kern(struct request_queue *q, void *data, | |||
1465 | bio->bi_end_io = bio_map_kern_endio; | 1478 | bio->bi_end_io = bio_map_kern_endio; |
1466 | return bio; | 1479 | return bio; |
1467 | } | 1480 | } |
1468 | |||
1469 | /** | ||
1470 | * bio_map_kern - map kernel address into bio | ||
1471 | * @q: the struct request_queue for the bio | ||
1472 | * @data: pointer to buffer to map | ||
1473 | * @len: length in bytes | ||
1474 | * @gfp_mask: allocation flags for bio allocation | ||
1475 | * | ||
1476 | * Map the kernel address into a bio suitable for io to a block | ||
1477 | * device. Returns an error pointer in case of error. | ||
1478 | */ | ||
1479 | struct bio *bio_map_kern(struct request_queue *q, void *data, unsigned int len, | ||
1480 | gfp_t gfp_mask) | ||
1481 | { | ||
1482 | struct bio *bio; | ||
1483 | |||
1484 | bio = __bio_map_kern(q, data, len, gfp_mask); | ||
1485 | if (IS_ERR(bio)) | ||
1486 | return bio; | ||
1487 | |||
1488 | if (bio->bi_iter.bi_size == len) | ||
1489 | return bio; | ||
1490 | |||
1491 | /* | ||
1492 | * Don't support partial mappings. | ||
1493 | */ | ||
1494 | bio_put(bio); | ||
1495 | return ERR_PTR(-EINVAL); | ||
1496 | } | ||
1497 | EXPORT_SYMBOL(bio_map_kern); | 1481 | EXPORT_SYMBOL(bio_map_kern); |
1498 | 1482 | ||
1499 | static void bio_copy_kern_endio(struct bio *bio, int err) | 1483 | static void bio_copy_kern_endio(struct bio *bio, int err) |