Message ID | 1358412490-21346-1-git-send-email-mjt@msgid.tls.msk.ru |
---|---|
State | New |
Headers | show |
Am 17.01.2013 09:48, schrieb Michael Tokarev: > We have iov_from_buf() and iov_to_buf(), use them instead of > open-coding these in block/win32-aio.c > > Signed-Off-By: Michael Tokarev <mjt@tls.msk.ru> > --- > block/win32-aio.c | 18 +++--------------- > 1 file changed, 3 insertions(+), 15 deletions(-) > > diff --git a/block/win32-aio.c b/block/win32-aio.c > index 0383370..773d3f4 100644 > --- a/block/win32-aio.c > +++ b/block/win32-aio.c > @@ -79,14 +79,8 @@ static void win32_aio_process_completion(QEMUWin32AIOState *s, > > if (!waiocb->is_linear) { > if (ret == 0 && waiocb->is_read) { > - QEMUIOVector *qiov = waiocb->qiov; > - char *p = waiocb->buf; > - int i; > - > - for (i = 0; i < qiov->niov; ++i) { > - memcpy(p, qiov->iov[i].iov_base, qiov->iov[i].iov_len); I said on top of my patch for a reason: Now this looks like an innocent refactoring patch, while in fact it is a hidden bug fix. Even the commit message doesn't mention this. Though I guess Stefan can apply my patch first and resolve the conflict with this patch, then the result should be right. Kevin
17.01.2013 12:57, Kevin Wolf wrote:
> I said on top of my patch for a reason: Now this looks like an innocent
Kevin, that wasn't intentional. I'm sorry. Somehow I thought your
bugfix is already applied to master, and these reverse memcpy args
are difficult to spot (gah, that's why the bug is here to start with).
I resend it based on your patch.
/mjt
diff --git a/block/win32-aio.c b/block/win32-aio.c index 0383370..773d3f4 100644 --- a/block/win32-aio.c +++ b/block/win32-aio.c @@ -79,14 +79,8 @@ static void win32_aio_process_completion(QEMUWin32AIOState *s, if (!waiocb->is_linear) { if (ret == 0 && waiocb->is_read) { - QEMUIOVector *qiov = waiocb->qiov; - char *p = waiocb->buf; - int i; - - for (i = 0; i < qiov->niov; ++i) { - memcpy(p, qiov->iov[i].iov_base, qiov->iov[i].iov_len); - p += qiov->iov[i].iov_len; - } + iov_from_buf(waiocb->qiov.iov, waiocb->qiov.niov, + 0, waiocb->buf, waiocb->qiov.size); qemu_vfree(waiocb->buf); } } @@ -153,13 +147,7 @@ BlockDriverAIOCB *win32_aio_submit(BlockDriverState *bs, if (qiov->niov > 1) { waiocb->buf = qemu_blockalign(bs, qiov->size); if (type & QEMU_AIO_WRITE) { - char *p = waiocb->buf; - int i; - - for (i = 0; i < qiov->niov; ++i) { - memcpy(p, qiov->iov[i].iov_base, qiov->iov[i].iov_len); - p += qiov->iov[i].iov_len; - } + iov_to_buf(qiov->iov, qiov->niov, 0, waiocb->buf, qiov->size); } waiocb->is_linear = false; } else {
We have iov_from_buf() and iov_to_buf(), use them instead of open-coding these in block/win32-aio.c Signed-Off-By: Michael Tokarev <mjt@tls.msk.ru> --- block/win32-aio.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-)