Commit eda578e559879b1a6a85f924adf2942070ae7ec3
1 parent
04eeb8b6
Drop internal bdrv_pread()/bdrv_pwrite() APIs (Avi Kivity)
Now that scsi generic no longer uses bdrv_pread() and bdrv_pwrite(), we can drop the corresponding internal APIs, which overlap bdrv_read()/bdrv_write() and, being byte oriented, are unnatural for a block device. Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6824 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
34 additions
and
89 deletions
block-raw-posix.c
| ... | ... | @@ -358,6 +358,12 @@ static int raw_pread(BlockDriverState *bs, int64_t offset, |
| 358 | 358 | return raw_pread_aligned(bs, offset, buf, count) + sum; |
| 359 | 359 | } |
| 360 | 360 | |
| 361 | +static int raw_read(BlockDriverState *bs, int64_t sector_num, | |
| 362 | + uint8_t *buf, int nb_sectors) | |
| 363 | +{ | |
| 364 | + return raw_pread(bs, sector_num * 512, buf, (uint64_t)nb_sectors * 512); | |
| 365 | +} | |
| 366 | + | |
| 361 | 367 | /* |
| 362 | 368 | * offset and count are in bytes and possibly not aligned. For files opened |
| 363 | 369 | * with O_DIRECT, necessary alignments are ensured before calling |
| ... | ... | @@ -436,6 +442,12 @@ static int raw_pwrite(BlockDriverState *bs, int64_t offset, |
| 436 | 442 | return raw_pwrite_aligned(bs, offset, buf, count) + sum; |
| 437 | 443 | } |
| 438 | 444 | |
| 445 | +static int raw_write(BlockDriverState *bs, int64_t sector_num, | |
| 446 | + const uint8_t *buf, int nb_sectors) | |
| 447 | +{ | |
| 448 | + return raw_pwrite(bs, sector_num * 512, buf, (uint64_t)nb_sectors * 512); | |
| 449 | +} | |
| 450 | + | |
| 439 | 451 | #ifdef CONFIG_AIO |
| 440 | 452 | /***********************************************************/ |
| 441 | 453 | /* Unix AIO using POSIX AIO */ |
| ... | ... | @@ -843,8 +855,8 @@ BlockDriver bdrv_raw = { |
| 843 | 855 | .aiocb_size = sizeof(RawAIOCB), |
| 844 | 856 | #endif |
| 845 | 857 | |
| 846 | - .bdrv_pread = raw_pread, | |
| 847 | - .bdrv_pwrite = raw_pwrite, | |
| 858 | + .bdrv_read = raw_read, | |
| 859 | + .bdrv_write = raw_write, | |
| 848 | 860 | .bdrv_truncate = raw_truncate, |
| 849 | 861 | .bdrv_getlength = raw_getlength, |
| 850 | 862 | }; |
| ... | ... | @@ -1219,8 +1231,8 @@ BlockDriver bdrv_host_device = { |
| 1219 | 1231 | .aiocb_size = sizeof(RawAIOCB), |
| 1220 | 1232 | #endif |
| 1221 | 1233 | |
| 1222 | - .bdrv_pread = raw_pread, | |
| 1223 | - .bdrv_pwrite = raw_pwrite, | |
| 1234 | + .bdrv_read = raw_read, | |
| 1235 | + .bdrv_write = raw_write, | |
| 1224 | 1236 | .bdrv_getlength = raw_getlength, |
| 1225 | 1237 | |
| 1226 | 1238 | /* removable device support */ | ... | ... |
block-raw-win32.c
| ... | ... | @@ -122,13 +122,15 @@ static int raw_open(BlockDriverState *bs, const char *filename, int flags) |
| 122 | 122 | return 0; |
| 123 | 123 | } |
| 124 | 124 | |
| 125 | -static int raw_pread(BlockDriverState *bs, int64_t offset, | |
| 126 | - uint8_t *buf, int count) | |
| 125 | +static int raw_read(BlockDriverState *bs, int64_t sector_num, | |
| 126 | + uint8_t *buf, int nb_sectors) | |
| 127 | 127 | { |
| 128 | 128 | BDRVRawState *s = bs->opaque; |
| 129 | 129 | OVERLAPPED ov; |
| 130 | 130 | DWORD ret_count; |
| 131 | 131 | int ret; |
| 132 | + int64_t offset = sector_num * 512; | |
| 133 | + int count = nb_sectors * 512; | |
| 132 | 134 | |
| 133 | 135 | memset(&ov, 0, sizeof(ov)); |
| 134 | 136 | ov.Offset = offset; |
| ... | ... | @@ -146,13 +148,15 @@ static int raw_pread(BlockDriverState *bs, int64_t offset, |
| 146 | 148 | return ret_count; |
| 147 | 149 | } |
| 148 | 150 | |
| 149 | -static int raw_pwrite(BlockDriverState *bs, int64_t offset, | |
| 150 | - const uint8_t *buf, int count) | |
| 151 | +static int raw_write(BlockDriverState *bs, int64_t sector_num, | |
| 152 | + const uint8_t *buf, int nb_sectors) | |
| 151 | 153 | { |
| 152 | 154 | BDRVRawState *s = bs->opaque; |
| 153 | 155 | OVERLAPPED ov; |
| 154 | 156 | DWORD ret_count; |
| 155 | 157 | int ret; |
| 158 | + int64_t offset = sector_num * 512; | |
| 159 | + int count = nb_sectors * 512; | |
| 156 | 160 | |
| 157 | 161 | memset(&ov, 0, sizeof(ov)); |
| 158 | 162 | ov.Offset = offset; |
| ... | ... | @@ -359,8 +363,8 @@ BlockDriver bdrv_raw = { |
| 359 | 363 | .bdrv_aio_cancel = raw_aio_cancel, |
| 360 | 364 | .aiocb_size = sizeof(RawAIOCB); |
| 361 | 365 | #endif |
| 362 | - .bdrv_pread = raw_pread, | |
| 363 | - .bdrv_pwrite = raw_pwrite, | |
| 366 | + .bdrv_read = raw_read, | |
| 367 | + .bdrv_write = raw_write, | |
| 364 | 368 | .bdrv_truncate = raw_truncate, |
| 365 | 369 | .bdrv_getlength = raw_getlength, |
| 366 | 370 | }; |
| ... | ... | @@ -508,7 +512,7 @@ BlockDriver bdrv_host_device = { |
| 508 | 512 | .bdrv_aio_cancel = raw_aio_cancel, |
| 509 | 513 | .aiocb_size = sizeof(RawAIOCB); |
| 510 | 514 | #endif |
| 511 | - .bdrv_pread = raw_pread, | |
| 512 | - .bdrv_pwrite = raw_pwrite, | |
| 515 | + .bdrv_read = raw_read, | |
| 516 | + .bdrv_write = raw_write, | |
| 513 | 517 | .bdrv_getlength = raw_getlength, |
| 514 | 518 | }; | ... | ... |
block.c
| ... | ... | @@ -142,7 +142,7 @@ static void bdrv_register(BlockDriver *bdrv) |
| 142 | 142 | bdrv->bdrv_aio_write = bdrv_aio_write_em; |
| 143 | 143 | bdrv->bdrv_aio_cancel = bdrv_aio_cancel_em; |
| 144 | 144 | bdrv->aiocb_size = sizeof(BlockDriverAIOCBSync); |
| 145 | - } else if (!bdrv->bdrv_read && !bdrv->bdrv_pread) { | |
| 145 | + } else if (!bdrv->bdrv_read) { | |
| 146 | 146 | /* add synchronous IO emulation layer */ |
| 147 | 147 | bdrv->bdrv_read = bdrv_read_em; |
| 148 | 148 | bdrv->bdrv_write = bdrv_write_em; |
| ... | ... | @@ -568,22 +568,7 @@ int bdrv_read(BlockDriverState *bs, int64_t sector_num, |
| 568 | 568 | if (bdrv_check_request(bs, sector_num, nb_sectors)) |
| 569 | 569 | return -EIO; |
| 570 | 570 | |
| 571 | - if (drv->bdrv_pread) { | |
| 572 | - int ret, len; | |
| 573 | - len = nb_sectors * 512; | |
| 574 | - ret = drv->bdrv_pread(bs, sector_num * 512, buf, len); | |
| 575 | - if (ret < 0) | |
| 576 | - return ret; | |
| 577 | - else if (ret != len) | |
| 578 | - return -EINVAL; | |
| 579 | - else { | |
| 580 | - bs->rd_bytes += (unsigned) len; | |
| 581 | - bs->rd_ops ++; | |
| 582 | - return 0; | |
| 583 | - } | |
| 584 | - } else { | |
| 585 | - return drv->bdrv_read(bs, sector_num, buf, nb_sectors); | |
| 586 | - } | |
| 571 | + return drv->bdrv_read(bs, sector_num, buf, nb_sectors); | |
| 587 | 572 | } |
| 588 | 573 | |
| 589 | 574 | /* Return < 0 if error. Important errors are: |
| ... | ... | @@ -603,27 +588,11 @@ int bdrv_write(BlockDriverState *bs, int64_t sector_num, |
| 603 | 588 | if (bdrv_check_request(bs, sector_num, nb_sectors)) |
| 604 | 589 | return -EIO; |
| 605 | 590 | |
| 606 | - if (drv->bdrv_pwrite) { | |
| 607 | - int ret, len, count = 0; | |
| 608 | - len = nb_sectors * 512; | |
| 609 | - do { | |
| 610 | - ret = drv->bdrv_pwrite(bs, sector_num * 512, buf, len - count); | |
| 611 | - if (ret < 0) { | |
| 612 | - printf("bdrv_write ret=%d\n", ret); | |
| 613 | - return ret; | |
| 614 | - } | |
| 615 | - count += ret; | |
| 616 | - buf += ret; | |
| 617 | - } while (count != len); | |
| 618 | - bs->wr_bytes += (unsigned) len; | |
| 619 | - bs->wr_ops ++; | |
| 620 | - return 0; | |
| 621 | - } | |
| 622 | 591 | return drv->bdrv_write(bs, sector_num, buf, nb_sectors); |
| 623 | 592 | } |
| 624 | 593 | |
| 625 | -static int bdrv_pread_em(BlockDriverState *bs, int64_t offset, | |
| 626 | - uint8_t *buf, int count1) | |
| 594 | +int bdrv_pread(BlockDriverState *bs, int64_t offset, | |
| 595 | + void *buf, int count1) | |
| 627 | 596 | { |
| 628 | 597 | uint8_t tmp_buf[SECTOR_SIZE]; |
| 629 | 598 | int len, nb_sectors, count; |
| ... | ... | @@ -666,8 +635,8 @@ static int bdrv_pread_em(BlockDriverState *bs, int64_t offset, |
| 666 | 635 | return count1; |
| 667 | 636 | } |
| 668 | 637 | |
| 669 | -static int bdrv_pwrite_em(BlockDriverState *bs, int64_t offset, | |
| 670 | - const uint8_t *buf, int count1) | |
| 638 | +int bdrv_pwrite(BlockDriverState *bs, int64_t offset, | |
| 639 | + const void *buf, int count1) | |
| 671 | 640 | { |
| 672 | 641 | uint8_t tmp_buf[SECTOR_SIZE]; |
| 673 | 642 | int len, nb_sectors, count; |
| ... | ... | @@ -715,42 +684,6 @@ static int bdrv_pwrite_em(BlockDriverState *bs, int64_t offset, |
| 715 | 684 | } |
| 716 | 685 | |
| 717 | 686 | /** |
| 718 | - * Read with byte offsets (needed only for file protocols) | |
| 719 | - */ | |
| 720 | -int bdrv_pread(BlockDriverState *bs, int64_t offset, | |
| 721 | - void *buf1, int count1) | |
| 722 | -{ | |
| 723 | - BlockDriver *drv = bs->drv; | |
| 724 | - | |
| 725 | - if (!drv) | |
| 726 | - return -ENOMEDIUM; | |
| 727 | - if (bdrv_check_byte_request(bs, offset, count1)) | |
| 728 | - return -EIO; | |
| 729 | - | |
| 730 | - if (!drv->bdrv_pread) | |
| 731 | - return bdrv_pread_em(bs, offset, buf1, count1); | |
| 732 | - return drv->bdrv_pread(bs, offset, buf1, count1); | |
| 733 | -} | |
| 734 | - | |
| 735 | -/** | |
| 736 | - * Write with byte offsets (needed only for file protocols) | |
| 737 | - */ | |
| 738 | -int bdrv_pwrite(BlockDriverState *bs, int64_t offset, | |
| 739 | - const void *buf1, int count1) | |
| 740 | -{ | |
| 741 | - BlockDriver *drv = bs->drv; | |
| 742 | - | |
| 743 | - if (!drv) | |
| 744 | - return -ENOMEDIUM; | |
| 745 | - if (bdrv_check_byte_request(bs, offset, count1)) | |
| 746 | - return -EIO; | |
| 747 | - | |
| 748 | - if (!drv->bdrv_pwrite) | |
| 749 | - return bdrv_pwrite_em(bs, offset, buf1, count1); | |
| 750 | - return drv->bdrv_pwrite(bs, offset, buf1, count1); | |
| 751 | -} | |
| 752 | - | |
| 753 | -/** | |
| 754 | 687 | * Truncate file to 'offset' bytes (needed only for file protocols) |
| 755 | 688 | */ |
| 756 | 689 | int bdrv_truncate(BlockDriverState *bs, int64_t offset) | ... | ... |
block_int.h
| ... | ... | @@ -58,10 +58,6 @@ struct BlockDriver { |
| 58 | 58 | int aiocb_size; |
| 59 | 59 | |
| 60 | 60 | const char *protocol_name; |
| 61 | - int (*bdrv_pread)(BlockDriverState *bs, int64_t offset, | |
| 62 | - uint8_t *buf, int count); | |
| 63 | - int (*bdrv_pwrite)(BlockDriverState *bs, int64_t offset, | |
| 64 | - const uint8_t *buf, int count); | |
| 65 | 61 | int (*bdrv_truncate)(BlockDriverState *bs, int64_t offset); |
| 66 | 62 | int64_t (*bdrv_getlength)(BlockDriverState *bs); |
| 67 | 63 | int (*bdrv_write_compressed)(BlockDriverState *bs, int64_t sector_num, | ... | ... |