* [Qemu-devel] [PULL 0/6] Block patches
@ 2010-08-03 14:44 Kevin Wolf
2010-08-09 13:41 ` Anthony Liguori
0 siblings, 1 reply; 18+ messages in thread
From: Kevin Wolf @ 2010-08-03 14:44 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit 5933e8a96ab9c59cb6b6c80c9db385364a68c959:
fix last cpu timer initialization (2010-08-02 18:49:13 +0000)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git for-anthony
Andrea Arcangeli (1):
ide: Avoid canceling IDE DMA
Kevin Wolf (2):
block: Change bdrv_commit to handle multiple sectors at once
block: Fix bdrv_has_zero_init
Markus Armbruster (1):
block: Change bdrv_eject() not to drop the image
Miguel Di Ciurcio Filho (1):
loadvm: improve tests before bdrv_snapshot_goto()
Yoshiaki Tamura (1):
block migration: replace tabs by spaces.
block-migration.c | 12 ++++----
block.c | 50 ++++++++++++++++++------------------
block/raw-posix.c | 13 ++++++---
block/raw-win32.c | 6 ++++
block/raw.c | 6 ++++
block_int.h | 8 ++++-
hw/ide/pci.c | 23 +++++++++++++++-
monitor.c | 3 +-
savevm.c | 71 +++++++++++++++++++++++++---------------------------
9 files changed, 115 insertions(+), 77 deletions(-)
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Qemu-devel] [PULL 0/6] Block patches
2010-08-03 14:44 Kevin Wolf
@ 2010-08-09 13:41 ` Anthony Liguori
0 siblings, 0 replies; 18+ messages in thread
From: Anthony Liguori @ 2010-08-09 13:41 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-devel
On 08/03/2010 09:44 AM, Kevin Wolf wrote:
> The following changes since commit 5933e8a96ab9c59cb6b6c80c9db385364a68c959:
>
> fix last cpu timer initialization (2010-08-02 18:49:13 +0000)
>
Pulled, thanks.
Regards,
Anthony Liguori
> are available in the git repository at:
> git://repo.or.cz/qemu/kevin.git for-anthony
>
> Andrea Arcangeli (1):
> ide: Avoid canceling IDE DMA
>
> Kevin Wolf (2):
> block: Change bdrv_commit to handle multiple sectors at once
> block: Fix bdrv_has_zero_init
>
> Markus Armbruster (1):
> block: Change bdrv_eject() not to drop the image
>
> Miguel Di Ciurcio Filho (1):
> loadvm: improve tests before bdrv_snapshot_goto()
>
> Yoshiaki Tamura (1):
> block migration: replace tabs by spaces.
>
> block-migration.c | 12 ++++----
> block.c | 50 ++++++++++++++++++------------------
> block/raw-posix.c | 13 ++++++---
> block/raw-win32.c | 6 ++++
> block/raw.c | 6 ++++
> block_int.h | 8 ++++-
> hw/ide/pci.c | 23 +++++++++++++++-
> monitor.c | 3 +-
> savevm.c | 71 +++++++++++++++++++++++++---------------------------
> 9 files changed, 115 insertions(+), 77 deletions(-)
>
>
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Qemu-devel] [PULL 0/6] Block patches
@ 2011-05-03 11:08 Kevin Wolf
2011-05-03 12:44 ` Anthony Liguori
0 siblings, 1 reply; 18+ messages in thread
From: Kevin Wolf @ 2011-05-03 11:08 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit 57aa265d462a64a06268be26d49020729cff56c1:
lm32: add Milkymist Minimac2 support (2011-05-03 10:48:40 +0200)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git for-anthony
Alon Levy (1):
ide/atapi: fix set but unused
Amit Shah (2):
atapi: Move comment to proper place
atapi: Explain why we need a 'media not present' state
Jes Sorensen (1):
qemu-progress.c: printf isn't signal safe
Kevin Wolf (1):
qemu-img resize: Fix option parsing
Nick Thomas (1):
NBD: Avoid leaking a couple of strings when the NBD device is closed
block/nbd.c | 4 ++++
hw/ide/atapi.c | 14 +++++++++-----
qemu-img.c | 13 +++++++++++--
qemu-progress.c | 7 ++++++-
4 files changed, 30 insertions(+), 8 deletions(-)
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Qemu-devel] [PULL 0/6] Block patches
2011-05-03 11:08 Kevin Wolf
@ 2011-05-03 12:44 ` Anthony Liguori
0 siblings, 0 replies; 18+ messages in thread
From: Anthony Liguori @ 2011-05-03 12:44 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-devel
On 05/03/2011 06:08 AM, Kevin Wolf wrote:
> The following changes since commit 57aa265d462a64a06268be26d49020729cff56c1:
>
> lm32: add Milkymist Minimac2 support (2011-05-03 10:48:40 +0200)
>
> are available in the git repository at:
> git://repo.or.cz/qemu/kevin.git for-anthony
Pulled. Thanks.
Regards,
Anthony Liguori
> Alon Levy (1):
> ide/atapi: fix set but unused
>
> Amit Shah (2):
> atapi: Move comment to proper place
> atapi: Explain why we need a 'media not present' state
>
> Jes Sorensen (1):
> qemu-progress.c: printf isn't signal safe
>
> Kevin Wolf (1):
> qemu-img resize: Fix option parsing
>
> Nick Thomas (1):
> NBD: Avoid leaking a couple of strings when the NBD device is closed
>
> block/nbd.c | 4 ++++
> hw/ide/atapi.c | 14 +++++++++-----
> qemu-img.c | 13 +++++++++++--
> qemu-progress.c | 7 ++++++-
> 4 files changed, 30 insertions(+), 8 deletions(-)
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Qemu-devel] [PULL 0/6] Block patches
@ 2013-01-14 10:01 Kevin Wolf
2013-01-14 10:01 ` [Qemu-devel] [PATCH 1/6] block: do not probe zero-sized disks Kevin Wolf
` (6 more replies)
0 siblings, 7 replies; 18+ messages in thread
From: Kevin Wolf @ 2013-01-14 10:01 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit 63fb2590839162afdf14d7c0ee02d460766c0956:
Merge branch 'target-arm.next' of git://git.linaro.org/people/pmaydell/qemu-arm (2013-01-12 12:47:07 +0000)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git for-anthony
Liu Yuan (1):
sheepdog: implement direct write semantics
Paolo Bonzini (2):
block: do not probe zero-sized disks
raw-posix: fix bdrv_aio_ioctl
Stefan Hajnoczi (3):
block: make qiov_is_aligned() public
dataplane: extract virtio-blk read/write processing into do_rdwr_cmd()
dataplane: handle misaligned virtio-blk requests
block.c | 18 +++++++++++-
block/raw-posix.c | 28 +----------------
block/sheepdog.c | 70 +++++++++++++++++++++++++-------------------
hw/dataplane/virtio-blk.c | 71 ++++++++++++++++++++++++++++++++++++++-------
include/block/block.h | 1 +
5 files changed, 120 insertions(+), 68 deletions(-)
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Qemu-devel] [PATCH 1/6] block: do not probe zero-sized disks
2013-01-14 10:01 [Qemu-devel] [PULL 0/6] Block patches Kevin Wolf
@ 2013-01-14 10:01 ` Kevin Wolf
2013-01-14 10:01 ` [Qemu-devel] [PATCH 2/6] sheepdog: implement direct write semantics Kevin Wolf
` (5 subsequent siblings)
6 siblings, 0 replies; 18+ messages in thread
From: Kevin Wolf @ 2013-01-14 10:01 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
From: Paolo Bonzini <pbonzini@redhat.com>
A blank CD or DVD is visible as a zero-sized disks. Probing such
disks will lead to an EIO and a failure to start the VM. Treating
them as raw is a better solution.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/block.c b/block.c
index 60873ea..14f8202 100644
--- a/block.c
+++ b/block.c
@@ -527,7 +527,7 @@ static int find_image_format(BlockDriverState *bs, const char *filename,
int ret = 0;
/* Return the raw BlockDriver * to scsi-generic devices or empty drives */
- if (bs->sg || !bdrv_is_inserted(bs)) {
+ if (bs->sg || !bdrv_is_inserted(bs) || bdrv_getlength(bs) == 0) {
drv = bdrv_find_format("raw");
if (!drv) {
ret = -ENOENT;
--
1.7.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Qemu-devel] [PATCH 2/6] sheepdog: implement direct write semantics
2013-01-14 10:01 [Qemu-devel] [PULL 0/6] Block patches Kevin Wolf
2013-01-14 10:01 ` [Qemu-devel] [PATCH 1/6] block: do not probe zero-sized disks Kevin Wolf
@ 2013-01-14 10:01 ` Kevin Wolf
2013-01-14 10:01 ` [Qemu-devel] [PATCH 3/6] raw-posix: fix bdrv_aio_ioctl Kevin Wolf
` (4 subsequent siblings)
6 siblings, 0 replies; 18+ messages in thread
From: Kevin Wolf @ 2013-01-14 10:01 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
From: Liu Yuan <tailai.ly@taobao.com>
Sheepdog supports both writeback/writethrough write but has not yet supported
DIRECTIO semantics which bypass the cache completely even if Sheepdog daemon is
set up with cache enabled.
Suppose cache is enabled on Sheepdog daemon size, the new cache control is
cache=writeback # enable the writeback semantics for write
cache=writethrough # enable the emulated writethrough semantics for write
cache=directsync # disable cache competely
Guest WCE toggling on the run time to toggle writeback/writethrough is also
supported.
Cc: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
Cc: Kevin Wolf <kwolf@redhat.com>
Cc: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Liu Yuan <tailai.ly@taobao.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/sheepdog.c | 70 ++++++++++++++++++++++++++++++-----------------------
1 files changed, 40 insertions(+), 30 deletions(-)
diff --git a/block/sheepdog.c b/block/sheepdog.c
index e821746..462c4b2 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -36,7 +36,8 @@
#define SD_FLAG_CMD_WRITE 0x01
#define SD_FLAG_CMD_COW 0x02
-#define SD_FLAG_CMD_CACHE 0x04
+#define SD_FLAG_CMD_CACHE 0x04 /* Writeback mode for cache */
+#define SD_FLAG_CMD_DIRECT 0x08 /* Don't use cache */
#define SD_RES_SUCCESS 0x00 /* Success */
#define SD_RES_UNKNOWN 0x01 /* Unknown error */
@@ -293,7 +294,7 @@ typedef struct BDRVSheepdogState {
char name[SD_MAX_VDI_LEN];
bool is_snapshot;
- bool cache_enabled;
+ uint32_t cache_flags;
char *addr;
char *port;
@@ -977,8 +978,8 @@ static int coroutine_fn add_aio_request(BDRVSheepdogState *s, AIOReq *aio_req,
hdr.flags = SD_FLAG_CMD_WRITE | flags;
}
- if (s->cache_enabled) {
- hdr.flags |= SD_FLAG_CMD_CACHE;
+ if (s->cache_flags) {
+ hdr.flags |= s->cache_flags;
}
hdr.oid = oid;
@@ -1023,7 +1024,7 @@ static int coroutine_fn add_aio_request(BDRVSheepdogState *s, AIOReq *aio_req,
static int read_write_object(int fd, char *buf, uint64_t oid, int copies,
unsigned int datalen, uint64_t offset,
- bool write, bool create, bool cache)
+ bool write, bool create, uint32_t cache_flags)
{
SheepdogObjReq hdr;
SheepdogObjRsp *rsp = (SheepdogObjRsp *)&hdr;
@@ -1047,9 +1048,7 @@ static int read_write_object(int fd, char *buf, uint64_t oid, int copies,
hdr.opcode = SD_OP_READ_OBJ;
}
- if (cache) {
- hdr.flags |= SD_FLAG_CMD_CACHE;
- }
+ hdr.flags |= cache_flags;
hdr.oid = oid;
hdr.data_length = datalen;
@@ -1072,18 +1071,19 @@ static int read_write_object(int fd, char *buf, uint64_t oid, int copies,
}
static int read_object(int fd, char *buf, uint64_t oid, int copies,
- unsigned int datalen, uint64_t offset, bool cache)
+ unsigned int datalen, uint64_t offset,
+ uint32_t cache_flags)
{
return read_write_object(fd, buf, oid, copies, datalen, offset, false,
- false, cache);
+ false, cache_flags);
}
static int write_object(int fd, char *buf, uint64_t oid, int copies,
unsigned int datalen, uint64_t offset, bool create,
- bool cache)
+ uint32_t cache_flags)
{
return read_write_object(fd, buf, oid, copies, datalen, offset, true,
- create, cache);
+ create, cache_flags);
}
static int sd_open(BlockDriverState *bs, const char *filename, int flags)
@@ -1118,12 +1118,22 @@ static int sd_open(BlockDriverState *bs, const char *filename, int flags)
goto out;
}
- s->cache_enabled = true;
- s->flush_fd = connect_to_sdog(s->addr, s->port);
- if (s->flush_fd < 0) {
- error_report("failed to connect");
- ret = s->flush_fd;
- goto out;
+ /*
+ * QEMU block layer emulates writethrough cache as 'writeback + flush', so
+ * we always set SD_FLAG_CMD_CACHE (writeback cache) as default.
+ */
+ s->cache_flags = SD_FLAG_CMD_CACHE;
+ if (flags & BDRV_O_NOCACHE) {
+ s->cache_flags = SD_FLAG_CMD_DIRECT;
+ }
+
+ if (s->cache_flags == SD_FLAG_CMD_CACHE) {
+ s->flush_fd = connect_to_sdog(s->addr, s->port);
+ if (s->flush_fd < 0) {
+ error_report("failed to connect");
+ ret = s->flush_fd;
+ goto out;
+ }
}
if (snapid || tag[0] != '\0') {
@@ -1140,7 +1150,7 @@ static int sd_open(BlockDriverState *bs, const char *filename, int flags)
buf = g_malloc(SD_INODE_SIZE);
ret = read_object(fd, buf, vid_to_vdi_oid(vid), 0, SD_INODE_SIZE, 0,
- s->cache_enabled);
+ s->cache_flags);
closesocket(fd);
@@ -1387,7 +1397,7 @@ static void sd_close(BlockDriverState *bs)
qemu_aio_set_fd_handler(s->fd, NULL, NULL, NULL, NULL);
closesocket(s->fd);
- if (s->cache_enabled) {
+ if (s->cache_flags) {
closesocket(s->flush_fd);
}
g_free(s->addr);
@@ -1423,7 +1433,7 @@ static int sd_truncate(BlockDriverState *bs, int64_t offset)
datalen = SD_INODE_SIZE - sizeof(s->inode.data_vdi_id);
s->inode.vdi_size = offset;
ret = write_object(fd, (char *)&s->inode, vid_to_vdi_oid(s->inode.vdi_id),
- s->inode.nr_copies, datalen, 0, false, s->cache_enabled);
+ s->inode.nr_copies, datalen, 0, false, s->cache_flags);
close(fd);
if (ret < 0) {
@@ -1506,7 +1516,7 @@ static int sd_create_branch(BDRVSheepdogState *s)
}
ret = read_object(fd, buf, vid_to_vdi_oid(vid), s->inode.nr_copies,
- SD_INODE_SIZE, 0, s->cache_enabled);
+ SD_INODE_SIZE, 0, s->cache_flags);
closesocket(fd);
@@ -1707,7 +1717,7 @@ static int coroutine_fn sd_co_flush_to_disk(BlockDriverState *bs)
int ret;
unsigned int wlen = 0, rlen = 0;
- if (!s->cache_enabled) {
+ if (s->cache_flags != SD_FLAG_CMD_CACHE) {
return 0;
}
@@ -1723,7 +1733,7 @@ static int coroutine_fn sd_co_flush_to_disk(BlockDriverState *bs)
if (rsp->result == SD_RES_INVALID_PARMS) {
dprintf("disable write cache since the server doesn't support it\n");
- s->cache_enabled = false;
+ s->cache_flags = SD_FLAG_CMD_DIRECT;
closesocket(s->flush_fd);
return 0;
}
@@ -1774,7 +1784,7 @@ static int sd_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info)
}
ret = write_object(fd, (char *)&s->inode, vid_to_vdi_oid(s->inode.vdi_id),
- s->inode.nr_copies, datalen, 0, false, s->cache_enabled);
+ s->inode.nr_copies, datalen, 0, false, s->cache_flags);
if (ret < 0) {
error_report("failed to write snapshot's inode.");
goto cleanup;
@@ -1791,7 +1801,7 @@ static int sd_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info)
inode = (SheepdogInode *)g_malloc(datalen);
ret = read_object(fd, (char *)inode, vid_to_vdi_oid(new_vid),
- s->inode.nr_copies, datalen, 0, s->cache_enabled);
+ s->inode.nr_copies, datalen, 0, s->cache_flags);
if (ret < 0) {
error_report("failed to read new inode info. %s", strerror(errno));
@@ -1845,7 +1855,7 @@ static int sd_snapshot_goto(BlockDriverState *bs, const char *snapshot_id)
buf = g_malloc(SD_INODE_SIZE);
ret = read_object(fd, buf, vid_to_vdi_oid(vid), s->inode.nr_copies,
- SD_INODE_SIZE, 0, s->cache_enabled);
+ SD_INODE_SIZE, 0, s->cache_flags);
closesocket(fd);
@@ -1942,7 +1952,7 @@ static int sd_snapshot_list(BlockDriverState *bs, QEMUSnapshotInfo **psn_tab)
/* we don't need to read entire object */
ret = read_object(fd, (char *)&inode, vid_to_vdi_oid(vid),
0, SD_INODE_SIZE - sizeof(inode.data_vdi_id), 0,
- s->cache_enabled);
+ s->cache_flags);
if (ret) {
continue;
@@ -2003,11 +2013,11 @@ static int do_load_save_vmstate(BDRVSheepdogState *s, uint8_t *data,
if (load) {
ret = read_object(fd, (char *)data, vmstate_oid,
s->inode.nr_copies, data_len, offset,
- s->cache_enabled);
+ s->cache_flags);
} else {
ret = write_object(fd, (char *)data, vmstate_oid,
s->inode.nr_copies, data_len, offset, create,
- s->cache_enabled);
+ s->cache_flags);
}
if (ret < 0) {
--
1.7.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Qemu-devel] [PATCH 3/6] raw-posix: fix bdrv_aio_ioctl
2013-01-14 10:01 [Qemu-devel] [PULL 0/6] Block patches Kevin Wolf
2013-01-14 10:01 ` [Qemu-devel] [PATCH 1/6] block: do not probe zero-sized disks Kevin Wolf
2013-01-14 10:01 ` [Qemu-devel] [PATCH 2/6] sheepdog: implement direct write semantics Kevin Wolf
@ 2013-01-14 10:01 ` Kevin Wolf
2013-01-14 10:01 ` [Qemu-devel] [PATCH 4/6] block: make qiov_is_aligned() public Kevin Wolf
` (3 subsequent siblings)
6 siblings, 0 replies; 18+ messages in thread
From: Kevin Wolf @ 2013-01-14 10:01 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
From: Paolo Bonzini <pbonzini@redhat.com>
When the raw-posix aio=thread code was moved from posix-aio-compat.c
to block/raw-posix.c, there was an unintended change to the ioctl code.
The code used to return the ioctl command, which posix_aio_read()
would later morph into a zero. This hack is not necessary anymore,
and in fact breaks scsi-generic (which expects a zero return code).
Remove it.
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/raw-posix.c | 10 +---------
1 files changed, 1 insertions(+), 9 deletions(-)
diff --git a/block/raw-posix.c b/block/raw-posix.c
index 87d888e..0e705ba 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -455,15 +455,7 @@ static ssize_t handle_aiocb_ioctl(RawPosixAIOData *aiocb)
return -errno;
}
- /*
- * This looks weird, but the aio code only considers a request
- * successful if it has written the full number of bytes.
- *
- * Now we overload aio_nbytes as aio_ioctl_cmd for the ioctl command,
- * so in fact we return the ioctl command here to make posix_aio_read()
- * happy..
- */
- return aiocb->aio_nbytes;
+ return 0;
}
static ssize_t handle_aiocb_flush(RawPosixAIOData *aiocb)
--
1.7.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Qemu-devel] [PATCH 4/6] block: make qiov_is_aligned() public
2013-01-14 10:01 [Qemu-devel] [PULL 0/6] Block patches Kevin Wolf
` (2 preceding siblings ...)
2013-01-14 10:01 ` [Qemu-devel] [PATCH 3/6] raw-posix: fix bdrv_aio_ioctl Kevin Wolf
@ 2013-01-14 10:01 ` Kevin Wolf
2013-01-14 10:02 ` [Qemu-devel] [PATCH 5/6] dataplane: extract virtio-blk read/write processing into do_rdwr_cmd() Kevin Wolf
` (2 subsequent siblings)
6 siblings, 0 replies; 18+ messages in thread
From: Kevin Wolf @ 2013-01-14 10:01 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
From: Stefan Hajnoczi <stefanha@redhat.com>
The qiov_is_aligned() function checks whether a QEMUIOVector meets a
BlockDriverState's alignment requirements. This is needed by
virtio-blk-data-plane so:
1. Move the function from block/raw-posix.c to block/block.c.
2. Make it public in block/block.h.
3. Rename to bdrv_qiov_is_aligned().
4. Change return type from int to bool.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block.c | 16 ++++++++++++++++
block/raw-posix.c | 18 +-----------------
include/block/block.h | 1 +
3 files changed, 18 insertions(+), 17 deletions(-)
diff --git a/block.c b/block.c
index 14f8202..b5e64ec 100644
--- a/block.c
+++ b/block.c
@@ -4313,6 +4313,22 @@ void *qemu_blockalign(BlockDriverState *bs, size_t size)
return qemu_memalign((bs && bs->buffer_alignment) ? bs->buffer_alignment : 512, size);
}
+/*
+ * Check if all memory in this vector is sector aligned.
+ */
+bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov)
+{
+ int i;
+
+ for (i = 0; i < qiov->niov; i++) {
+ if ((uintptr_t) qiov->iov[i].iov_base % bs->buffer_alignment) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
void bdrv_set_dirty_tracking(BlockDriverState *bs, int enable)
{
int64_t bitmap_size;
diff --git a/block/raw-posix.c b/block/raw-posix.c
index 0e705ba..c3d7fda 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -430,22 +430,6 @@ static void raw_reopen_abort(BDRVReopenState *state)
#endif
*/
-/*
- * Check if all memory in this vector is sector aligned.
- */
-static int qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov)
-{
- int i;
-
- for (i = 0; i < qiov->niov; i++) {
- if ((uintptr_t) qiov->iov[i].iov_base % bs->buffer_alignment) {
- return 0;
- }
- }
-
- return 1;
-}
-
static ssize_t handle_aiocb_ioctl(RawPosixAIOData *aiocb)
{
int ret;
@@ -714,7 +698,7 @@ static BlockDriverAIOCB *raw_aio_submit(BlockDriverState *bs,
* driver that it needs to copy the buffer.
*/
if ((bs->open_flags & BDRV_O_NOCACHE)) {
- if (!qiov_is_aligned(bs, qiov)) {
+ if (!bdrv_qiov_is_aligned(bs, qiov)) {
type |= QEMU_AIO_MISALIGNED;
#ifdef CONFIG_LINUX_AIO
} else if (s->use_aio) {
diff --git a/include/block/block.h b/include/block/block.h
index 0719339..ffd1936 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -349,6 +349,7 @@ void bdrv_img_create(const char *filename, const char *fmt,
void bdrv_set_buffer_alignment(BlockDriverState *bs, int align);
void *qemu_blockalign(BlockDriverState *bs, size_t size);
+bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov);
#define BDRV_SECTORS_PER_DIRTY_CHUNK 2048
--
1.7.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Qemu-devel] [PATCH 5/6] dataplane: extract virtio-blk read/write processing into do_rdwr_cmd()
2013-01-14 10:01 [Qemu-devel] [PULL 0/6] Block patches Kevin Wolf
` (3 preceding siblings ...)
2013-01-14 10:01 ` [Qemu-devel] [PATCH 4/6] block: make qiov_is_aligned() public Kevin Wolf
@ 2013-01-14 10:02 ` Kevin Wolf
2013-01-14 10:02 ` [Qemu-devel] [PATCH 6/6] dataplane: handle misaligned virtio-blk requests Kevin Wolf
2013-01-20 14:47 ` [Qemu-devel] [PULL 0/6] Block patches Anthony Liguori
6 siblings, 0 replies; 18+ messages in thread
From: Kevin Wolf @ 2013-01-14 10:02 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
From: Stefan Hajnoczi <stefanha@redhat.com>
Extract code for read/write command processing into do_rdwr_cmd(). This
brings together pieces that are spread across process_request().
The real motivation is to set the stage for handling misaligned
requests, which the next patch tackles.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
hw/dataplane/virtio-blk.c | 31 ++++++++++++++++++++-----------
1 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/hw/dataplane/virtio-blk.c b/hw/dataplane/virtio-blk.c
index 4c4ad84..a6696b8 100644
--- a/hw/dataplane/virtio-blk.c
+++ b/hw/dataplane/virtio-blk.c
@@ -130,6 +130,22 @@ static void do_get_id_cmd(VirtIOBlockDataPlane *s,
complete_request_early(s, head, inhdr, VIRTIO_BLK_S_OK);
}
+static int do_rdwr_cmd(VirtIOBlockDataPlane *s, bool read,
+ struct iovec *iov, unsigned int iov_cnt,
+ long long offset, unsigned int head,
+ QEMUIOVector *inhdr)
+{
+ struct iocb *iocb;
+
+ iocb = ioq_rdwr(&s->ioqueue, read, iov, iov_cnt, offset);
+
+ /* Fill in virtio block metadata needed for completion */
+ VirtIOBlockRequest *req = container_of(iocb, VirtIOBlockRequest, iocb);
+ req->head = head;
+ req->inhdr = inhdr;
+ return 0;
+}
+
static int process_request(IOQueue *ioq, struct iovec iov[],
unsigned int out_num, unsigned int in_num,
unsigned int head)
@@ -139,7 +155,6 @@ static int process_request(IOQueue *ioq, struct iovec iov[],
struct virtio_blk_outhdr outhdr;
QEMUIOVector *inhdr;
size_t in_size;
- struct iocb *iocb;
/* Copy in outhdr */
if (unlikely(iov_to_buf(iov, out_num, 0, &outhdr,
@@ -167,12 +182,12 @@ static int process_request(IOQueue *ioq, struct iovec iov[],
switch (outhdr.type) {
case VIRTIO_BLK_T_IN:
- iocb = ioq_rdwr(ioq, true, in_iov, in_num, outhdr.sector * 512);
- break;
+ do_rdwr_cmd(s, true, in_iov, in_num, outhdr.sector * 512, head, inhdr);
+ return 0;
case VIRTIO_BLK_T_OUT:
- iocb = ioq_rdwr(ioq, false, iov, out_num, outhdr.sector * 512);
- break;
+ do_rdwr_cmd(s, false, iov, out_num, outhdr.sector * 512, head, inhdr);
+ return 0;
case VIRTIO_BLK_T_SCSI_CMD:
/* TODO support SCSI commands */
@@ -198,12 +213,6 @@ static int process_request(IOQueue *ioq, struct iovec iov[],
g_slice_free(QEMUIOVector, inhdr);
return -EFAULT;
}
-
- /* Fill in virtio block metadata needed for completion */
- VirtIOBlockRequest *req = container_of(iocb, VirtIOBlockRequest, iocb);
- req->head = head;
- req->inhdr = inhdr;
- return 0;
}
static void handle_notify(EventHandler *handler)
--
1.7.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Qemu-devel] [PATCH 6/6] dataplane: handle misaligned virtio-blk requests
2013-01-14 10:01 [Qemu-devel] [PULL 0/6] Block patches Kevin Wolf
` (4 preceding siblings ...)
2013-01-14 10:02 ` [Qemu-devel] [PATCH 5/6] dataplane: extract virtio-blk read/write processing into do_rdwr_cmd() Kevin Wolf
@ 2013-01-14 10:02 ` Kevin Wolf
2013-01-20 14:47 ` [Qemu-devel] [PULL 0/6] Block patches Anthony Liguori
6 siblings, 0 replies; 18+ messages in thread
From: Kevin Wolf @ 2013-01-14 10:02 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
From: Stefan Hajnoczi <stefanha@redhat.com>
O_DIRECT on Linux has alignment requirements on I/O buffers and
misaligned requests result in -EINVAL. The Linux virtio_blk guest
driver usually submits aligned requests so I forgot to handle misaligned
requests.
It turns out that virtio-win guest drivers submit misaligned requests.
Handle them using a bounce buffer that meets alignment requirements.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
hw/dataplane/virtio-blk.c | 40 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 40 insertions(+), 0 deletions(-)
diff --git a/hw/dataplane/virtio-blk.c b/hw/dataplane/virtio-blk.c
index a6696b8..1f7346e 100644
--- a/hw/dataplane/virtio-blk.c
+++ b/hw/dataplane/virtio-blk.c
@@ -34,6 +34,8 @@ typedef struct {
struct iocb iocb; /* Linux AIO control block */
QEMUIOVector *inhdr; /* iovecs for virtio_blk_inhdr */
unsigned int head; /* vring descriptor index */
+ struct iovec *bounce_iov; /* used if guest buffers are unaligned */
+ QEMUIOVector *read_qiov; /* for read completion /w bounce buffer */
} VirtIOBlockRequest;
struct VirtIOBlockDataPlane {
@@ -89,6 +91,18 @@ static void complete_request(struct iocb *iocb, ssize_t ret, void *opaque)
trace_virtio_blk_data_plane_complete_request(s, req->head, ret);
+ if (req->read_qiov) {
+ assert(req->bounce_iov);
+ qemu_iovec_from_buf(req->read_qiov, 0, req->bounce_iov->iov_base, len);
+ qemu_iovec_destroy(req->read_qiov);
+ g_slice_free(QEMUIOVector, req->read_qiov);
+ }
+
+ if (req->bounce_iov) {
+ qemu_vfree(req->bounce_iov->iov_base);
+ g_slice_free(struct iovec, req->bounce_iov);
+ }
+
qemu_iovec_from_buf(req->inhdr, 0, &hdr, sizeof(hdr));
qemu_iovec_destroy(req->inhdr);
g_slice_free(QEMUIOVector, req->inhdr);
@@ -136,6 +150,30 @@ static int do_rdwr_cmd(VirtIOBlockDataPlane *s, bool read,
QEMUIOVector *inhdr)
{
struct iocb *iocb;
+ QEMUIOVector qiov;
+ struct iovec *bounce_iov = NULL;
+ QEMUIOVector *read_qiov = NULL;
+
+ qemu_iovec_init_external(&qiov, iov, iov_cnt);
+ if (!bdrv_qiov_is_aligned(s->blk->conf.bs, &qiov)) {
+ void *bounce_buffer = qemu_blockalign(s->blk->conf.bs, qiov.size);
+
+ if (read) {
+ /* Need to copy back from bounce buffer on completion */
+ read_qiov = g_slice_new(QEMUIOVector);
+ qemu_iovec_init(read_qiov, iov_cnt);
+ qemu_iovec_concat_iov(read_qiov, iov, iov_cnt, 0, qiov.size);
+ } else {
+ qemu_iovec_to_buf(&qiov, 0, bounce_buffer, qiov.size);
+ }
+
+ /* Redirect I/O to aligned bounce buffer */
+ bounce_iov = g_slice_new(struct iovec);
+ bounce_iov->iov_base = bounce_buffer;
+ bounce_iov->iov_len = qiov.size;
+ iov = bounce_iov;
+ iov_cnt = 1;
+ }
iocb = ioq_rdwr(&s->ioqueue, read, iov, iov_cnt, offset);
@@ -143,6 +181,8 @@ static int do_rdwr_cmd(VirtIOBlockDataPlane *s, bool read,
VirtIOBlockRequest *req = container_of(iocb, VirtIOBlockRequest, iocb);
req->head = head;
req->inhdr = inhdr;
+ req->bounce_iov = bounce_iov;
+ req->read_qiov = read_qiov;
return 0;
}
--
1.7.6.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [Qemu-devel] [PULL 0/6] Block patches
2013-01-14 10:01 [Qemu-devel] [PULL 0/6] Block patches Kevin Wolf
` (5 preceding siblings ...)
2013-01-14 10:02 ` [Qemu-devel] [PATCH 6/6] dataplane: handle misaligned virtio-blk requests Kevin Wolf
@ 2013-01-20 14:47 ` Anthony Liguori
6 siblings, 0 replies; 18+ messages in thread
From: Anthony Liguori @ 2013-01-20 14:47 UTC (permalink / raw)
To: Kevin Wolf, anthony; +Cc: qemu-devel
Pulled. Thanks.
Regards,
Anthony Liguori
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Qemu-devel] [PULL 0/6] Block patches
@ 2013-12-13 17:48 Kevin Wolf
0 siblings, 0 replies; 18+ messages in thread
From: Kevin Wolf @ 2013-12-13 17:48 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit 47acdd63a33a5966bf4fc94a6ac835d72a70c555:
target-microblaze: Use the new qemu_ld/st opcodes (2013-12-13 10:00:42 +1000)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git tags/for-anthony
for you to fetch changes up to c547e5640d5b0993cdfb252331065c1a1d813bd8:
blkdebug: Use QLIST_FOREACH_SAFE to resume IO (2013-12-13 17:11:19 +0100)
----------------------------------------------------------------
Block patches
----------------------------------------------------------------
Fam Zheng (1):
blkdebug: Use QLIST_FOREACH_SAFE to resume IO
Kevin Wolf (1):
qapi-schema.json: Change 1.8 reference to 2.0
Liu Yuan (1):
sheepdog: check if '-o redundancy' is passed from user
Peter Lieven (2):
block: expect get_block_status errors in bdrv_make_zero
qemu-img: make progress output more accurate during convert
Stefan Weil (1):
block/vvfat: Fix compiler warnings for OpenBSD
block.c | 5 +++++
block/blkdebug.c | 8 ++++----
block/sheepdog.c | 8 +++++---
block/vvfat.c | 43 ++++++++++++++++++++++---------------------
qapi-schema.json | 2 +-
qemu-img.c | 26 +++++++++++++++++++++-----
6 files changed, 58 insertions(+), 34 deletions(-)
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Qemu-devel] [PULL 0/6] Block patches
@ 2014-06-23 9:31 Stefan Hajnoczi
2014-06-23 12:18 ` Peter Maydell
0 siblings, 1 reply; 18+ messages in thread
From: Stefan Hajnoczi @ 2014-06-23 9:31 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Stefan Hajnoczi
The following changes since commit 427e1750a0b98a72cad424327604f51e993dcc5f:
gt64xxx_pci: Add VMStateDescription (2014-06-20 23:40:16 +0200)
are available in the git repository at:
git://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 2bd3bce8efebe86b031beab5c0e3b9bbaec0b502:
block: asynchronously stop the VM on I/O errors (2014-06-23 16:36:13 +0800)
----------------------------------------------------------------
Block pull request
----------------------------------------------------------------
Chunyan Liu (1):
QemuOpts: check NULL opts in qemu_opt_get functions
Liu Yuan (1):
sheepdog: fix NULL dereference in sd_create
Paolo Bonzini (2):
vl: allow other threads to do qemu_system_vmstop_request
block: asynchronously stop the VM on I/O errors
Peter Crosthwaite (2):
block: m25p80: sync_page(): Deindent function body.
block: m25p80: Support read only bdrvs.
block.c | 21 ++++++++++--
block/sheepdog.c | 1 +
cpus.c | 1 +
docs/qmp/qmp-events.txt | 2 +-
hw/block/m25p80.c | 30 ++++++++---------
include/sysemu/sysemu.h | 1 +
stubs/vm-stop.c | 7 +++-
target-lm32/op_helper.c | 2 +-
util/qemu-option.c | 28 +++++++++++++---
vl.c | 85 +++++++++++++++++++++++++++++++------------------
10 files changed, 122 insertions(+), 56 deletions(-)
--
1.9.3
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Qemu-devel] [PULL 0/6] Block patches
2014-06-23 9:31 Stefan Hajnoczi
@ 2014-06-23 12:18 ` Peter Maydell
0 siblings, 0 replies; 18+ messages in thread
From: Peter Maydell @ 2014-06-23 12:18 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: QEMU Developers
On 23 June 2014 10:31, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit 427e1750a0b98a72cad424327604f51e993dcc5f:
>
> gt64xxx_pci: Add VMStateDescription (2014-06-20 23:40:16 +0200)
>
> are available in the git repository at:
>
> git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 2bd3bce8efebe86b031beab5c0e3b9bbaec0b502:
>
> block: asynchronously stop the VM on I/O errors (2014-06-23 16:36:13 +0800)
>
> ----------------------------------------------------------------
> Block pull request
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Qemu-devel] [PULL 0/6] Block patches
@ 2018-03-05 9:40 Stefan Hajnoczi
2018-03-05 9:52 ` no-reply
2018-03-05 18:55 ` Peter Maydell
0 siblings, 2 replies; 18+ messages in thread
From: Stefan Hajnoczi @ 2018-03-05 9:40 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-block, Peter Maydell, Stefan Hajnoczi
The following changes since commit 136c67e07869227b21b3f627316e03679ce7b738:
Merge remote-tracking branch 'remotes/bkoppelmann/tags/pull-tricore-2018-03-02' into staging (2018-03-02 16:56:20 +0000)
are available in the Git repository at:
git://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 23500c6a9409efc80d696aede0629bfbe7556a90:
README: Document 'git-publish' workflow (2018-03-05 09:03:17 +0000)
----------------------------------------------------------------
Pull request
Mostly patches that are only indirectly related to the block layer, but I've
reviewed them and there is no maintainer.
----------------------------------------------------------------
Fam Zheng (2):
Add a git-publish configuration file
README: Document 'git-publish' workflow
Su Hang (3):
util/uri.c: Coding style check, Only whitespace involved
util/uri.c: remove brackets that wrap `return` statement's content.
util/uri.c: wrap single statement blocks with braces {}
Thomas Huth (1):
tests/libqos: Check for valid dev pointer when looking for PCI devices
tests/libqos/virtio-pci.c | 4 +-
util/uri.c | 1733 ++++++++++++++++++++++++---------------------
.gitpublish | 51 ++
README | 31 +-
4 files changed, 1014 insertions(+), 805 deletions(-)
create mode 100644 .gitpublish
--
2.14.3
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Qemu-devel] [PULL 0/6] Block patches
2018-03-05 9:40 Stefan Hajnoczi
@ 2018-03-05 9:52 ` no-reply
2018-03-05 18:55 ` Peter Maydell
1 sibling, 0 replies; 18+ messages in thread
From: no-reply @ 2018-03-05 9:52 UTC (permalink / raw)
To: stefanha; +Cc: famz, qemu-devel, peter.maydell, qemu-block
Hi,
This series seems to have some coding style problems. See output below for
more information:
Type: series
Message-id: 20180305094006.21446-1-stefanha@redhat.com
Subject: [Qemu-devel] [PULL 0/6] Block patches
=== TEST SCRIPT BEGIN ===
#!/bin/bash
BASE=base
n=1
total=$(git log --oneline $BASE.. | wc -l)
failed=0
git config --local diff.renamelimit 0
git config --local diff.renames True
git config --local diff.algorithm histogram
commits="$(git log --format=%H --reverse $BASE..)"
for c in $commits; do
echo "Checking PATCH $n/$total: $(git log -n 1 --format=%s $c)..."
if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then
failed=1
echo
fi
n=$((n+1))
done
exit $failed
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
136c67e078..4f51e1d386 master -> master
* [new tag] patchew/1520243276-30197-1-git-send-email-thuth@redhat.com -> patchew/1520243276-30197-1-git-send-email-thuth@redhat.com
* [new tag] patchew/20180305094006.21446-1-stefanha@redhat.com -> patchew/20180305094006.21446-1-stefanha@redhat.com
Switched to a new branch 'test'
20eeab9795 README: Document 'git-publish' workflow
333283c56b Add a git-publish configuration file
3a9752c776 tests/libqos: Check for valid dev pointer when looking for PCI devices
6863406cb9 util/uri.c: wrap single statement blocks with braces {}
906ebc14e5 util/uri.c: remove brackets that wrap `return` statement's content.
d0e12d0916 util/uri.c: Coding style check, Only whitespace involved
=== OUTPUT BEGIN ===
Checking PATCH 1/6: util/uri.c: Coding style check, Only whitespace involved...
ERROR: return is not a function, parentheses are not required
#171: FILE: util/uri.c:215:
+ return (-1);
ERROR: return is not a function, parentheses are not required
#176: FILE: util/uri.c:219:
+ return (2);
ERROR: return is not a function, parentheses are not required
#190: FILE: util/uri.c:229:
+ return (0);
ERROR: braces {} are necessary for all arms of this statement
#212: FILE: util/uri.c:262:
+ if (uri->cleanup & 2)
[...]
+ else
[...]
ERROR: braces {} are necessary for all arms of this statement
#276: FILE: util/uri.c:359:
+ if (uri->cleanup & 2)
[...]
+ else
[...]
ERROR: return is not a function, parentheses are not required
#282: FILE: util/uri.c:365:
+ return (0);
ERROR: return is not a function, parentheses are not required
#285: FILE: util/uri.c:367:
+ return (1);
ERROR: return is not a function, parentheses are not required
#305: FILE: util/uri.c:389:
+ return (1);
ERROR: braces {} are necessary for all arms of this statement
#306: FILE: util/uri.c:390:
+ if (!ISA_DIGIT(cur + 1))
[...]
+ else if ((*cur != '0') && (ISA_DIGIT(cur + 1)) && (!ISA_DIGIT(cur + 2)))
[...]
else if ((*cur == '1') && (ISA_DIGIT(cur + 1)) && (ISA_DIGIT(cur + 2)))
[...]
- else if ((*cur == '2') && (*(cur + 1) >= '0') &&
[...]
- else if ((*cur == '2') && (*(cur + 1) == '5') &&
[...]
+ cur += 3;
[...]
ERROR: braces {} are necessary for all arms of this statement
#308: FILE: util/uri.c:392:
+ else if ((*cur != '0') && (ISA_DIGIT(cur + 1)) && (!ISA_DIGIT(cur + 2)))
[...]
else if ((*cur == '1') && (ISA_DIGIT(cur + 1)) && (ISA_DIGIT(cur + 2)))
[...]
- else if ((*cur == '2') && (*(cur + 1) >= '0') &&
[...]
- else if ((*cur == '2') && (*(cur + 1) == '5') &&
[...]
+ cur += 3;
[...]
ERROR: braces {} are necessary for all arms of this statement
#319: FILE: util/uri.c:396:
+ else if ((*cur == '2') && (*(cur + 1) >= '0') && (*(cur + 1) <= '4') &&
[...]
+ else if ((*cur == '2') && (*(cur + 1) == '5') && (*(cur + 2) >= '0') &&
[...]
else
[...]
ERROR: braces {} are necessary for all arms of this statement
#322: FILE: util/uri.c:399:
+ else if ((*cur == '2') && (*(cur + 1) == '5') && (*(cur + 2) >= '0') &&
[...]
else
[...]
ERROR: return is not a function, parentheses are not required
#327: FILE: util/uri.c:403:
+ return (1);
ERROR: return is not a function, parentheses are not required
#330: FILE: util/uri.c:405:
+ return (0);
ERROR: braces {} are necessary even for single statement blocks
#354: FILE: util/uri.c:433:
+ while ((*cur != ']') && (*cur != 0))
+ cur++;
ERROR: braces {} are necessary for all arms of this statement
#356: FILE: util/uri.c:435:
+ if (*cur != ']')
[...]
ERROR: return is not a function, parentheses are not required
#357: FILE: util/uri.c:436:
+ return (1);
ERROR: braces {} are necessary for all arms of this statement
#371: FILE: util/uri.c:446:
+ if (*cur != '.')
[...]
ERROR: braces {} are necessary for all arms of this statement
#379: FILE: util/uri.c:451:
+ if (*cur != '.')
[...]
ERROR: braces {} are necessary for all arms of this statement
#386: FILE: util/uri.c:455:
+ if (*cur != '.')
[...]
ERROR: braces {} are necessary for all arms of this statement
#412: FILE: util/uri.c:473:
+ if (cur != host) {
[...]
+ } else
[...]
ERROR: braces {} are necessary for all arms of this statement
#413: FILE: util/uri.c:474:
+ if (uri->cleanup & 2)
[...]
+ else
[...]
ERROR: return is not a function, parentheses are not required
#422: FILE: util/uri.c:482:
+ return (0);
ERROR: braces {} are necessary for all arms of this statement
#441: FILE: util/uri.c:512:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#442: FILE: util/uri.c:513:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#447: FILE: util/uri.c:517:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#448: FILE: util/uri.c:518:
+ return (ret);
ERROR: return is not a function, parentheses are not required
#452: FILE: util/uri.c:521:
+ return (0);
ERROR: return is not a function, parentheses are not required
#471: FILE: util/uri.c:547:
+ return (0);
ERROR: return is not a function, parentheses are not required
#472: FILE: util/uri.c:548:
+ return (1);
ERROR: return is not a function, parentheses are not required
#494: FILE: util/uri.c:579:
+ return (ret);
ERROR: return is not a function, parentheses are not required
#513: FILE: util/uri.c:616:
+ return (1);
ERROR: return is not a function, parentheses are not required
#526: FILE: util/uri.c:624:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#546: FILE: util/uri.c:662:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#547: FILE: util/uri.c:663:
+ return (ret);
ERROR: return is not a function, parentheses are not required
#554: FILE: util/uri.c:668:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#573: FILE: util/uri.c:705:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#574: FILE: util/uri.c:706:
+ return (ret);
ERROR: return is not a function, parentheses are not required
#581: FILE: util/uri.c:711:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#606: FILE: util/uri.c:753:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#607: FILE: util/uri.c:754:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#609: FILE: util/uri.c:756:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#610: FILE: util/uri.c:757:
+ return (ret);
ERROR: return is not a function, parentheses are not required
#612: FILE: util/uri.c:759:
+ return (0);
ERROR: braces {} are necessary for all arms of this statement
#616: FILE: util/uri.c:762:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#617: FILE: util/uri.c:763:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#621: FILE: util/uri.c:766:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#622: FILE: util/uri.c:767:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#653: FILE: util/uri.c:802:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#654: FILE: util/uri.c:803:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#656: FILE: util/uri.c:805:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#657: FILE: util/uri.c:806:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#662: FILE: util/uri.c:809:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#663: FILE: util/uri.c:810:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#667: FILE: util/uri.c:813:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#668: FILE: util/uri.c:814:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#687: FILE: util/uri.c:826:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#688: FILE: util/uri.c:827:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#696: FILE: util/uri.c:832:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#697: FILE: util/uri.c:833:
+ return (ret);
ERROR: return is not a function, parentheses are not required
#703: FILE: util/uri.c:837:
+ return (1);
ERROR: return is not a function, parentheses are not required
#706: FILE: util/uri.c:839:
+ return (0);
ERROR: braces {} are necessary for all arms of this statement
#725: FILE: util/uri.c:859:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#726: FILE: util/uri.c:860:
+ return (ret);
ERROR: return is not a function, parentheses are not required
#729: FILE: util/uri.c:862:
+ return (1);
ERROR: braces {} are necessary for all arms of this statement
#734: FILE: util/uri.c:866:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#735: FILE: util/uri.c:867:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#742: FILE: util/uri.c:871:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#743: FILE: util/uri.c:872:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#751: FILE: util/uri.c:877:
+ if (ret != 0)
[...]
ERROR: return is not a function, parentheses are not required
#752: FILE: util/uri.c:878:
+ return (ret);
ERROR: return is not a function, parentheses are not required
#758: FILE: util/uri.c:882:
+ return (1);
ERROR: return is not a function, parentheses are not required
#761: FILE: util/uri.c:884:
+ return (0);
ERROR: return is not a function, parentheses are not required
#777: FILE: util/uri.c:904:
+ return (-1);
ERROR: return is not a function, parentheses are not required
#794: FILE: util/uri.c:917:
+ return (ret);
ERROR: return is not a function, parentheses are not required
#798: FILE: util/uri.c:920:
+ return (0);
ERROR: return is not a function, parentheses are not required
#815: FILE: util/uri.c:939:
+ return (NULL);
ERROR: return is not a function, parentheses are not required
#821: FILE: util/uri.c:944:
+ return (NULL);
ERROR: return is not a function, parentheses are not required
#824: FILE: util/uri.c:946:
+ return (uri);
ERROR: return is not a function, parentheses are not required
#837: FILE: util/uri.c:963:
+ return (rfc3986_parse_uri_reference(uri, str));
ERROR: return is not a function, parentheses are not required
#854: FILE: util/uri.c:983:
+ return (NULL);
ERROR: return is not a function, parentheses are not required
#863: FILE: util/uri.c:991:
+ return (NULL);
ERROR: return is not a function, parentheses are not required
#866: FILE: util/uri.c:993:
+ return (uri);
ERROR: return is not a function, parentheses are not required
#891: FILE: util/uri.c:1014:
+ return (ret);
ERROR: return is not a function, parentheses are not required
#910: FILE: util/uri.c:1031:
+ return (temp);
ERROR: braces {} are necessary for all arms of this statement
#930: FILE: util/uri.c:1050:
+ if (uri == NULL)
[...]
ERROR: return is not a function, parentheses are not required
#931: FILE: util/uri.c:1051:
+ return (NULL);
ERROR: braces {} are necessary for all arms of this statement
#983: FILE: util/uri.c:1079:
+ if (IS_RESERVED(*(p)) || IS_UNRESERVED(*(p)))
[...]
+ else {
[...]
ERROR: braces {} are necessary for all arms of this statement
#1033: FILE: util/uri.c:1104:
+ if ((IS_UNRESERVED(*(p))) || ((*(p) == ';')) ||
[...]
+ else {
[...]
ERROR: braces {} are necessary for all arms of this statement
#1117: FILE: util/uri.c:1150:
+ if ((IS_UNRESERVED(*(p))) || ((*(p) == '$')) ||
[...]
+ else {
[...]
ERROR: braces {} are necessary for all arms of this statement
#1187: FILE: util/uri.c:1194:
+ if ((IS_UNRESERVED(*(p))) || ((*(p) == '/')) ||
[...]
- else {
[...]
ERROR: braces {} are necessary for all arms of this statement
#1269: FILE: util/uri.c:1236:
+ if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p))))
[...]
+ else {
[...]
ERROR: return is not a function, parentheses are not required
#1286: FILE: util/uri.c:1252:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#1299: FILE: util/uri.c:1263:
+ if (uri == NULL)
[...]
ERROR: return is not a function, parentheses are not required
#1338: FILE: util/uri.c:1318:
+ return (-1);
ERROR: return is not a function, parentheses are not required
#1349: FILE: util/uri.c:1327:
+ return (0);
ERROR: braces {} are necessary even for single statement blocks
#1375: FILE: util/uri.c:1343:
+ while (cur[0] == '/')
+ cur++;
ERROR: braces {} are necessary for all arms of this statement
#1390: FILE: util/uri.c:1352:
+ if ((cur[0] == '.') && (cur[1] == '\0'))
[...]
ERROR: braces {} are necessary even for single statement blocks
#1408: FILE: util/uri.c:1362:
+ while ((cur[0] == '/') && (cur[1] == '/'))
+ cur++;
ERROR: return is not a function, parentheses are not required
#1424: FILE: util/uri.c:1375:
+ return (0);
ERROR: braces {} are necessary even for single statement blocks
#1517: FILE: util/uri.c:1482:
+ while (cur[0] != '\0')
+ (out++)[0] = (cur++)[0];
ERROR: return is not a function, parentheses are not required
#1524: FILE: util/uri.c:1488:
+ return (0);
ERROR: braces {} are necessary for all arms of this statement
#1532: FILE: util/uri.c:1493:
+ if (((c >= '0') && (c <= '9')) || ((c >= 'a') && (c <= 'f')) ||
[...]
ERROR: return is not a function, parentheses are not required
#1536: FILE: util/uri.c:1495:
+ return (1);
ERROR: return is not a function, parentheses are not required
#1537: FILE: util/uri.c:1496:
+ return (0);
ERROR: return is not a function, parentheses are not required
#1559: FILE: util/uri.c:1519:
+ return (NULL);
ERROR: braces {} are necessary for all arms of this statement
#1560: FILE: util/uri.c:1520:
+ if (len <= 0)
[...]
ERROR: braces {} are necessary for all arms of this statement
#1562: FILE: util/uri.c:1522:
+ if (len < 0)
[...]
ERROR: return is not a function, parentheses are not required
#1563: FILE: util/uri.c:1523:
+ return (NULL);
ERROR: braces {} are necessary for all arms of this statement
#1599: FILE: util/uri.c:1534:
+ if ((*in >= '0') && (*in <= '9'))
[...]
+ else if ((*in >= 'a') && (*in <= 'f'))
[...]
+ else if ((*in >= 'A') && (*in <= 'F'))
[...]
ERROR: braces {} are necessary for all arms of this statement
#1601: FILE: util/uri.c:1536:
+ else if ((*in >= 'a') && (*in <= 'f'))
[...]
+ else if ((*in >= 'A') && (*in <= 'F'))
[...]
ERROR: braces {} are necessary for all arms of this statement
#1603: FILE: util/uri.c:1538:
+ else if ((*in >= 'A') && (*in <= 'F'))
[...]
ERROR: braces {} are necessary for all arms of this statement
#1606: FILE: util/uri.c:1541:
+ if ((*in >= '0') && (*in <= '9'))
[...]
+ else if ((*in >= 'a') && (*in <= 'f'))
[...]
+ else if ((*in >= 'A') && (*in <= 'F'))
[...]
ERROR: braces {} are necessary for all arms of this statement
#1608: FILE: util/uri.c:1543:
+ else if ((*in >= 'a') && (*in <= 'f'))
[...]
+ else if ((*in >= 'A') && (*in <= 'F'))
[...]
ERROR: braces {} are necessary for all arms of this statement
#1610: FILE: util/uri.c:1545:
+ else if ((*in >= 'A') && (*in <= 'F'))
[...]
ERROR: return is not a function, parentheses are not required
#1622: FILE: util/uri.c:1556:
+ return (ret);
ERROR: return is not a function, parentheses are not required
#1641: FILE: util/uri.c:1577:
+ return (NULL);
ERROR: return is not a function, parentheses are not required
#1644: FILE: util/uri.c:1579:
+ return (g_strdup(str));
ERROR: braces {} are necessary for all arms of this statement
#1647: FILE: util/uri.c:1581:
+ if (!(len > 0))
[...]
ERROR: return is not a function, parentheses are not required
#1648: FILE: util/uri.c:1582:
+ return (NULL);
ERROR: braces {} are necessary for all arms of this statement
#1689: FILE: util/uri.c:1600:
+ if (val <= 9)
[...]
+ else
[...]
ERROR: braces {} are necessary for all arms of this statement
#1694: FILE: util/uri.c:1605:
+ if (val <= 9)
[...]
+ else
[...]
ERROR: return is not a function, parentheses are not required
#1705: FILE: util/uri.c:1615:
+ return (ret);
ERROR: braces {} are necessary for all arms of this statement
#1742: FILE: util/uri.c:1658:
+ if (*uri) {
[...]
+ } else
[...]
ERROR: braces {} are necessary for all arms of this statement
#1776: FILE: util/uri.c:1680:
+ if (ref)
[...]
ERROR: braces {} are necessary for all arms of this statement
#1806: FILE: util/uri.c:1710:
+ if (bas->authority != NULL)
[...]
+ else if (bas->server != NULL) {
[...]
ERROR: braces {} are necessary for all arms of this statement
#1846: FILE: util/uri.c:1750:
+ if (ref->authority != NULL)
[...]
+ else {
[...]
ERROR: braces {} are necessary even for single statement blocks
#1905: FILE: util/uri.c:1802:
+ while ((bas->path[cur] != 0) && (bas->path[cur] != '/'))
+ cur++;
ERROR: braces {} are necessary for all arms of this statement
#1907: FILE: util/uri.c:1804:
+ if (bas->path[cur] == 0)
[...]
ERROR: braces {} are necessary for all arms of this statement
#1942: FILE: util/uri.c:1825:
+ if ((out == 0) && (bas->server != NULL))
[...]
ERROR: return is not a function, parentheses are not required
#1963: FILE: util/uri.c:1854:
+ return (val);
ERROR: braces {} are necessary for all arms of this statement
#1995: FILE: util/uri.c:1912:
+ if (ret != 0)
[...]
ERROR: braces {} are necessary for all arms of this statement
#2017: FILE: util/uri.c:1927:
+ if (ret != 0)
[...]
ERROR: braces {} are necessary for all arms of this statement
#2073: FILE: util/uri.c:1965:
+ if (*uptr == '/')
[...]
ERROR: braces {} are necessary for all arms of this statement
#2089: FILE: util/uri.c:1975:
+ if (bptr[ix] == '/')
[...]
ERROR: braces {} are necessary for all arms of this statement
#2102: FILE: util/uri.c:1984:
+ if ((ref->path[pos] == '.') && (ref->path[pos + 1] == '/'))
[...]
ERROR: braces {} are necessary for all arms of this statement
#2105: FILE: util/uri.c:1986:
+ if ((*bptr == '.') && (bptr[1] == '/'))
[...]
- else if ((*bptr == '/') && (ref->path[pos] != '/'))
[...]
ERROR: braces {} are necessary for all arms of this statement
#2111: FILE: util/uri.c:1988:
+ else if ((*bptr == '/') && (ref->path[pos] != '/'))
[...]
ERROR: braces {} are necessary even for single statement blocks
#2113: FILE: util/uri.c:1990:
+ while ((bptr[pos] == ref->path[pos]) && (bptr[pos] != 0))
+ pos++;
ERROR: braces {} are necessary for all arms of this statement
#2149: FILE: util/uri.c:2003:
+ if ((ref->path[ix] == '/') && (ix > 0))
[...]
+ else if ((ref->path[ix] == 0) && (ix > 1) && (ref->path[ix - 1] == '/'))
[...]
ERROR: braces {} are necessary for all arms of this statement
#2151: FILE: util/uri.c:2005:
+ else if ((ref->path[ix] == 0) && (ix > 1) && (ref->path[ix - 1] == '/'))
[...]
ERROR: braces {} are necessary for all arms of this statement
#2154: FILE: util/uri.c:2008:
+ if (ref->path[ix] == '/')
[...]
ERROR: braces {} are necessary for all arms of this statement
#2179: FILE: util/uri.c:2023:
+ if (bptr[ix] == '/')
[...]
ERROR: braces {} are necessary for all arms of this statement
#2191: FILE: util/uri.c:2031:
+ if (uptr != NULL)
[...]
ERROR: braces {} are necessary for all arms of this statement
#2272: FILE: util/uri.c:2096:
+ if (init_alloc <= 0)
[...]
ERROR: braces {} are necessary for all arms of this statement
#2341: FILE: util/uri.c:2159:
+ if (eq && eq >= end)
[...]
ERROR: braces {} are necessary for all arms of this statement
#2383: FILE: util/uri.c:2199:
+ if (*query)
[...]
total: 147 errors, 0 warnings, 2299 lines checked
Your patch has style problems, please review. If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
Checking PATCH 2/6: util/uri.c: remove brackets that wrap `return` statement's content....
Checking PATCH 3/6: util/uri.c: wrap single statement blocks with braces {}...
Checking PATCH 4/6: tests/libqos: Check for valid dev pointer when looking for PCI devices...
Checking PATCH 5/6: Add a git-publish configuration file...
Checking PATCH 6/6: README: Document 'git-publish' workflow...
=== OUTPUT END ===
Test command exited with code: 1
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@freelists.org
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [Qemu-devel] [PULL 0/6] Block patches
2018-03-05 9:40 Stefan Hajnoczi
2018-03-05 9:52 ` no-reply
@ 2018-03-05 18:55 ` Peter Maydell
1 sibling, 0 replies; 18+ messages in thread
From: Peter Maydell @ 2018-03-05 18:55 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: QEMU Developers, Qemu-block
On 5 March 2018 at 09:40, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit 136c67e07869227b21b3f627316e03679ce7b738:
>
> Merge remote-tracking branch 'remotes/bkoppelmann/tags/pull-tricore-2018-03-02' into staging (2018-03-02 16:56:20 +0000)
>
> are available in the Git repository at:
>
> git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 23500c6a9409efc80d696aede0629bfbe7556a90:
>
> README: Document 'git-publish' workflow (2018-03-05 09:03:17 +0000)
>
> ----------------------------------------------------------------
> Pull request
>
> Mostly patches that are only indirectly related to the block layer, but I've
> reviewed them and there is no maintainer.
>
> ----------------------------------------------------------------
>
> Fam Zheng (2):
> Add a git-publish configuration file
> README: Document 'git-publish' workflow
>
> Su Hang (3):
> util/uri.c: Coding style check, Only whitespace involved
> util/uri.c: remove brackets that wrap `return` statement's content.
> util/uri.c: wrap single statement blocks with braces {}
>
> Thomas Huth (1):
> tests/libqos: Check for valid dev pointer when looking for PCI devices
>
> tests/libqos/virtio-pci.c | 4 +-
> util/uri.c | 1733 ++++++++++++++++++++++++---------------------
> .gitpublish | 51 ++
> README | 31 +-
> 4 files changed, 1014 insertions(+), 805 deletions(-)
> create mode 100644 .gitpublish
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2018-03-05 18:55 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-14 10:01 [Qemu-devel] [PULL 0/6] Block patches Kevin Wolf
2013-01-14 10:01 ` [Qemu-devel] [PATCH 1/6] block: do not probe zero-sized disks Kevin Wolf
2013-01-14 10:01 ` [Qemu-devel] [PATCH 2/6] sheepdog: implement direct write semantics Kevin Wolf
2013-01-14 10:01 ` [Qemu-devel] [PATCH 3/6] raw-posix: fix bdrv_aio_ioctl Kevin Wolf
2013-01-14 10:01 ` [Qemu-devel] [PATCH 4/6] block: make qiov_is_aligned() public Kevin Wolf
2013-01-14 10:02 ` [Qemu-devel] [PATCH 5/6] dataplane: extract virtio-blk read/write processing into do_rdwr_cmd() Kevin Wolf
2013-01-14 10:02 ` [Qemu-devel] [PATCH 6/6] dataplane: handle misaligned virtio-blk requests Kevin Wolf
2013-01-20 14:47 ` [Qemu-devel] [PULL 0/6] Block patches Anthony Liguori
-- strict thread matches above, loose matches on Subject: below --
2018-03-05 9:40 Stefan Hajnoczi
2018-03-05 9:52 ` no-reply
2018-03-05 18:55 ` Peter Maydell
2014-06-23 9:31 Stefan Hajnoczi
2014-06-23 12:18 ` Peter Maydell
2013-12-13 17:48 Kevin Wolf
2011-05-03 11:08 Kevin Wolf
2011-05-03 12:44 ` Anthony Liguori
2010-08-03 14:44 Kevin Wolf
2010-08-09 13:41 ` Anthony Liguori
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).