Re: [Qemu-devel] [PATCH v2 22/24] block: Make bdrv_pread() a bdrv_prwv_co() wrapper

2014-01-11 Thread Max Reitz

On 13.12.2013 14:22, Kevin Wolf wrote:

Instead of implementing the alignment adjustment here, use the now
existing functionality of bdrv_co_do_preadv().

Signed-off-by: Kevin Wolf kw...@redhat.com
---
  block.c | 49 +
  1 file changed, 13 insertions(+), 36 deletions(-)


Reviewed-by: Max Reitz mre...@redhat.com



[Qemu-devel] [PATCH v2 22/24] block: Make bdrv_pread() a bdrv_prwv_co() wrapper

2013-12-13 Thread Kevin Wolf
Instead of implementing the alignment adjustment here, use the now
existing functionality of bdrv_co_do_preadv().

Signed-off-by: Kevin Wolf kw...@redhat.com
---
 block.c | 49 +
 1 file changed, 13 insertions(+), 36 deletions(-)

diff --git a/block.c b/block.c
index 5b00d23..ab165c5 100644
--- a/block.c
+++ b/block.c
@@ -2545,49 +2545,26 @@ int bdrv_make_zero(BlockDriverState *bs, 
BdrvRequestFlags flags)
 }
 }
 
-int bdrv_pread(BlockDriverState *bs, int64_t offset,
-   void *buf, int count1)
+int bdrv_pread(BlockDriverState *bs, int64_t offset, void *buf, int bytes)
 {
-uint8_t tmp_buf[BDRV_SECTOR_SIZE];
-int len, nb_sectors, count;
-int64_t sector_num;
+QEMUIOVector qiov;
+struct iovec iov = {
+.iov_base = (void *)buf,
+.iov_len = bytes,
+};
 int ret;
 
-count = count1;
-/* first read to align to sector start */
-len = (BDRV_SECTOR_SIZE - offset)  (BDRV_SECTOR_SIZE - 1);
-if (len  count)
-len = count;
-sector_num = offset  BDRV_SECTOR_BITS;
-if (len  0) {
-if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1))  0)
-return ret;
-memcpy(buf, tmp_buf + (offset  (BDRV_SECTOR_SIZE - 1)), len);
-count -= len;
-if (count == 0)
-return count1;
-sector_num++;
-buf += len;
+if (bytes  0) {
+return -EINVAL;
 }
 
-/* read the sectors in place */
-nb_sectors = count  BDRV_SECTOR_BITS;
-if (nb_sectors  0) {
-if ((ret = bdrv_read(bs, sector_num, buf, nb_sectors))  0)
-return ret;
-sector_num += nb_sectors;
-len = nb_sectors  BDRV_SECTOR_BITS;
-buf += len;
-count -= len;
+qemu_iovec_init_external(qiov, iov, 1);
+ret = bdrv_prwv_co(bs, offset, qiov, false, 0);
+if (ret  0) {
+return ret;
 }
 
-/* add data from the last sector */
-if (count  0) {
-if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1))  0)
-return ret;
-memcpy(buf, tmp_buf, count);
-}
-return count1;
+return bytes;
 }
 
 int bdrv_pwritev(BlockDriverState *bs, int64_t offset, QEMUIOVector *qiov)
-- 
1.8.1.4