* [Qemu-devel] [PULL 00/10] Block patches
@ 2010-08-30 16:32 Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 01/10] virtio: Factor virtqueue_map_sg out Kevin Wolf
` (10 more replies)
0 siblings, 11 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-08-30 16:32 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit 02a89b219039621c940863aa5a9da4fec81a1546:
isapc: fix segfault. (2010-08-28 08:50:40 +0000)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git for-anthony
Andrew de Quincey (1):
posix-aio-compat: Fix async_conmtext for ioctl
Izumi Tsutsui (1):
sheepdog: remove unnecessary includes
Kevin Wolf (4):
virtio: Factor virtqueue_map_sg out
virtio-blk: Fix migration of queued requests
block: Fix image re-open in bdrv_commit
qemu-img rebase: Open new backing file read-only
Laurent Vivier (1):
nbd: Introduce NBD named exports.
Loïc Minier (1):
vvfat: fat_chksum(): fix access above array bounds
Miguel Di Ciurcio Filho (2):
monitor: make 'info snapshots' show only fully available snapshots
savevm: Generate a name when run without one
block.c | 13 ++++--
block/nbd.c | 68 +++++++++++++++++++++--------
block/sheepdog.c | 10 ----
block/vvfat.c | 2 +-
hw/virtio-blk.c | 5 ++
hw/virtio.c | 38 +++++++++++------
hw/virtio.h | 3 +
nbd.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++-----
nbd.h | 5 ++-
posix-aio-compat.c | 1 +
qemu-doc.texi | 7 +++
qemu-img.c | 2 +-
qemu-nbd.c | 4 +-
savevm.c | 88 ++++++++++++++++++++++++++++-----------
14 files changed, 276 insertions(+), 88 deletions(-)
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 01/10] virtio: Factor virtqueue_map_sg out
2010-08-30 16:32 [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
@ 2010-08-30 16:32 ` Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 02/10] virtio-blk: Fix migration of queued requests Kevin Wolf
` (9 subsequent siblings)
10 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-08-30 16:32 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
Separate the mapping of requests to host memory from the descriptor iteration.
The next patch will make use of it in a different context.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
hw/virtio.c | 38 ++++++++++++++++++++++++--------------
hw/virtio.h | 3 +++
2 files changed, 27 insertions(+), 14 deletions(-)
diff --git a/hw/virtio.c b/hw/virtio.c
index 4475bb3..85312b3 100644
--- a/hw/virtio.c
+++ b/hw/virtio.c
@@ -360,11 +360,26 @@ int virtqueue_avail_bytes(VirtQueue *vq, int in_bytes, int out_bytes)
return 0;
}
+void virtqueue_map_sg(struct iovec *sg, target_phys_addr_t *addr,
+ size_t num_sg, int is_write)
+{
+ unsigned int i;
+ target_phys_addr_t len;
+
+ for (i = 0; i < num_sg; i++) {
+ len = sg[i].iov_len;
+ sg[i].iov_base = cpu_physical_memory_map(addr[i], &len, is_write);
+ if (sg[i].iov_base == NULL || len != sg[i].iov_len) {
+ fprintf(stderr, "virtio: trying to map MMIO memory\n");
+ exit(1);
+ }
+ }
+}
+
int virtqueue_pop(VirtQueue *vq, VirtQueueElement *elem)
{
unsigned int i, head, max;
target_phys_addr_t desc_pa = vq->vring.desc;
- target_phys_addr_t len;
if (!virtqueue_num_heads(vq, vq->last_avail_idx))
return 0;
@@ -388,28 +403,19 @@ int virtqueue_pop(VirtQueue *vq, VirtQueueElement *elem)
i = 0;
}
+ /* Collect all the descriptors */
do {
struct iovec *sg;
- int is_write = 0;
if (vring_desc_flags(desc_pa, i) & VRING_DESC_F_WRITE) {
elem->in_addr[elem->in_num] = vring_desc_addr(desc_pa, i);
sg = &elem->in_sg[elem->in_num++];
- is_write = 1;
- } else
+ } else {
+ elem->out_addr[elem->out_num] = vring_desc_addr(desc_pa, i);
sg = &elem->out_sg[elem->out_num++];
+ }
- /* Grab the first descriptor, and check it's OK. */
sg->iov_len = vring_desc_len(desc_pa, i);
- len = sg->iov_len;
-
- sg->iov_base = cpu_physical_memory_map(vring_desc_addr(desc_pa, i),
- &len, is_write);
-
- if (sg->iov_base == NULL || len != sg->iov_len) {
- fprintf(stderr, "virtio: trying to map MMIO memory\n");
- exit(1);
- }
/* If we've got too many, that implies a descriptor loop. */
if ((elem->in_num + elem->out_num) > max) {
@@ -418,6 +424,10 @@ int virtqueue_pop(VirtQueue *vq, VirtQueueElement *elem)
}
} while ((i = virtqueue_next_desc(desc_pa, i, max)) != max);
+ /* Now map what we have collected */
+ virtqueue_map_sg(elem->in_sg, elem->in_addr, elem->in_num, 1);
+ virtqueue_map_sg(elem->out_sg, elem->out_addr, elem->out_num, 0);
+
elem->index = head;
vq->inuse++;
diff --git a/hw/virtio.h b/hw/virtio.h
index 5836ab6..1deeb2c 100644
--- a/hw/virtio.h
+++ b/hw/virtio.h
@@ -81,6 +81,7 @@ typedef struct VirtQueueElement
unsigned int out_num;
unsigned int in_num;
target_phys_addr_t in_addr[VIRTQUEUE_MAX_SIZE];
+ target_phys_addr_t out_addr[VIRTQUEUE_MAX_SIZE];
struct iovec in_sg[VIRTQUEUE_MAX_SIZE];
struct iovec out_sg[VIRTQUEUE_MAX_SIZE];
} VirtQueueElement;
@@ -142,6 +143,8 @@ void virtqueue_flush(VirtQueue *vq, unsigned int count);
void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem,
unsigned int len, unsigned int idx);
+void virtqueue_map_sg(struct iovec *sg, target_phys_addr_t *addr,
+ size_t num_sg, int is_write);
int virtqueue_pop(VirtQueue *vq, VirtQueueElement *elem);
int virtqueue_avail_bytes(VirtQueue *vq, int in_bytes, int out_bytes);
--
1.7.2.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 02/10] virtio-blk: Fix migration of queued requests
2010-08-30 16:32 [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 01/10] virtio: Factor virtqueue_map_sg out Kevin Wolf
@ 2010-08-30 16:32 ` Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 03/10] block: Fix image re-open in bdrv_commit Kevin Wolf
` (8 subsequent siblings)
10 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-08-30 16:32 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
in_sg[].iovec and out_sg[].ioved are pointer to (source) host memory and
therefore invalid after migration. When loading the device state we must
create a new mapping on the destination host.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
hw/virtio-blk.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index c3a7343..395eb9a 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -481,6 +481,11 @@ static int virtio_blk_load(QEMUFile *f, void *opaque, int version_id)
qemu_get_buffer(f, (unsigned char*)&req->elem, sizeof(req->elem));
req->next = s->rq;
s->rq = req;
+
+ virtqueue_map_sg(req->elem.in_sg, req->elem.in_addr,
+ req->elem.in_num, 1);
+ virtqueue_map_sg(req->elem.out_sg, req->elem.out_addr,
+ req->elem.out_num, 0);
}
return 0;
--
1.7.2.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 03/10] block: Fix image re-open in bdrv_commit
2010-08-30 16:32 [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 01/10] virtio: Factor virtqueue_map_sg out Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 02/10] virtio-blk: Fix migration of queued requests Kevin Wolf
@ 2010-08-30 16:32 ` Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 04/10] sheepdog: remove unnecessary includes Kevin Wolf
` (7 subsequent siblings)
10 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-08-30 16:32 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
Arguably we should re-open the backing file with the backing file format and
not with the format of the snapshot image.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block.c | 13 +++++++++----
1 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/block.c b/block.c
index da70f29..a5514e3 100644
--- a/block.c
+++ b/block.c
@@ -745,6 +745,7 @@ int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res)
int bdrv_commit(BlockDriverState *bs)
{
BlockDriver *drv = bs->drv;
+ BlockDriver *backing_drv;
int64_t sector, total_sectors;
int n, ro, open_flags;
int ret = 0, rw_ret = 0;
@@ -762,7 +763,8 @@ int bdrv_commit(BlockDriverState *bs)
if (bs->backing_hd->keep_read_only) {
return -EACCES;
}
-
+
+ backing_drv = bs->backing_hd->drv;
ro = bs->backing_hd->read_only;
strncpy(filename, bs->backing_hd->filename, sizeof(filename));
open_flags = bs->backing_hd->open_flags;
@@ -772,12 +774,14 @@ int bdrv_commit(BlockDriverState *bs)
bdrv_delete(bs->backing_hd);
bs->backing_hd = NULL;
bs_rw = bdrv_new("");
- rw_ret = bdrv_open(bs_rw, filename, open_flags | BDRV_O_RDWR, drv);
+ rw_ret = bdrv_open(bs_rw, filename, open_flags | BDRV_O_RDWR,
+ backing_drv);
if (rw_ret < 0) {
bdrv_delete(bs_rw);
/* try to re-open read-only */
bs_ro = bdrv_new("");
- ret = bdrv_open(bs_ro, filename, open_flags & ~BDRV_O_RDWR, drv);
+ ret = bdrv_open(bs_ro, filename, open_flags & ~BDRV_O_RDWR,
+ backing_drv);
if (ret < 0) {
bdrv_delete(bs_ro);
/* drive not functional anymore */
@@ -828,7 +832,8 @@ ro_cleanup:
bdrv_delete(bs->backing_hd);
bs->backing_hd = NULL;
bs_ro = bdrv_new("");
- ret = bdrv_open(bs_ro, filename, open_flags & ~BDRV_O_RDWR, drv);
+ ret = bdrv_open(bs_ro, filename, open_flags & ~BDRV_O_RDWR,
+ backing_drv);
if (ret < 0) {
bdrv_delete(bs_ro);
/* drive not functional anymore */
--
1.7.2.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 04/10] sheepdog: remove unnecessary includes
2010-08-30 16:32 [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
` (2 preceding siblings ...)
2010-08-30 16:32 ` [Qemu-devel] [PATCH 03/10] block: Fix image re-open in bdrv_commit Kevin Wolf
@ 2010-08-30 16:32 ` Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 05/10] qemu-img rebase: Open new backing file read-only Kevin Wolf
` (6 subsequent siblings)
10 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-08-30 16:32 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
"qemu_socket.h" includes all necessary files and
including <netinet/tcp.h> without <netinet/in.h>
could cause errors on some systems.
Signed-off-by: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/sheepdog.c | 10 ----------
1 files changed, 0 insertions(+), 10 deletions(-)
diff --git a/block/sheepdog.c b/block/sheepdog.c
index 81aa564..e62820a 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -8,16 +8,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifdef _WIN32
-#include <windows.h>
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#else
-#include <netdb.h>
-#include <netinet/tcp.h>
-
-#define closesocket(s) close(s)
-#endif
#include "qemu-common.h"
#include "qemu-error.h"
--
1.7.2.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 05/10] qemu-img rebase: Open new backing file read-only
2010-08-30 16:32 [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
` (3 preceding siblings ...)
2010-08-30 16:32 ` [Qemu-devel] [PATCH 04/10] sheepdog: remove unnecessary includes Kevin Wolf
@ 2010-08-30 16:32 ` Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 06/10] vvfat: fat_chksum(): fix access above array bounds Kevin Wolf
` (5 subsequent siblings)
10 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-08-30 16:32 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
We never write to a backing file, so opening rw is useless. It just means that
you can't rebase on top of a file for which you don't have write permissions.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
qemu-img.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/qemu-img.c b/qemu-img.c
index e300f91..d2a978b 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -1286,7 +1286,7 @@ static int img_rebase(int argc, char **argv)
}
bs_new_backing = bdrv_new("new_backing");
- ret = bdrv_open(bs_new_backing, out_baseimg, BDRV_O_FLAGS | BDRV_O_RDWR,
+ ret = bdrv_open(bs_new_backing, out_baseimg, BDRV_O_FLAGS,
new_backing_drv);
if (ret) {
error("Could not open new backing file '%s'", out_baseimg);
--
1.7.2.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 06/10] vvfat: fat_chksum(): fix access above array bounds
2010-08-30 16:32 [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
` (4 preceding siblings ...)
2010-08-30 16:32 ` [Qemu-devel] [PATCH 05/10] qemu-img rebase: Open new backing file read-only Kevin Wolf
@ 2010-08-30 16:32 ` Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 07/10] nbd: Introduce NBD named exports Kevin Wolf
` (4 subsequent siblings)
10 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-08-30 16:32 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
From: Loïc Minier <loic.minier@linaro.org>
Signed-off-by: Loïc Minier <loic.minier@linaro.org>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/vvfat.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/block/vvfat.c b/block/vvfat.c
index 6d61c2e..365332a 100644
--- a/block/vvfat.c
+++ b/block/vvfat.c
@@ -512,7 +512,7 @@ static inline uint8_t fat_chksum(const direntry_t* entry)
for(i=0;i<11;i++) {
unsigned char c;
- c = (i <= 8) ? entry->name[i] : entry->extension[i-8];
+ c = (i < 8) ? entry->name[i] : entry->extension[i-8];
chksum=(((chksum&0xfe)>>1)|((chksum&0x01)?0x80:0)) + c;
}
--
1.7.2.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 07/10] nbd: Introduce NBD named exports.
2010-08-30 16:32 [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
` (5 preceding siblings ...)
2010-08-30 16:32 ` [Qemu-devel] [PATCH 06/10] vvfat: fat_chksum(): fix access above array bounds Kevin Wolf
@ 2010-08-30 16:32 ` Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 08/10] posix-aio-compat: Fix async_conmtext for ioctl Kevin Wolf
` (3 subsequent siblings)
10 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-08-30 16:32 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
From: Laurent Vivier <laurent@vivier.eu>
This patch allows to connect Qemu using NBD protocol to an nbd-server
using named exports.
For instance, if on the host "isoserver", in /etc/nbd-server/config, you have:
[generic]
[debian-500-ppc-netinst]
exportname = /ISO/debian-500-powerpc-netinst.iso
[Fedora-10-ppc-netinst]
exportname = /ISO/Fedora-10-ppc-netinst.iso
You can connect to it, using:
qemu -cdrom nbd:isoserver:exportname=debian-500-ppc-netinst
qemu -cdrom nbd:isoserver:exportname=Fedora-10-ppc-netinst
NOTE: you need at least nbd-server 2.9.18
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/nbd.c | 68 +++++++++++++++++++++++---------
nbd.c | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++------
nbd.h | 5 ++-
qemu-doc.texi | 7 +++
qemu-nbd.c | 4 +-
5 files changed, 169 insertions(+), 33 deletions(-)
diff --git a/block/nbd.c b/block/nbd.c
index a1ec123..5e9d6cb 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -33,6 +33,8 @@
#include <sys/types.h>
#include <unistd.h>
+#define EN_OPTSTR ":exportname="
+
typedef struct BDRVNBDState {
int sock;
off_t size;
@@ -42,55 +44,83 @@ typedef struct BDRVNBDState {
static int nbd_open(BlockDriverState *bs, const char* filename, int flags)
{
BDRVNBDState *s = bs->opaque;
+ uint32_t nbdflags;
+
+ char *file;
+ char *name;
const char *host;
const char *unixpath;
int sock;
off_t size;
size_t blocksize;
int ret;
+ int err = -EINVAL;
+
+ file = qemu_strdup(filename);
- if (!strstart(filename, "nbd:", &host))
- return -EINVAL;
+ name = strstr(file, EN_OPTSTR);
+ if (name) {
+ if (name[strlen(EN_OPTSTR)] == 0) {
+ goto out;
+ }
+ name[0] = 0;
+ name += strlen(EN_OPTSTR);
+ }
+
+ if (!strstart(file, "nbd:", &host)) {
+ goto out;
+ }
if (strstart(host, "unix:", &unixpath)) {
- if (unixpath[0] != '/')
- return -EINVAL;
+ if (unixpath[0] != '/') {
+ goto out;
+ }
sock = unix_socket_outgoing(unixpath);
} else {
- uint16_t port;
+ uint16_t port = NBD_DEFAULT_PORT;
char *p, *r;
char hostname[128];
pstrcpy(hostname, 128, host);
p = strchr(hostname, ':');
- if (p == NULL)
- return -EINVAL;
+ if (p != NULL) {
+ *p = '\0';
+ p++;
+
+ port = strtol(p, &r, 0);
+ if (r == p) {
+ goto out;
+ }
+ } else if (name == NULL) {
+ goto out;
+ }
- *p = '\0';
- p++;
-
- port = strtol(p, &r, 0);
- if (r == p)
- return -EINVAL;
sock = tcp_socket_outgoing(hostname, port);
}
- if (sock == -1)
- return -errno;
+ if (sock == -1) {
+ err = -errno;
+ goto out;
+ }
- ret = nbd_receive_negotiate(sock, &size, &blocksize);
- if (ret == -1)
- return -errno;
+ ret = nbd_receive_negotiate(sock, name, &nbdflags, &size, &blocksize);
+ if (ret == -1) {
+ err = -errno;
+ goto out;
+ }
s->sock = sock;
s->size = size;
s->blocksize = blocksize;
+ err = 0;
- return 0;
+out:
+ qemu_free(file);
+ return err;
}
static int nbd_read(BlockDriverState *bs, int64_t sector_num,
diff --git a/nbd.c b/nbd.c
index a9f295f..30dec8d 100644
--- a/nbd.c
+++ b/nbd.c
@@ -62,6 +62,8 @@
#define NBD_SET_SIZE_BLOCKS _IO(0xab, 7)
#define NBD_DISCONNECT _IO(0xab, 8)
+#define NBD_OPT_EXPORT_NAME (1 << 0)
+
/* That's all folks */
#define read_sync(fd, buffer, size) nbd_wr_sync(fd, buffer, size, true)
@@ -296,22 +298,27 @@ int nbd_negotiate(int csock, off_t size)
return 0;
}
-int nbd_receive_negotiate(int csock, off_t *size, size_t *blocksize)
+int nbd_receive_negotiate(int csock, const char *name, uint32_t *flags,
+ off_t *size, size_t *blocksize)
{
- char buf[8 + 8 + 8 + 128];
- uint64_t magic;
+ char buf[256];
+ uint64_t magic, s;
+ uint16_t tmp;
TRACE("Receiving negotation.");
- if (read_sync(csock, buf, sizeof(buf)) != sizeof(buf)) {
+ if (read_sync(csock, buf, 8) != 8) {
LOG("read failed");
errno = EINVAL;
return -1;
}
- magic = be64_to_cpup((uint64_t*)(buf + 8));
- *size = be64_to_cpup((uint64_t*)(buf + 16));
- *blocksize = 1024;
+ buf[8] = '\0';
+ if (strlen(buf) == 0) {
+ LOG("server connection closed");
+ errno = EINVAL;
+ return -1;
+ }
TRACE("Magic is %c%c%c%c%c%c%c%c",
qemu_isprint(buf[0]) ? buf[0] : '.',
@@ -322,8 +329,6 @@ int nbd_receive_negotiate(int csock, off_t *size, size_t *blocksize)
qemu_isprint(buf[5]) ? buf[5] : '.',
qemu_isprint(buf[6]) ? buf[6] : '.',
qemu_isprint(buf[7]) ? buf[7] : '.');
- TRACE("Magic is 0x%" PRIx64, magic);
- TRACE("Size is %" PRIu64, *size);
if (memcmp(buf, "NBDMAGIC", 8) != 0) {
LOG("Invalid magic received");
@@ -331,10 +336,99 @@ int nbd_receive_negotiate(int csock, off_t *size, size_t *blocksize)
return -1;
}
- TRACE("Checking magic");
+ if (read_sync(csock, &magic, sizeof(magic)) != sizeof(magic)) {
+ LOG("read failed");
+ errno = EINVAL;
+ return -1;
+ }
+ magic = be64_to_cpu(magic);
+ TRACE("Magic is 0x%" PRIx64, magic);
+
+ if (name) {
+ uint32_t reserved = 0;
+ uint32_t opt;
+ uint32_t namesize;
+
+ TRACE("Checking magic (opts_magic)");
+ if (magic != 0x49484156454F5054LL) {
+ LOG("Bad magic received");
+ errno = EINVAL;
+ return -1;
+ }
+ if (read_sync(csock, &tmp, sizeof(tmp)) != sizeof(tmp)) {
+ LOG("flags read failed");
+ errno = EINVAL;
+ return -1;
+ }
+ *flags = be16_to_cpu(tmp) << 16;
+ /* reserved for future use */
+ if (write_sync(csock, &reserved, sizeof(reserved)) !=
+ sizeof(reserved)) {
+ LOG("write failed (reserved)");
+ errno = EINVAL;
+ return -1;
+ }
+ /* write the export name */
+ magic = cpu_to_be64(magic);
+ if (write_sync(csock, &magic, sizeof(magic)) != sizeof(magic)) {
+ LOG("write failed (magic)");
+ errno = EINVAL;
+ return -1;
+ }
+ opt = cpu_to_be32(NBD_OPT_EXPORT_NAME);
+ if (write_sync(csock, &opt, sizeof(opt)) != sizeof(opt)) {
+ LOG("write failed (opt)");
+ errno = EINVAL;
+ return -1;
+ }
+ namesize = cpu_to_be32(strlen(name));
+ if (write_sync(csock, &namesize, sizeof(namesize)) !=
+ sizeof(namesize)) {
+ LOG("write failed (namesize)");
+ errno = EINVAL;
+ return -1;
+ }
+ if (write_sync(csock, (char*)name, strlen(name)) != strlen(name)) {
+ LOG("write failed (name)");
+ errno = EINVAL;
+ return -1;
+ }
+ } else {
+ TRACE("Checking magic (cli_magic)");
+
+ if (magic != 0x00420281861253LL) {
+ LOG("Bad magic received");
+ errno = EINVAL;
+ return -1;
+ }
+ }
+
+ if (read_sync(csock, &s, sizeof(s)) != sizeof(s)) {
+ LOG("read failed");
+ errno = EINVAL;
+ return -1;
+ }
+ *size = be64_to_cpu(s);
+ *blocksize = 1024;
+ TRACE("Size is %" PRIu64, *size);
- if (magic != 0x00420281861253LL) {
- LOG("Bad magic received");
+ if (!name) {
+ if (read_sync(csock, flags, sizeof(*flags)) != sizeof(*flags)) {
+ LOG("read failed (flags)");
+ errno = EINVAL;
+ return -1;
+ }
+ *flags = be32_to_cpup(flags);
+ } else {
+ if (read_sync(csock, &tmp, sizeof(tmp)) != sizeof(tmp)) {
+ LOG("read failed (tmp)");
+ errno = EINVAL;
+ return -1;
+ }
+ *flags |= be32_to_cpu(tmp);
+ }
+ if (read_sync(csock, &buf, 124) != 124) {
+ LOG("read failed (buf)");
errno = EINVAL;
return -1;
}
diff --git a/nbd.h b/nbd.h
index 5a1fbdf..8ff65a1 100644
--- a/nbd.h
+++ b/nbd.h
@@ -42,6 +42,8 @@ enum {
NBD_CMD_DISC = 2
};
+#define NBD_DEFAULT_PORT 10809
+
size_t nbd_wr_sync(int fd, void *buffer, size_t size, bool do_read);
int tcp_socket_outgoing(const char *address, uint16_t port);
int tcp_socket_incoming(const char *address, uint16_t port);
@@ -49,7 +51,8 @@ int unix_socket_outgoing(const char *path);
int unix_socket_incoming(const char *path);
int nbd_negotiate(int csock, off_t size);
-int nbd_receive_negotiate(int csock, off_t *size, size_t *blocksize);
+int nbd_receive_negotiate(int csock, const char *name, uint32_t *flags,
+ off_t *size, size_t *blocksize);
int nbd_init(int fd, int csock, off_t size, size_t blocksize);
int nbd_send_request(int csock, struct nbd_request *request);
int nbd_receive_reply(int csock, struct nbd_reply *reply);
diff --git a/qemu-doc.texi b/qemu-doc.texi
index 55a966f..d7d760f 100644
--- a/qemu-doc.texi
+++ b/qemu-doc.texi
@@ -620,6 +620,13 @@ qemu linux1.img -hdb nbd:unix:/tmp/my_socket
qemu linux2.img -hdb nbd:unix:/tmp/my_socket
@end example
+If the nbd-server uses named exports (since NBD 2.9.18), you must use the
+"exportname" option:
+@example
+qemu -cdrom nbd:localhost:exportname=debian-500-ppc-netinst
+qemu -cdrom nbd:localhost:exportname=openSUSE-11.1-ppc-netinst
+@end example
+
@node pcsys_network
@section Network emulation
diff --git a/qemu-nbd.c b/qemu-nbd.c
index 4e607cf..41e5c5d 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -230,6 +230,7 @@ int main(int argc, char **argv)
int nb_fds = 0;
int max_fd;
int persistent = 0;
+ uint32_t nbdflags;
while ((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) {
switch (ch) {
@@ -398,7 +399,8 @@ int main(int argc, char **argv)
goto out;
}
- ret = nbd_receive_negotiate(sock, &size, &blocksize);
+ ret = nbd_receive_negotiate(sock, NULL, &nbdflags,
+ &size, &blocksize);
if (ret == -1) {
ret = 1;
goto out;
--
1.7.2.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 08/10] posix-aio-compat: Fix async_conmtext for ioctl
2010-08-30 16:32 [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
` (6 preceding siblings ...)
2010-08-30 16:32 ` [Qemu-devel] [PATCH 07/10] nbd: Introduce NBD named exports Kevin Wolf
@ 2010-08-30 16:32 ` Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 09/10] monitor: make 'info snapshots' show only fully available snapshots Kevin Wolf
` (2 subsequent siblings)
10 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-08-30 16:32 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
From: Andrew de Quincey <adq@lidskialf.net>
Set the async_context_id field when queuing an async ioctl call
Signed-off-by: Andrew de Quincey <adq@lidskialf.net>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
posix-aio-compat.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/posix-aio-compat.c b/posix-aio-compat.c
index a67ffe3..efc5968 100644
--- a/posix-aio-compat.c
+++ b/posix-aio-compat.c
@@ -599,6 +599,7 @@ BlockDriverAIOCB *paio_ioctl(BlockDriverState *bs, int fd,
acb->aio_type = QEMU_AIO_IOCTL;
acb->aio_fildes = fd;
acb->ev_signo = SIGUSR2;
+ acb->async_context_id = get_async_context_id();
acb->aio_offset = 0;
acb->aio_ioctl_buf = buf;
acb->aio_ioctl_cmd = req;
--
1.7.2.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 09/10] monitor: make 'info snapshots' show only fully available snapshots
2010-08-30 16:32 [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
` (7 preceding siblings ...)
2010-08-30 16:32 ` [Qemu-devel] [PATCH 08/10] posix-aio-compat: Fix async_conmtext for ioctl Kevin Wolf
@ 2010-08-30 16:32 ` Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 10/10] savevm: Generate a name when run without one Kevin Wolf
2010-09-06 15:07 ` [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
10 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-08-30 16:32 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
From: Miguel Di Ciurcio Filho <miguel.filho@gmail.com>
The output generated by 'info snapshots' shows only snapshots that exist on the
block device that saves the VM state. This output can cause an user to
erroneously try to load an snapshot that is not available on all block devices.
$ qemu-img snapshot -l xxtest.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 1.5M 2010-07-26 16:51:52 00:00:08.599
2 1.5M 2010-07-26 16:51:53 00:00:09.719
3 1.5M 2010-07-26 17:26:49 00:00:13.245
4 1.5M 2010-07-26 19:01:00 00:00:46.763
$ qemu-img snapshot -l xxtest2.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
3 0 2010-07-26 17:26:49 00:00:13.245
4 0 2010-07-26 19:01:00 00:00:46.763
Current output:
$ qemu -hda xxtest.qcow2 -hdb xxtest2.qcow2 -monitor stdio -vnc :0
QEMU 0.12.4 monitor - type 'help' for more information
(qemu) info snapshots
Snapshot devices: ide0-hd0
Snapshot list (from ide0-hd0):
ID TAG VM SIZE DATE VM CLOCK
1 1.5M 2010-07-26 16:51:52 00:00:08.599
2 1.5M 2010-07-26 16:51:53 00:00:09.719
3 1.5M 2010-07-26 17:26:49 00:00:13.245
4 1.5M 2010-07-26 19:01:00 00:00:46.763
Snapshots 1 and 2 do not exist on xxtest2.qcow, but they are displayed anyway.
This patch sumarizes the output to only show fully available snapshots.
New output:
(qemu) info snapshots
ID TAG VM SIZE DATE VM CLOCK
3 1.5M 2010-07-26 17:26:49 00:00:13.245
4 1.5M 2010-07-26 19:01:00 00:00:46.763
Signed-off-by: Miguel Di Ciurcio Filho <miguel.filho@gmail.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
savevm.c | 59 +++++++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 43 insertions(+), 16 deletions(-)
diff --git a/savevm.c b/savevm.c
index 99e4949..d286592 100644
--- a/savevm.c
+++ b/savevm.c
@@ -2039,8 +2039,10 @@ void do_delvm(Monitor *mon, const QDict *qdict)
void do_info_snapshots(Monitor *mon)
{
BlockDriverState *bs, *bs1;
- QEMUSnapshotInfo *sn_tab, *sn;
- int nb_sns, i;
+ QEMUSnapshotInfo *sn_tab, *sn, s, *sn_info = &s;
+ int nb_sns, i, ret, available;
+ int total;
+ int *available_snapshots;
char buf[256];
bs = bdrv_snapshots();
@@ -2048,27 +2050,52 @@ void do_info_snapshots(Monitor *mon)
monitor_printf(mon, "No available block device supports snapshots\n");
return;
}
- monitor_printf(mon, "Snapshot devices:");
- bs1 = NULL;
- while ((bs1 = bdrv_next(bs1))) {
- if (bdrv_can_snapshot(bs1)) {
- if (bs == bs1)
- monitor_printf(mon, " %s", bdrv_get_device_name(bs1));
- }
- }
- monitor_printf(mon, "\n");
nb_sns = bdrv_snapshot_list(bs, &sn_tab);
if (nb_sns < 0) {
monitor_printf(mon, "bdrv_snapshot_list: error %d\n", nb_sns);
return;
}
- monitor_printf(mon, "Snapshot list (from %s):\n",
- bdrv_get_device_name(bs));
- monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
- for(i = 0; i < nb_sns; i++) {
+
+ if (nb_sns == 0) {
+ monitor_printf(mon, "There is no snapshot available.\n");
+ return;
+ }
+
+ available_snapshots = qemu_mallocz(sizeof(int) * nb_sns);
+ total = 0;
+ for (i = 0; i < nb_sns; i++) {
sn = &sn_tab[i];
- monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
+ available = 1;
+ bs1 = NULL;
+
+ while ((bs1 = bdrv_next(bs1))) {
+ if (bdrv_can_snapshot(bs1) && bs1 != bs) {
+ ret = bdrv_snapshot_find(bs1, sn_info, sn->id_str);
+ if (ret < 0) {
+ available = 0;
+ break;
+ }
+ }
+ }
+
+ if (available) {
+ available_snapshots[total] = i;
+ total++;
+ }
}
+
+ if (total > 0) {
+ monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
+ for (i = 0; i < total; i++) {
+ sn = &sn_tab[available_snapshots[i]];
+ monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
+ }
+ } else {
+ monitor_printf(mon, "There is no suitable snapshot available\n");
+ }
+
qemu_free(sn_tab);
+ qemu_free(available_snapshots);
+
}
--
1.7.2.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [Qemu-devel] [PATCH 10/10] savevm: Generate a name when run without one
2010-08-30 16:32 [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
` (8 preceding siblings ...)
2010-08-30 16:32 ` [Qemu-devel] [PATCH 09/10] monitor: make 'info snapshots' show only fully available snapshots Kevin Wolf
@ 2010-08-30 16:32 ` Kevin Wolf
2010-09-06 15:07 ` [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
10 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-08-30 16:32 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
From: Miguel Di Ciurcio Filho <miguel.filho@gmail.com>
When savevm is run without a name, the name stays blank and the snapshot is
saved anyway.
The new behavior is when savevm is run without parameters a name will be
created automaticaly, so the snapshot is accessible to the user without needing
the id when loadvm is run.
(qemu) savevm
(qemu) info snapshots
ID TAG VM SIZE DATE VM CLOCK
1 vm-20100728134640 978K 2010-07-28 13:46:40 00:00:08.603
We use a name with the format 'vm-YYYYMMDDHHMMSS'.
This is a first step to hide the internal id, because I don't see a reason to
expose this kind of internals to the user.
Signed-off-by: Miguel Di Ciurcio Filho <miguel.filho@gmail.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
savevm.c | 29 ++++++++++++++++++++---------
1 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/savevm.c b/savevm.c
index d286592..4d9f822 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1837,8 +1837,10 @@ void do_savevm(Monitor *mon, const QDict *qdict)
uint32_t vm_state_size;
#ifdef _WIN32
struct _timeb tb;
+ struct tm *ptm;
#else
struct timeval tv;
+ struct tm tm;
#endif
const char *name = qdict_get_try_str(qdict, "name");
@@ -1869,15 +1871,6 @@ void do_savevm(Monitor *mon, const QDict *qdict)
vm_stop(0);
memset(sn, 0, sizeof(*sn));
- if (name) {
- ret = bdrv_snapshot_find(bs, old_sn, name);
- if (ret >= 0) {
- pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
- pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
- } else {
- pstrcpy(sn->name, sizeof(sn->name), name);
- }
- }
/* fill auxiliary fields */
#ifdef _WIN32
@@ -1891,6 +1884,24 @@ void do_savevm(Monitor *mon, const QDict *qdict)
#endif
sn->vm_clock_nsec = qemu_get_clock(vm_clock);
+ if (name) {
+ ret = bdrv_snapshot_find(bs, old_sn, name);
+ if (ret >= 0) {
+ pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
+ pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
+ } else {
+ pstrcpy(sn->name, sizeof(sn->name), name);
+ }
+ } else {
+#ifdef _WIN32
+ ptm = localtime(&tb.time);
+ strftime(sn->name, sizeof(sn->name), "vm-%Y%m%d%H%M%S", ptm);
+#else
+ localtime_r(&tv.tv_sec, &tm);
+ strftime(sn->name, sizeof(sn->name), "vm-%Y%m%d%H%M%S", &tm);
+#endif
+ }
+
/* Delete old snapshots of the same name */
if (name && del_existing_snapshots(mon, name) < 0) {
goto the_end;
--
1.7.2.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PULL 00/10] Block patches
2010-08-30 16:32 [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
` (9 preceding siblings ...)
2010-08-30 16:32 ` [Qemu-devel] [PATCH 10/10] savevm: Generate a name when run without one Kevin Wolf
@ 2010-09-06 15:07 ` Kevin Wolf
10 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-09-06 15:07 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-devel
Am 30.08.2010 18:32, schrieb Kevin Wolf:
> The following changes since commit 02a89b219039621c940863aa5a9da4fec81a1546:
>
> isapc: fix segfault. (2010-08-28 08:50:40 +0000)
>
> are available in the git repository at:
> git://repo.or.cz/qemu/kevin.git for-anthony
>
> Andrew de Quincey (1):
> posix-aio-compat: Fix async_conmtext for ioctl
>
> Izumi Tsutsui (1):
> sheepdog: remove unnecessary includes
>
> Kevin Wolf (4):
> virtio: Factor virtqueue_map_sg out
> virtio-blk: Fix migration of queued requests
> block: Fix image re-open in bdrv_commit
> qemu-img rebase: Open new backing file read-only
>
> Laurent Vivier (1):
> nbd: Introduce NBD named exports.
>
> Loïc Minier (1):
> vvfat: fat_chksum(): fix access above array bounds
>
> Miguel Di Ciurcio Filho (2):
> monitor: make 'info snapshots' show only fully available snapshots
> savevm: Generate a name when run without one
Anthony, I think you already pulled the patches for stable-0.13 that I
sent on the same day, but these patches for master still seem to be missing.
Kevin
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] [PULL 00/10] Block patches
@ 2010-11-04 13:15 Kevin Wolf
0 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2010-11-04 13:15 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit 5fc9cfedfa09199e10b5f9b67dcd286bfeae4f7a:
Fold send_all() wrapper unix_write() into one function (2010-11-03 12:48:09 -0500)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git for-anthony
Blue Swirl (1):
block: avoid a warning on 64 bit hosts with long as int64_t
Kevin Wolf (9):
scsi-disk: Implement rerror option
block: Allow bdrv_flush to return errors
scsi-disk: Complete failed requests in scsi_disk_emulate_command
scsi-disk: Implement werror for flushes
vpc: Implement bdrv_flush
qcow2: Invalidate cache after failed read
ide: Handle immediate bdrv_aio_flush failure
virtio-blk: Handle immediate flush failure properly
scsi-disk: Fix immediate failure of bdrv_aio_*
block.c | 21 ++++++-
block.h | 2 +-
block/blkdebug.c | 4 +-
block/blkverify.c | 8 +-
block/cow.c | 4 +-
block/qcow.c | 4 +-
block/qcow2-cluster.c | 1 +
block/qcow2-refcount.c | 1 +
block/qcow2.c | 4 +-
block/raw-posix.c | 4 +-
block/raw-win32.c | 9 +++-
block/raw.c | 4 +-
block/vdi.c | 4 +-
block/vmdk.c | 4 +-
block/vpc.c | 21 ++++---
block_int.h | 2 +-
blockdev.c | 6 +-
hw/ide/core.c | 12 +++-
hw/scsi-disk.c | 147 +++++++++++++++++++++++++++++++----------------
hw/virtio-blk.c | 2 +-
20 files changed, 172 insertions(+), 92 deletions(-)
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] [PULL 00/10] Block patches
@ 2011-04-13 12:05 Kevin Wolf
0 siblings, 0 replies; 26+ messages in thread
From: Kevin Wolf @ 2011-04-13 12:05 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit 9df38c47d01eb1fd7eb9d60ac70a4170e638b4a2:
target-arm: Detect tininess before rounding for FP operations (2011-04-12 23:33:33 +0200)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git for-anthony
Amit Shah (7):
atapi: Drives can be locked without media present
atapi: Report correct errors on guest eject request
atapi: Allow GET_EVENT_STATUS_NOTIFICATION after media change
atapi: Move GET_EVENT_STATUS_NOTIFICATION command handling to its own function
atapi: GESN: Use structs for commonly-used field types
atapi: GESN: Standardise event response handling for future additions
atapi: GESN: implement 'media' subcommand
Anthony Liguori (1):
qed: Add support for zero clusters
Mitnick Lyu (1):
vpc.c: Use get_option_parameter() does the search
Stefan Hajnoczi (1):
docs: Describe zero data clusters in QED specification
block/qed-check.c | 5 +-
block/qed-cluster.c | 31 +++++---
block/qed.c | 21 ++++-
block/qed.h | 26 ++++++
block/vpc.c | 8 +--
docs/specs/qed_spec.txt | 8 ++
hw/ide/core.c | 204 ++++++++++++++++++++++++++++++++++++++++-------
hw/ide/internal.h | 6 ++
8 files changed, 258 insertions(+), 51 deletions(-)
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] [PULL 00/10] Block patches
@ 2012-08-15 13:56 Kevin Wolf
2012-08-15 19:49 ` Anthony Liguori
0 siblings, 1 reply; 26+ messages in thread
From: Kevin Wolf @ 2012-08-15 13:56 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit 03834e22abafbc8dc4052d46a5ccd6dd135a54a3:
Merge remote-tracking branch 'origin/master' into staging (2012-08-14 15:19:50 -0500)
are available in the git repository at:
http://repo.or.cz/r/qemu/kevin.git for-anthony
Corey Bryant (7):
qemu-char: Add MSG_CMSG_CLOEXEC flag to recvmsg
qapi: Introduce add-fd, remove-fd, query-fdsets
block: Prevent detection of /dev/fdset/ as floppy
block: Convert open calls to qemu_open
block: Convert close calls to qemu_close
block: Enable qemu_open/close to work with fd sets
monitor: Clean up fd sets on monitor disconnect
Kevin Wolf (2):
block: Flush parent to OS with cache=unsafe
qemu-iotests: Fix 030 after switch to GenericError
Stefan Priebe (1):
iscsi: Fix NULL dereferences / races between task completion and abort
Makefile | 6 +-
block.c | 3 +-
block/iscsi.c | 55 ++++-----
block/raw-posix.c | 46 ++++----
block/raw-win32.c | 6 +-
block/vdi.c | 5 +-
block/vmdk.c | 25 ++---
block/vpc.c | 4 +-
block/vvfat.c | 16 ++--
cutils.c | 5 +
monitor.c | 294 ++++++++++++++++++++++++++++++++++++++++++++++++
monitor.h | 5 +
osdep.c | 116 +++++++++++++++++++
qapi-schema.json | 98 ++++++++++++++++
qemu-char.c | 12 ++-
qemu-common.h | 2 +
qemu-tool.c | 20 ++++
qemu-user.c | 20 ++++
qmp-commands.hx | 122 ++++++++++++++++++++
savevm.c | 4 +-
tests/Makefile | 2 +-
tests/qemu-iotests/030 | 6 +-
22 files changed, 776 insertions(+), 96 deletions(-)
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PULL 00/10] Block patches
2012-08-15 13:56 Kevin Wolf
@ 2012-08-15 19:49 ` Anthony Liguori
0 siblings, 0 replies; 26+ messages in thread
From: Anthony Liguori @ 2012-08-15 19:49 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-devel
Kevin Wolf <kwolf@redhat.com> writes:
> The following changes since commit 03834e22abafbc8dc4052d46a5ccd6dd135a54a3:
>
> Merge remote-tracking branch 'origin/master' into staging (2012-08-14 15:19:50 -0500)
>
> are available in the git repository at:
>
> http://repo.or.cz/r/qemu/kevin.git for-anthony
>
Pulled. Thanks.
Regards,
Anthony Liguori
> Corey Bryant (7):
> qemu-char: Add MSG_CMSG_CLOEXEC flag to recvmsg
> qapi: Introduce add-fd, remove-fd, query-fdsets
> block: Prevent detection of /dev/fdset/ as floppy
> block: Convert open calls to qemu_open
> block: Convert close calls to qemu_close
> block: Enable qemu_open/close to work with fd sets
> monitor: Clean up fd sets on monitor disconnect
>
> Kevin Wolf (2):
> block: Flush parent to OS with cache=unsafe
> qemu-iotests: Fix 030 after switch to GenericError
>
> Stefan Priebe (1):
> iscsi: Fix NULL dereferences / races between task completion and abort
>
> Makefile | 6 +-
> block.c | 3 +-
> block/iscsi.c | 55 ++++-----
> block/raw-posix.c | 46 ++++----
> block/raw-win32.c | 6 +-
> block/vdi.c | 5 +-
> block/vmdk.c | 25 ++---
> block/vpc.c | 4 +-
> block/vvfat.c | 16 ++--
> cutils.c | 5 +
> monitor.c | 294 ++++++++++++++++++++++++++++++++++++++++++++++++
> monitor.h | 5 +
> osdep.c | 116 +++++++++++++++++++
> qapi-schema.json | 98 ++++++++++++++++
> qemu-char.c | 12 ++-
> qemu-common.h | 2 +
> qemu-tool.c | 20 ++++
> qemu-user.c | 20 ++++
> qmp-commands.hx | 122 ++++++++++++++++++++
> savevm.c | 4 +-
> tests/Makefile | 2 +-
> tests/qemu-iotests/030 | 6 +-
> 22 files changed, 776 insertions(+), 96 deletions(-)
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] [PULL 00/10] Block patches
@ 2013-06-04 12:45 Kevin Wolf
2013-06-17 21:17 ` Anthony Liguori
0 siblings, 1 reply; 26+ messages in thread
From: Kevin Wolf @ 2013-06-04 12:45 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit 171392406d8e230d62e5ebf4805f71460854b8ec:
gtk: don't use g_object_unref on GdkCursor (2013-06-03 16:14:05 -0500)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git for-anthony
for you to fetch changes up to 5b91704469c0f801e0219f26458356872c4145ab:
block: dump snapshot and image info to specified output (2013-06-04 13:56:30 +0200)
----------------------------------------------------------------
Fam Zheng (1):
block: add block driver read only whitelist
Stefan Hajnoczi (6):
qemu-iotests: fix 054 cluster size help output
qemu-iotests: make assert_no_active_block_jobs() common
qemu-iotests: make cancel_and_wait() common
qemu-iotests: make compare_images() common
qemu-iotests: make create_image() common
block: drop bs_snapshots global variable
Wenchao Xia (3):
block: move snapshot code in block.c to block/snapshot.c
block: move qmp and info dump related code to block/qapi.c
block: dump snapshot and image info to specified output
block.c | 356 ++++------------------------------------
block/Makefile.objs | 1 +
block/qapi.c | 366 ++++++++++++++++++++++++++++++++++++++++++
block/snapshot.c | 157 ++++++++++++++++++
blockdev.c | 4 +-
configure | 20 ++-
hw/block/xen_disk.c | 8 +-
include/block/block.h | 31 +---
include/block/block_int.h | 1 +
include/block/qapi.h | 43 +++++
include/block/snapshot.h | 53 ++++++
qemu-img.c | 163 +------------------
savevm.c | 40 ++---
scripts/create_config | 11 +-
tests/qemu-iotests/030 | 99 ++++--------
tests/qemu-iotests/041 | 181 ++++++++-------------
tests/qemu-iotests/054.out | 2 +-
tests/qemu-iotests/iotests.py | 38 +++++
18 files changed, 843 insertions(+), 731 deletions(-)
create mode 100644 block/qapi.c
create mode 100644 block/snapshot.c
create mode 100644 include/block/qapi.h
create mode 100644 include/block/snapshot.h
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PULL 00/10] Block patches
2013-06-04 12:45 Kevin Wolf
@ 2013-06-17 21:17 ` Anthony Liguori
0 siblings, 0 replies; 26+ messages in thread
From: Anthony Liguori @ 2013-06-17 21:17 UTC (permalink / raw)
To: Kevin Wolf, anthony; +Cc: qemu-devel
Pulled. Thanks.
Regards,
Anthony Liguori
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] [PULL 00/10] Block patches
@ 2015-06-12 14:57 Stefan Hajnoczi
2015-06-15 9:42 ` Peter Maydell
0 siblings, 1 reply; 26+ messages in thread
From: Stefan Hajnoczi @ 2015-06-12 14:57 UTC (permalink / raw)
To: qemu-devel; +Cc: Kevin Wolf, Peter Maydell, Stefan Hajnoczi
The following changes since commit d8e3b729cf452d2689c8669f1ec18158db29fd5a:
Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging (2015-06-11 15:33:38 +0100)
are available in the git repository at:
git://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 2db33f88d2b340c049c576ad75d442e4b6ffe768:
qemu-iotests: expand test 093 to support group throttling (2015-06-12 14:00:00 +0100)
----------------------------------------------------------------
----------------------------------------------------------------
Alberto Garcia (7):
throttle: Add throttle group infrastructure
throttle: Add throttle group infrastructure tests
throttle: Add throttle group support
throttle: acquire the ThrottleGroup lock in bdrv_swap()
throttle: add the name of the ThrottleGroup to BlockDeviceInfo
throttle: Update throttle infrastructure copyright
qemu-iotests: expand test 093 to support group throttling
Benoît Canet (1):
throttle: Extract timers from ThrottleState into a separate structure
Kevin Wolf (1):
raw-posix: Fix .bdrv_co_get_block_status() for unaligned image size
Stefan Hajnoczi (1):
Revert "iothread: release iothread around aio_poll"
async.c | 8 +-
block.c | 38 ++-
block/Makefile.objs | 1 +
block/io.c | 71 ++----
block/qapi.c | 8 +-
block/raw-posix.c | 5 +-
block/throttle-groups.c | 496 ++++++++++++++++++++++++++++++++++++++++
blockdev.c | 38 ++-
hmp.c | 10 +-
include/block/block.h | 3 +-
include/block/block_int.h | 7 +-
include/block/throttle-groups.h | 46 ++++
include/qemu/throttle.h | 46 ++--
iothread.c | 11 +-
qapi/block-core.json | 29 ++-
qemu-options.hx | 1 +
qmp-commands.hx | 3 +-
tests/qemu-iotests/093 | 89 ++++---
tests/test-aio.c | 19 +-
tests/test-throttle.c | 163 +++++++++----
util/throttle.c | 81 ++++---
21 files changed, 954 insertions(+), 219 deletions(-)
create mode 100644 block/throttle-groups.c
create mode 100644 include/block/throttle-groups.h
--
2.4.2
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PULL 00/10] Block patches
2015-06-12 14:57 Stefan Hajnoczi
@ 2015-06-15 9:42 ` Peter Maydell
0 siblings, 0 replies; 26+ messages in thread
From: Peter Maydell @ 2015-06-15 9:42 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: Kevin Wolf, QEMU Developers
On 12 June 2015 at 15:57, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit d8e3b729cf452d2689c8669f1ec18158db29fd5a:
>
> Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging (2015-06-11 15:33:38 +0100)
>
> are available in the git repository at:
>
> git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 2db33f88d2b340c049c576ad75d442e4b6ffe768:
>
> qemu-iotests: expand test 093 to support group throttling (2015-06-12 14:00:00 +0100)
>
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] [PULL 00/10] Block patches
@ 2015-12-22 8:54 Stefan Hajnoczi
2015-12-22 14:47 ` Peter Maydell
0 siblings, 1 reply; 26+ messages in thread
From: Stefan Hajnoczi @ 2015-12-22 8:54 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Stefan Hajnoczi
The following changes since commit c688084506cf2cf2eba4ba9df4e91abb6e3dab83:
Merge remote-tracking branch 'remotes/berrange/tags/pull-qcrypto-secrets-base-2015-12-18-1' into staging (2015-12-18 17:04:15 +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 723697551a7e926abe7d3c7f2966012b8075143d:
sdhci: add optional quirk property to disable card insertion/removal interrupts (2015-12-22 16:34:26 +0800)
----------------------------------------------------------------
----------------------------------------------------------------
Andrew Baumann (2):
sdhci: don't raise a command index error for an unexpected response
sdhci: add optional quirk property to disable card insertion/removal
interrupts
Gonglei (1):
virtio-blk: trivial code optimization
Peter Crosthwaite (1):
sd: sdhci: Delete over-zealous power check
Stefan Hajnoczi (4):
block: add BlockLimits.max_iov field
block-backend: add blk_get_max_iov()
block: replace IOV_MAX with BlockLimits.max_iov
block/mirror: replace IOV_MAX with blk_get_max_iov()
Vladimir Sementsov-Ogievskiy (1):
parallels: add format spec
Yang Wei (1):
scripts/gdb: Fix a python exception in mtree.py
MAINTAINERS | 1 +
block/block-backend.c | 5 +
block/io.c | 10 +-
block/mirror.c | 6 +-
docs/specs/parallels.txt | 228 +++++++++++++++++++++++++++++++++++++++++
hw/block/virtio-blk.c | 28 ++---
hw/sd/sdhci.c | 10 +-
include/block/block_int.h | 3 +
include/hw/sd/sdhci.h | 1 +
include/sysemu/block-backend.h | 1 +
scripts/qemugdb/mtree.py | 10 +-
11 files changed, 272 insertions(+), 31 deletions(-)
create mode 100644 docs/specs/parallels.txt
--
2.5.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PULL 00/10] Block patches
2015-12-22 8:54 Stefan Hajnoczi
@ 2015-12-22 14:47 ` Peter Maydell
0 siblings, 0 replies; 26+ messages in thread
From: Peter Maydell @ 2015-12-22 14:47 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: QEMU Developers
On 22 December 2015 at 08:54, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit c688084506cf2cf2eba4ba9df4e91abb6e3dab83:
>
> Merge remote-tracking branch 'remotes/berrange/tags/pull-qcrypto-secrets-base-2015-12-18-1' into staging (2015-12-18 17:04:15 +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 723697551a7e926abe7d3c7f2966012b8075143d:
>
> sdhci: add optional quirk property to disable card insertion/removal interrupts (2015-12-22 16:34:26 +0800)
>
> ----------------------------------------------------------------
>
> ----------------------------------------------------------------
>
> Andrew Baumann (2):
> sdhci: don't raise a command index error for an unexpected response
> sdhci: add optional quirk property to disable card insertion/removal
> interrupts
>
> Gonglei (1):
> virtio-blk: trivial code optimization
>
> Peter Crosthwaite (1):
> sd: sdhci: Delete over-zealous power check
>
> Stefan Hajnoczi (4):
> block: add BlockLimits.max_iov field
> block-backend: add blk_get_max_iov()
> block: replace IOV_MAX with BlockLimits.max_iov
> block/mirror: replace IOV_MAX with blk_get_max_iov()
>
> Vladimir Sementsov-Ogievskiy (1):
> parallels: add format spec
>
> Yang Wei (1):
> scripts/gdb: Fix a python exception in mtree.py
>
> MAINTAINERS | 1 +
> block/block-backend.c | 5 +
> block/io.c | 10 +-
> block/mirror.c | 6 +-
> docs/specs/parallels.txt | 228 +++++++++++++++++++++++++++++++++++++++++
> hw/block/virtio-blk.c | 28 ++---
> hw/sd/sdhci.c | 10 +-
> include/block/block_int.h | 3 +
> include/hw/sd/sdhci.h | 1 +
> include/sysemu/block-backend.h | 1 +
> scripts/qemugdb/mtree.py | 10 +-
> 11 files changed, 272 insertions(+), 31 deletions(-)
> create mode 100644 docs/specs/parallels.txt
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] [PULL 00/10] Block patches
@ 2016-06-29 3:10 Jeff Cody
2016-06-29 18:13 ` Peter Maydell
0 siblings, 1 reply; 26+ messages in thread
From: Jeff Cody @ 2016-06-29 3:10 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel
The following changes since commit d7f30403576f04f1f3a5fb5a1d18cba8dfa7a6d2:
cputlb: don't cpu_abort() if guest tries to execute outside RAM or RAM (2016-06-28 18:50:53 +0100)
are available in the git repository at:
git@github.com:codyprime/qemu-kvm-jtc.git tags/block-pull-request
for you to fetch changes up to 15d6729850728ee49859711dd40b00d8d85d94ee:
mirror: fix misleading comments (2016-06-28 23:08:25 -0400)
----------------------------------------------------------------
----------------------------------------------------------------
Changlong Xie (2):
blockjob: assert(cb) when create job
mirror: fix misleading comments
Denis V. Lunev (1):
mirror: fix trace_mirror_yield_in_flight usage in mirror_iteration()
Jeff Cody (1):
block/gluster: add support for selecting debug logging level
John Snow (3):
mirror: clarify mirror_do_read return code
mirror: limit niov to IOV_MAX elements, again
iotests: add small-granularity mirror test
Niels de Vos (1):
block/gluster: add support for SEEK_DATA/SEEK_HOLE
Peter Lieven (2):
block/nfs: refuse readahead if cache.direct is on
block/nfs: add support for libnfs pagecache
block/backup.c | 1 -
block/gluster.c | 230 +++++++++++++++++++++++++++++++++++++++++++--
block/mirror.c | 14 ++-
block/nfs.c | 55 ++++++++++-
blockjob.c | 1 +
tests/qemu-iotests/041 | 30 ++++++
tests/qemu-iotests/041.out | 4 +-
7 files changed, 317 insertions(+), 18 deletions(-)
--
1.9.3
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PULL 00/10] Block patches
2016-06-29 3:10 Jeff Cody
@ 2016-06-29 18:13 ` Peter Maydell
0 siblings, 0 replies; 26+ messages in thread
From: Peter Maydell @ 2016-06-29 18:13 UTC (permalink / raw)
To: Jeff Cody; +Cc: Qemu-block, QEMU Developers
On 29 June 2016 at 04:10, Jeff Cody <jcody@redhat.com> wrote:
> The following changes since commit d7f30403576f04f1f3a5fb5a1d18cba8dfa7a6d2:
>
> cputlb: don't cpu_abort() if guest tries to execute outside RAM or RAM (2016-06-28 18:50:53 +0100)
>
> are available in the git repository at:
>
> git@github.com:codyprime/qemu-kvm-jtc.git tags/block-pull-request
>
> for you to fetch changes up to 15d6729850728ee49859711dd40b00d8d85d94ee:
>
> mirror: fix misleading comments (2016-06-28 23:08:25 -0400)
>
> ----------------------------------------------------------------
>
> ----------------------------------------------------------------
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 26+ messages in thread
* [Qemu-devel] [PULL 00/10] Block patches
@ 2017-12-18 21:08 Jeff Cody
2017-12-19 19:10 ` Peter Maydell
0 siblings, 1 reply; 26+ messages in thread
From: Jeff Cody @ 2017-12-18 21:08 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, vsementsov, jsnow, qemu-devel
The following changes since commit 411ad78115ebeb3411cf4b7622784b93dfabe259:
Merge remote-tracking branch 'remotes/stefanberger/tags/pull-tpm-2017-12-15-1' into staging (2017-12-17 15:27:41 +0000)
are available in the git repository at:
git://github.com/codyprime/qemu-kvm-jtc.git tags/block-pull-request
for you to fetch changes up to 996922de45299878cdc4c15b72b19edf2bc618a4:
block/curl: fix minor memory leaks (2017-12-18 15:44:39 -0500)
----------------------------------------------------------------
Blockjob and protocol patches
----------------------------------------------------------------
Jeff Cody (4):
block/sheepdog: remove spurious NULL check
block/sheepdog: code beautification
block/curl: check error return of curl_global_init()
block/curl: fix minor memory leaks
John Snow (1):
blockjob: kick jobs on set-speed
Vladimir Sementsov-Ogievskiy (5):
hbitmap: add next_zero function
backup: move from done_bitmap to copy_bitmap
backup: init copy_bitmap from sync_bitmap for incremental
backup: simplify non-dirty bits progress processing
backup: use copy_bitmap in incremental backup
block/backup.c | 116 +++++++++++++++++-------------
block/curl.c | 24 +++++--
block/dirty-bitmap.c | 5 ++
block/sheepdog.c | 166 +++++++++++++++++++++----------------------
blockjob.c | 30 +++++++-
include/block/dirty-bitmap.h | 1 +
include/qemu/hbitmap.h | 8 +++
tests/test-hbitmap.c | 61 ++++++++++++++++
util/hbitmap.c | 39 ++++++++++
9 files changed, 309 insertions(+), 141 deletions(-)
--
2.9.5
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [Qemu-devel] [PULL 00/10] Block patches
2017-12-18 21:08 Jeff Cody
@ 2017-12-19 19:10 ` Peter Maydell
0 siblings, 0 replies; 26+ messages in thread
From: Peter Maydell @ 2017-12-19 19:10 UTC (permalink / raw)
To: Jeff Cody
Cc: Qemu-block, Vladimir Sementsov-Ogievskiy, John Snow,
QEMU Developers
On 18 December 2017 at 21:08, Jeff Cody <jcody@redhat.com> wrote:
> The following changes since commit 411ad78115ebeb3411cf4b7622784b93dfabe259:
>
> Merge remote-tracking branch 'remotes/stefanberger/tags/pull-tpm-2017-12-15-1' into staging (2017-12-17 15:27:41 +0000)
>
> are available in the git repository at:
>
> git://github.com/codyprime/qemu-kvm-jtc.git tags/block-pull-request
>
> for you to fetch changes up to 996922de45299878cdc4c15b72b19edf2bc618a4:
>
> block/curl: fix minor memory leaks (2017-12-18 15:44:39 -0500)
>
> ----------------------------------------------------------------
> Blockjob and protocol patches
> ----------------------------------------------------------------
>
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2017-12-19 19:11 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-30 16:32 [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 01/10] virtio: Factor virtqueue_map_sg out Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 02/10] virtio-blk: Fix migration of queued requests Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 03/10] block: Fix image re-open in bdrv_commit Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 04/10] sheepdog: remove unnecessary includes Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 05/10] qemu-img rebase: Open new backing file read-only Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 06/10] vvfat: fat_chksum(): fix access above array bounds Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 07/10] nbd: Introduce NBD named exports Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 08/10] posix-aio-compat: Fix async_conmtext for ioctl Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 09/10] monitor: make 'info snapshots' show only fully available snapshots Kevin Wolf
2010-08-30 16:32 ` [Qemu-devel] [PATCH 10/10] savevm: Generate a name when run without one Kevin Wolf
2010-09-06 15:07 ` [Qemu-devel] [PULL 00/10] Block patches Kevin Wolf
-- strict thread matches above, loose matches on Subject: below --
2010-11-04 13:15 Kevin Wolf
2011-04-13 12:05 Kevin Wolf
2012-08-15 13:56 Kevin Wolf
2012-08-15 19:49 ` Anthony Liguori
2013-06-04 12:45 Kevin Wolf
2013-06-17 21:17 ` Anthony Liguori
2015-06-12 14:57 Stefan Hajnoczi
2015-06-15 9:42 ` Peter Maydell
2015-12-22 8:54 Stefan Hajnoczi
2015-12-22 14:47 ` Peter Maydell
2016-06-29 3:10 Jeff Cody
2016-06-29 18:13 ` Peter Maydell
2017-12-18 21:08 Jeff Cody
2017-12-19 19:10 ` Peter Maydell
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).