From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LWDw7-0007gh-E2 for qemu-devel@nongnu.org; Sun, 08 Feb 2009 12:59:19 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LWDw5-0007eU-IH for qemu-devel@nongnu.org; Sun, 08 Feb 2009 12:59:18 -0500 Received: from [199.232.76.173] (port=33234 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LWDw5-0007dx-76 for qemu-devel@nongnu.org; Sun, 08 Feb 2009 12:59:17 -0500 Received: from mx2.redhat.com ([66.187.237.31]:32858) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LWDw4-0008Gs-1r for qemu-devel@nongnu.org; Sun, 08 Feb 2009 12:59:16 -0500 From: Avi Kivity Date: Sun, 8 Feb 2009 19:59:07 +0200 Message-Id: <1234115947-31622-4-git-send-email-avi@redhat.com> In-Reply-To: <1234115947-31622-1-git-send-email-avi@redhat.com> References: <1234115947-31622-1-git-send-email-avi@redhat.com> Subject: [Qemu-devel] [PATCH 3/3] Drop internal bdrv_pread()/bdrv_pwrite() APIs Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori , qemu-devel@nongnu.org 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 --- block-raw-posix.c | 20 +++++++++++--- block-raw-win32.c | 20 ++++++++------ block.c | 73 ++++------------------------------------------------ block_int.h | 4 --- 4 files changed, 34 insertions(+), 83 deletions(-) diff --git a/block-raw-posix.c b/block-raw-posix.c index 6b8adc4..9b32615 100644 --- a/block-raw-posix.c +++ b/block-raw-posix.c @@ -353,6 +353,12 @@ static int raw_pread(BlockDriverState *bs, int64_t offset, return raw_pread_aligned(bs, offset, buf, count) + sum; } +static int raw_read(BlockDriverState *bs, int64_t sector_num, + uint8_t *buf, int nb_sectors) +{ + return raw_pread(bs, sector_num * 512, buf, (uint64_t)nb_sectors * 512); +} + /* * offset and count are in bytes and possibly not aligned. For files opened * with O_DIRECT, necessary alignments are ensured before calling @@ -431,6 +437,12 @@ static int raw_pwrite(BlockDriverState *bs, int64_t offset, return raw_pwrite_aligned(bs, offset, buf, count) + sum; } +static int raw_write(BlockDriverState *bs, int64_t sector_num, + const uint8_t *buf, int nb_sectors) +{ + return raw_pwrite(bs, sector_num * 512, buf, (uint64_t)nb_sectors * 512); +} + #ifdef CONFIG_AIO /***********************************************************/ /* Unix AIO using POSIX AIO */ @@ -828,8 +840,8 @@ BlockDriver bdrv_raw = { .aiocb_size = sizeof(RawAIOCB), #endif - .bdrv_pread = raw_pread, - .bdrv_pwrite = raw_pwrite, + .bdrv_read = raw_read, + .bdrv_write = raw_write, .bdrv_truncate = raw_truncate, .bdrv_getlength = raw_getlength, }; @@ -1208,8 +1220,8 @@ BlockDriver bdrv_host_device = { .aiocb_size = sizeof(RawAIOCB), #endif - .bdrv_pread = raw_pread, - .bdrv_pwrite = raw_pwrite, + .bdrv_read = raw_read, + .bdrv_write = raw_write, .bdrv_getlength = raw_getlength, /* removable device support */ diff --git a/block-raw-win32.c b/block-raw-win32.c index 892f2d1..f37ab68 100644 --- a/block-raw-win32.c +++ b/block-raw-win32.c @@ -121,13 +121,15 @@ static int raw_open(BlockDriverState *bs, const char *filename, int flags) return 0; } -static int raw_pread(BlockDriverState *bs, int64_t offset, - uint8_t *buf, int count) +static int raw_read(BlockDriverState *bs, int64_t sector_num, + uint8_t *buf, int nb_sectors) { BDRVRawState *s = bs->opaque; OVERLAPPED ov; DWORD ret_count; int ret; + int64_t offset = sector_num * 512; + int count = nb_sectors * 512; memset(&ov, 0, sizeof(ov)); ov.Offset = offset; @@ -145,13 +147,15 @@ static int raw_pread(BlockDriverState *bs, int64_t offset, return ret_count; } -static int raw_pwrite(BlockDriverState *bs, int64_t offset, - const uint8_t *buf, int count) +static int raw_write(BlockDriverState *bs, int64_t sector_num, + const uint8_t *buf, int nb_sectors) { BDRVRawState *s = bs->opaque; OVERLAPPED ov; DWORD ret_count; int ret; + int64_t offset = sector_num * 512; + int count = nb_sectors * 512; memset(&ov, 0, sizeof(ov)); ov.Offset = offset; @@ -358,8 +362,8 @@ BlockDriver bdrv_raw = { .bdrv_aio_cancel = raw_aio_cancel, .aiocb_size = sizeof(RawAIOCB); #endif - .bdrv_pread = raw_pread, - .bdrv_pwrite = raw_pwrite, + .bdrv_read = raw_read, + .bdrv_write = raw_write, .bdrv_truncate = raw_truncate, .bdrv_getlength = raw_getlength, }; @@ -511,7 +515,7 @@ BlockDriver bdrv_host_device = { .bdrv_aio_cancel = raw_aio_cancel, .aiocb_size = sizeof(RawAIOCB); #endif - .bdrv_pread = raw_pread, - .bdrv_pwrite = raw_pwrite, + .bdrv_read = raw_read, + .bdrv_write = raw_write, .bdrv_getlength = raw_getlength, }; diff --git a/block.c b/block.c index 4aaea09..5963d54 100644 --- a/block.c +++ b/block.c @@ -136,7 +136,7 @@ static void bdrv_register(BlockDriver *bdrv) bdrv->bdrv_aio_write = bdrv_aio_write_em; bdrv->bdrv_aio_cancel = bdrv_aio_cancel_em; bdrv->aiocb_size = sizeof(BlockDriverAIOCBSync); - } else if (!bdrv->bdrv_read && !bdrv->bdrv_pread) { + } else if (!bdrv->bdrv_read) { /* add synchronous IO emulation layer */ bdrv->bdrv_read = bdrv_read_em; bdrv->bdrv_write = bdrv_write_em; @@ -528,22 +528,7 @@ int bdrv_read(BlockDriverState *bs, int64_t sector_num, if (!drv) return -ENOMEDIUM; - if (drv->bdrv_pread) { - int ret, len; - len = nb_sectors * 512; - ret = drv->bdrv_pread(bs, sector_num * 512, buf, len); - if (ret < 0) - return ret; - else if (ret != len) - return -EINVAL; - else { - bs->rd_bytes += (unsigned) len; - bs->rd_ops ++; - return 0; - } - } else { - return drv->bdrv_read(bs, sector_num, buf, nb_sectors); - } + return drv->bdrv_read(bs, sector_num, buf, nb_sectors); } /* Return < 0 if error. Important errors are: @@ -560,27 +545,11 @@ int bdrv_write(BlockDriverState *bs, int64_t sector_num, return -ENOMEDIUM; if (bs->read_only) return -EACCES; - if (drv->bdrv_pwrite) { - int ret, len, count = 0; - len = nb_sectors * 512; - do { - ret = drv->bdrv_pwrite(bs, sector_num * 512, buf, len - count); - if (ret < 0) { - printf("bdrv_write ret=%d\n", ret); - return ret; - } - count += ret; - buf += ret; - } while (count != len); - bs->wr_bytes += (unsigned) len; - bs->wr_ops ++; - return 0; - } return drv->bdrv_write(bs, sector_num, buf, nb_sectors); } -static int bdrv_pread_em(BlockDriverState *bs, int64_t offset, - uint8_t *buf, int count1) +int bdrv_pread(BlockDriverState *bs, int64_t offset, + void *buf, int count1) { uint8_t tmp_buf[SECTOR_SIZE]; int len, nb_sectors, count; @@ -623,8 +592,8 @@ static int bdrv_pread_em(BlockDriverState *bs, int64_t offset, return count1; } -static int bdrv_pwrite_em(BlockDriverState *bs, int64_t offset, - const uint8_t *buf, int count1) +int bdrv_pwrite(BlockDriverState *bs, int64_t offset, + const void *buf, int count1) { uint8_t tmp_buf[SECTOR_SIZE]; int len, nb_sectors, count; @@ -672,36 +641,6 @@ static int bdrv_pwrite_em(BlockDriverState *bs, int64_t offset, } /** - * Read with byte offsets (needed only for file protocols) - */ -int bdrv_pread(BlockDriverState *bs, int64_t offset, - void *buf1, int count1) -{ - BlockDriver *drv = bs->drv; - - if (!drv) - return -ENOMEDIUM; - if (!drv->bdrv_pread) - return bdrv_pread_em(bs, offset, buf1, count1); - return drv->bdrv_pread(bs, offset, buf1, count1); -} - -/** - * Write with byte offsets (needed only for file protocols) - */ -int bdrv_pwrite(BlockDriverState *bs, int64_t offset, - const void *buf1, int count1) -{ - BlockDriver *drv = bs->drv; - - if (!drv) - return -ENOMEDIUM; - if (!drv->bdrv_pwrite) - return bdrv_pwrite_em(bs, offset, buf1, count1); - return drv->bdrv_pwrite(bs, offset, buf1, count1); -} - -/** * Truncate file to 'offset' bytes (needed only for file protocols) */ int bdrv_truncate(BlockDriverState *bs, int64_t offset) diff --git a/block_int.h b/block_int.h index e4630f0..cc9966b 100644 --- a/block_int.h +++ b/block_int.h @@ -58,10 +58,6 @@ struct BlockDriver { int aiocb_size; const char *protocol_name; - int (*bdrv_pread)(BlockDriverState *bs, int64_t offset, - uint8_t *buf, int count); - int (*bdrv_pwrite)(BlockDriverState *bs, int64_t offset, - const uint8_t *buf, int count); int (*bdrv_truncate)(BlockDriverState *bs, int64_t offset); int64_t (*bdrv_getlength)(BlockDriverState *bs); int (*bdrv_write_compressed)(BlockDriverState *bs, int64_t sector_num, -- 1.6.1.1