Compare commits
33 Commits
pull-vga-2
...
pull-input
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b065e275a8 | ||
|
|
ce47d3d427 | ||
|
|
0263b3a72f | ||
|
|
2d73837466 | ||
|
|
1a782629f6 | ||
|
|
848c4d4480 | ||
|
|
27a7bbcdf9 | ||
|
|
441330f714 | ||
|
|
a263bac192 | ||
|
|
d44122ecd0 | ||
|
|
5158ac5830 | ||
|
|
3ef3dcef56 | ||
|
|
9bf8027dde | ||
|
|
3f647b510f | ||
|
|
c1c71e49bc | ||
|
|
1759386b7c | ||
|
|
0145b4e130 | ||
|
|
c4189d85bc | ||
|
|
4e876bcf2b | ||
|
|
40a99aace3 | ||
|
|
1fd06db03d | ||
|
|
c229708848 | ||
|
|
143605a200 | ||
|
|
af74e865c4 | ||
|
|
42bb626f7e | ||
|
|
9ca3003df3 | ||
|
|
39bf92dd70 | ||
|
|
a77fd4bb29 | ||
|
|
4e71220387 | ||
|
|
4553e10360 | ||
|
|
dc1ffa6661 | ||
|
|
3a15cc0e1e | ||
|
|
5144fe3605 |
@@ -985,6 +985,7 @@ F: tests/intel-hda-test.c
|
|||||||
|
|
||||||
Block layer core
|
Block layer core
|
||||||
M: Kevin Wolf <kwolf@redhat.com>
|
M: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
M: Max Reitz <mreitz@redhat.com>
|
||||||
L: qemu-block@nongnu.org
|
L: qemu-block@nongnu.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: block*
|
F: block*
|
||||||
@@ -998,6 +999,7 @@ T: git git://repo.or.cz/qemu/kevin.git block
|
|||||||
|
|
||||||
Block I/O path
|
Block I/O path
|
||||||
M: Stefan Hajnoczi <stefanha@redhat.com>
|
M: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
|
M: Fam Zheng <famz@redhat.com>
|
||||||
L: qemu-block@nongnu.org
|
L: qemu-block@nongnu.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: async.c
|
F: async.c
|
||||||
@@ -1568,6 +1570,7 @@ F: block/win32-aio.c
|
|||||||
|
|
||||||
qcow2
|
qcow2
|
||||||
M: Kevin Wolf <kwolf@redhat.com>
|
M: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
M: Max Reitz <mreitz@redhat.com>
|
||||||
L: qemu-block@nongnu.org
|
L: qemu-block@nongnu.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: block/qcow2*
|
F: block/qcow2*
|
||||||
@@ -1580,6 +1583,7 @@ F: block/qcow.c
|
|||||||
|
|
||||||
blkdebug
|
blkdebug
|
||||||
M: Kevin Wolf <kwolf@redhat.com>
|
M: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
M: Max Reitz <mreitz@redhat.com>
|
||||||
L: qemu-block@nongnu.org
|
L: qemu-block@nongnu.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: block/blkdebug.c
|
F: block/blkdebug.c
|
||||||
|
|||||||
45
block/io.c
45
block/io.c
@@ -253,6 +253,47 @@ static void bdrv_drain_recurse(BlockDriverState *bs)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
Coroutine *co;
|
||||||
|
BlockDriverState *bs;
|
||||||
|
QEMUBH *bh;
|
||||||
|
bool done;
|
||||||
|
} BdrvCoDrainData;
|
||||||
|
|
||||||
|
static void bdrv_co_drain_bh_cb(void *opaque)
|
||||||
|
{
|
||||||
|
BdrvCoDrainData *data = opaque;
|
||||||
|
Coroutine *co = data->co;
|
||||||
|
|
||||||
|
qemu_bh_delete(data->bh);
|
||||||
|
bdrv_drain(data->bs);
|
||||||
|
data->done = true;
|
||||||
|
qemu_coroutine_enter(co, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void coroutine_fn bdrv_co_drain(BlockDriverState *bs)
|
||||||
|
{
|
||||||
|
BdrvCoDrainData data;
|
||||||
|
|
||||||
|
/* Calling bdrv_drain() from a BH ensures the current coroutine yields and
|
||||||
|
* other coroutines run if they were queued from
|
||||||
|
* qemu_co_queue_run_restart(). */
|
||||||
|
|
||||||
|
assert(qemu_in_coroutine());
|
||||||
|
data = (BdrvCoDrainData) {
|
||||||
|
.co = qemu_coroutine_self(),
|
||||||
|
.bs = bs,
|
||||||
|
.done = false,
|
||||||
|
.bh = aio_bh_new(bdrv_get_aio_context(bs), bdrv_co_drain_bh_cb, &data),
|
||||||
|
};
|
||||||
|
qemu_bh_schedule(data.bh);
|
||||||
|
|
||||||
|
qemu_coroutine_yield();
|
||||||
|
/* If we are resumed from some other event (such as an aio completion or a
|
||||||
|
* timer callback), it is a bug in the caller that should be fixed. */
|
||||||
|
assert(data.done);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wait for pending requests to complete on a single BlockDriverState subtree,
|
* Wait for pending requests to complete on a single BlockDriverState subtree,
|
||||||
* and suspend block driver's internal I/O until next request arrives.
|
* and suspend block driver's internal I/O until next request arrives.
|
||||||
@@ -269,6 +310,10 @@ void bdrv_drain(BlockDriverState *bs)
|
|||||||
bool busy = true;
|
bool busy = true;
|
||||||
|
|
||||||
bdrv_drain_recurse(bs);
|
bdrv_drain_recurse(bs);
|
||||||
|
if (qemu_in_coroutine()) {
|
||||||
|
bdrv_co_drain(bs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
while (busy) {
|
while (busy) {
|
||||||
/* Keep iterating */
|
/* Keep iterating */
|
||||||
bdrv_flush_io_queue(bs);
|
bdrv_flush_io_queue(bs);
|
||||||
|
|||||||
@@ -650,7 +650,7 @@ static void coroutine_fn mirror_run(void *opaque)
|
|||||||
* mirror_populate runs.
|
* mirror_populate runs.
|
||||||
*/
|
*/
|
||||||
trace_mirror_before_drain(s, cnt);
|
trace_mirror_before_drain(s, cnt);
|
||||||
bdrv_drain(bs);
|
bdrv_co_drain(bs);
|
||||||
cnt = bdrv_get_dirty_count(s->dirty_bitmap);
|
cnt = bdrv_get_dirty_count(s->dirty_bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1986,6 +1986,10 @@ static int qcow2_change_backing_file(BlockDriverState *bs,
|
|||||||
{
|
{
|
||||||
BDRVQcow2State *s = bs->opaque;
|
BDRVQcow2State *s = bs->opaque;
|
||||||
|
|
||||||
|
if (backing_file && strlen(backing_file) > 1023) {
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
|
pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
|
||||||
pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
|
pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
|
||||||
|
|
||||||
|
|||||||
@@ -775,7 +775,7 @@ static int create_dynamic_disk(BlockBackend *blk, uint8_t *buf,
|
|||||||
num_bat_entries = (total_sectors + block_size / 512) / (block_size / 512);
|
num_bat_entries = (total_sectors + block_size / 512) / (block_size / 512);
|
||||||
|
|
||||||
ret = blk_pwrite(blk, offset, buf, HEADER_SIZE);
|
ret = blk_pwrite(blk, offset, buf, HEADER_SIZE);
|
||||||
if (ret) {
|
if (ret < 0) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -121,6 +121,8 @@ static const unsigned int keymap_qcode[Q_KEY_CODE__MAX] = {
|
|||||||
|
|
||||||
[Q_KEY_CODE_CTRL_R] = KEY_RIGHTCTRL,
|
[Q_KEY_CODE_CTRL_R] = KEY_RIGHTCTRL,
|
||||||
[Q_KEY_CODE_SYSRQ] = KEY_SYSRQ,
|
[Q_KEY_CODE_SYSRQ] = KEY_SYSRQ,
|
||||||
|
[Q_KEY_CODE_PRINT] = KEY_SYSRQ,
|
||||||
|
[Q_KEY_CODE_PAUSE] = KEY_PAUSE,
|
||||||
[Q_KEY_CODE_ALT_R] = KEY_RIGHTALT,
|
[Q_KEY_CODE_ALT_R] = KEY_RIGHTALT,
|
||||||
|
|
||||||
[Q_KEY_CODE_HOME] = KEY_HOME,
|
[Q_KEY_CODE_HOME] = KEY_HOME,
|
||||||
@@ -482,12 +484,12 @@ static struct virtio_input_config virtio_tablet_config[] = {
|
|||||||
.select = VIRTIO_INPUT_CFG_ABS_INFO,
|
.select = VIRTIO_INPUT_CFG_ABS_INFO,
|
||||||
.subsel = ABS_X,
|
.subsel = ABS_X,
|
||||||
.size = sizeof(virtio_input_absinfo),
|
.size = sizeof(virtio_input_absinfo),
|
||||||
.u.abs.max = const_le32(INPUT_EVENT_ABS_SIZE),
|
.u.abs.max = const_le32(INPUT_EVENT_ABS_SIZE - 1),
|
||||||
},{
|
},{
|
||||||
.select = VIRTIO_INPUT_CFG_ABS_INFO,
|
.select = VIRTIO_INPUT_CFG_ABS_INFO,
|
||||||
.subsel = ABS_Y,
|
.subsel = ABS_Y,
|
||||||
.size = sizeof(virtio_input_absinfo),
|
.size = sizeof(virtio_input_absinfo),
|
||||||
.u.abs.max = const_le32(INPUT_EVENT_ABS_SIZE),
|
.u.abs.max = const_le32(INPUT_EVENT_ABS_SIZE - 1),
|
||||||
},
|
},
|
||||||
{ /* end of list */ },
|
{ /* end of list */ },
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -70,13 +70,39 @@ static void virtio_input_bits_config(VirtIOInputHost *vih,
|
|||||||
virtio_input_add_config(VIRTIO_INPUT(vih), &bits);
|
virtio_input_add_config(VIRTIO_INPUT(vih), &bits);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void virtio_input_abs_config(VirtIOInputHost *vih, int axis)
|
||||||
|
{
|
||||||
|
virtio_input_config config;
|
||||||
|
struct input_absinfo absinfo;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rc = ioctl(vih->fd, EVIOCGABS(axis), &absinfo);
|
||||||
|
if (rc < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(&config, 0, sizeof(config));
|
||||||
|
config.select = VIRTIO_INPUT_CFG_ABS_INFO;
|
||||||
|
config.subsel = axis;
|
||||||
|
config.size = sizeof(virtio_input_absinfo);
|
||||||
|
|
||||||
|
config.u.abs.min = cpu_to_le32(absinfo.minimum);
|
||||||
|
config.u.abs.max = cpu_to_le32(absinfo.maximum);
|
||||||
|
config.u.abs.fuzz = cpu_to_le32(absinfo.fuzz);
|
||||||
|
config.u.abs.flat = cpu_to_le32(absinfo.flat);
|
||||||
|
config.u.abs.res = cpu_to_le32(absinfo.resolution);
|
||||||
|
|
||||||
|
virtio_input_add_config(VIRTIO_INPUT(vih), &config);
|
||||||
|
}
|
||||||
|
|
||||||
static void virtio_input_host_realize(DeviceState *dev, Error **errp)
|
static void virtio_input_host_realize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
VirtIOInputHost *vih = VIRTIO_INPUT_HOST(dev);
|
VirtIOInputHost *vih = VIRTIO_INPUT_HOST(dev);
|
||||||
VirtIOInput *vinput = VIRTIO_INPUT(dev);
|
VirtIOInput *vinput = VIRTIO_INPUT(dev);
|
||||||
virtio_input_config id;
|
virtio_input_config id, *abs;
|
||||||
struct input_id ids;
|
struct input_id ids;
|
||||||
int rc, ver;
|
int rc, ver, i, axis;
|
||||||
|
uint8_t byte;
|
||||||
|
|
||||||
if (!vih->evdev) {
|
if (!vih->evdev) {
|
||||||
error_setg(errp, "evdev property is required");
|
error_setg(errp, "evdev property is required");
|
||||||
@@ -125,6 +151,23 @@ static void virtio_input_host_realize(DeviceState *dev, Error **errp)
|
|||||||
virtio_input_bits_config(vih, EV_ABS, ABS_CNT);
|
virtio_input_bits_config(vih, EV_ABS, ABS_CNT);
|
||||||
virtio_input_bits_config(vih, EV_MSC, MSC_CNT);
|
virtio_input_bits_config(vih, EV_MSC, MSC_CNT);
|
||||||
virtio_input_bits_config(vih, EV_SW, SW_CNT);
|
virtio_input_bits_config(vih, EV_SW, SW_CNT);
|
||||||
|
virtio_input_bits_config(vih, EV_LED, LED_CNT);
|
||||||
|
|
||||||
|
abs = virtio_input_find_config(VIRTIO_INPUT(vih),
|
||||||
|
VIRTIO_INPUT_CFG_EV_BITS, EV_ABS);
|
||||||
|
if (abs) {
|
||||||
|
for (i = 0; i < abs->size; i++) {
|
||||||
|
byte = abs->u.bitmap[i];
|
||||||
|
axis = 8 * i;
|
||||||
|
while (byte) {
|
||||||
|
if (byte & 1) {
|
||||||
|
virtio_input_abs_config(vih, axis);
|
||||||
|
}
|
||||||
|
axis++;
|
||||||
|
byte >>= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
qemu_set_fd_handler(vih->fd, virtio_input_host_event, NULL, vih);
|
qemu_set_fd_handler(vih->fd, virtio_input_host_event, NULL, vih);
|
||||||
return;
|
return;
|
||||||
@@ -145,6 +188,28 @@ static void virtio_input_host_unrealize(DeviceState *dev, Error **errp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void virtio_input_host_handle_status(VirtIOInput *vinput,
|
||||||
|
virtio_input_event *event)
|
||||||
|
{
|
||||||
|
VirtIOInputHost *vih = VIRTIO_INPUT_HOST(vinput);
|
||||||
|
struct input_event evdev;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
if (gettimeofday(&evdev.time, NULL)) {
|
||||||
|
perror("virtio_input_host_handle_status: gettimeofday");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
evdev.type = le16_to_cpu(event->type);
|
||||||
|
evdev.code = le16_to_cpu(event->code);
|
||||||
|
evdev.value = le32_to_cpu(event->value);
|
||||||
|
|
||||||
|
rc = write(vih->fd, &evdev, sizeof(evdev));
|
||||||
|
if (rc == -1) {
|
||||||
|
perror("virtio_input_host_handle_status: write");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static const VMStateDescription vmstate_virtio_input_host = {
|
static const VMStateDescription vmstate_virtio_input_host = {
|
||||||
.name = "virtio-input-host",
|
.name = "virtio-input-host",
|
||||||
.unmigratable = 1,
|
.unmigratable = 1,
|
||||||
@@ -164,6 +229,7 @@ static void virtio_input_host_class_init(ObjectClass *klass, void *data)
|
|||||||
dc->props = virtio_input_host_properties;
|
dc->props = virtio_input_host_properties;
|
||||||
vic->realize = virtio_input_host_realize;
|
vic->realize = virtio_input_host_realize;
|
||||||
vic->unrealize = virtio_input_host_unrealize;
|
vic->unrealize = virtio_input_host_unrealize;
|
||||||
|
vic->handle_status = virtio_input_host_handle_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void virtio_input_host_init(Object *obj)
|
static void virtio_input_host_init(Object *obj)
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
#include "standard-headers/linux/input.h"
|
#include "standard-headers/linux/input.h"
|
||||||
|
|
||||||
|
#define VIRTIO_INPUT_VM_VERSION 1
|
||||||
|
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
|
|
||||||
void virtio_input_send(VirtIOInput *vinput, virtio_input_event *event)
|
void virtio_input_send(VirtIOInput *vinput, virtio_input_event *event)
|
||||||
@@ -97,9 +99,9 @@ static void virtio_input_handle_sts(VirtIODevice *vdev, VirtQueue *vq)
|
|||||||
virtio_notify(vdev, vinput->sts);
|
virtio_notify(vdev, vinput->sts);
|
||||||
}
|
}
|
||||||
|
|
||||||
static virtio_input_config *virtio_input_find_config(VirtIOInput *vinput,
|
virtio_input_config *virtio_input_find_config(VirtIOInput *vinput,
|
||||||
uint8_t select,
|
uint8_t select,
|
||||||
uint8_t subsel)
|
uint8_t subsel)
|
||||||
{
|
{
|
||||||
VirtIOInputConfig *cfg;
|
VirtIOInputConfig *cfg;
|
||||||
|
|
||||||
@@ -214,6 +216,38 @@ static void virtio_input_reset(VirtIODevice *vdev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void virtio_input_save(QEMUFile *f, void *opaque)
|
||||||
|
{
|
||||||
|
VirtIOInput *vinput = opaque;
|
||||||
|
VirtIODevice *vdev = VIRTIO_DEVICE(vinput);
|
||||||
|
|
||||||
|
virtio_save(vdev, f);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int virtio_input_load(QEMUFile *f, void *opaque, int version_id)
|
||||||
|
{
|
||||||
|
VirtIOInput *vinput = opaque;
|
||||||
|
VirtIOInputClass *vic = VIRTIO_INPUT_GET_CLASS(vinput);
|
||||||
|
VirtIODevice *vdev = VIRTIO_DEVICE(vinput);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (version_id != VIRTIO_INPUT_VM_VERSION) {
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = virtio_load(vdev, f, version_id);
|
||||||
|
if (ret) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* post_load() */
|
||||||
|
vinput->active = vdev->status & VIRTIO_CONFIG_S_DRIVER_OK;
|
||||||
|
if (vic->change_active) {
|
||||||
|
vic->change_active(vinput);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void virtio_input_device_realize(DeviceState *dev, Error **errp)
|
static void virtio_input_device_realize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
VirtIOInputClass *vic = VIRTIO_INPUT_GET_CLASS(dev);
|
VirtIOInputClass *vic = VIRTIO_INPUT_GET_CLASS(dev);
|
||||||
@@ -245,14 +279,20 @@ static void virtio_input_device_realize(DeviceState *dev, Error **errp)
|
|||||||
vinput->cfg_size);
|
vinput->cfg_size);
|
||||||
vinput->evt = virtio_add_queue(vdev, 64, virtio_input_handle_evt);
|
vinput->evt = virtio_add_queue(vdev, 64, virtio_input_handle_evt);
|
||||||
vinput->sts = virtio_add_queue(vdev, 64, virtio_input_handle_sts);
|
vinput->sts = virtio_add_queue(vdev, 64, virtio_input_handle_sts);
|
||||||
|
|
||||||
|
register_savevm(dev, "virtio-input", -1, VIRTIO_INPUT_VM_VERSION,
|
||||||
|
virtio_input_save, virtio_input_load, vinput);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void virtio_input_device_unrealize(DeviceState *dev, Error **errp)
|
static void virtio_input_device_unrealize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
VirtIOInputClass *vic = VIRTIO_INPUT_GET_CLASS(dev);
|
VirtIOInputClass *vic = VIRTIO_INPUT_GET_CLASS(dev);
|
||||||
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
||||||
|
VirtIOInput *vinput = VIRTIO_INPUT(dev);
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
|
unregister_savevm(dev, "virtio-input", vinput);
|
||||||
|
|
||||||
if (vic->unrealize) {
|
if (vic->unrealize) {
|
||||||
vic->unrealize(dev, &local_err);
|
vic->unrealize(dev, &local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
|
|||||||
@@ -236,8 +236,18 @@ static ssize_t stellaris_enet_receive(NetClientState *nc, const uint8_t *buf, si
|
|||||||
n = s->next_packet + s->np;
|
n = s->next_packet + s->np;
|
||||||
if (n >= 31)
|
if (n >= 31)
|
||||||
n -= 31;
|
n -= 31;
|
||||||
s->np++;
|
|
||||||
|
|
||||||
|
if (size >= sizeof(s->rx[n].data) - 6) {
|
||||||
|
/* If the packet won't fit into the
|
||||||
|
* emulated 2K RAM, this is reported
|
||||||
|
* as a FIFO overrun error.
|
||||||
|
*/
|
||||||
|
s->ris |= SE_INT_FOV;
|
||||||
|
stellaris_enet_update(s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
s->np++;
|
||||||
s->rx[n].len = size + 6;
|
s->rx[n].len = size + 6;
|
||||||
p = s->rx[n].data;
|
p = s->rx[n].data;
|
||||||
*(p++) = (size + 6);
|
*(p++) = (size + 6);
|
||||||
|
|||||||
@@ -372,6 +372,7 @@ int bdrv_flush(BlockDriverState *bs);
|
|||||||
int coroutine_fn bdrv_co_flush(BlockDriverState *bs);
|
int coroutine_fn bdrv_co_flush(BlockDriverState *bs);
|
||||||
void bdrv_close_all(void);
|
void bdrv_close_all(void);
|
||||||
void bdrv_drain(BlockDriverState *bs);
|
void bdrv_drain(BlockDriverState *bs);
|
||||||
|
void coroutine_fn bdrv_co_drain(BlockDriverState *bs);
|
||||||
void bdrv_drain_all(void);
|
void bdrv_drain_all(void);
|
||||||
|
|
||||||
int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors);
|
int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors);
|
||||||
|
|||||||
@@ -13,20 +13,6 @@ typedef struct virtio_input_absinfo virtio_input_absinfo;
|
|||||||
typedef struct virtio_input_config virtio_input_config;
|
typedef struct virtio_input_config virtio_input_config;
|
||||||
typedef struct virtio_input_event virtio_input_event;
|
typedef struct virtio_input_event virtio_input_event;
|
||||||
|
|
||||||
#if defined(HOST_WORDS_BIGENDIAN)
|
|
||||||
# define const_le32(_x) \
|
|
||||||
(((_x & 0x000000ffU) << 24) | \
|
|
||||||
((_x & 0x0000ff00U) << 8) | \
|
|
||||||
((_x & 0x00ff0000U) >> 8) | \
|
|
||||||
((_x & 0xff000000U) >> 24))
|
|
||||||
# define const_le16(_x) \
|
|
||||||
(((_x & 0x00ff) << 8) | \
|
|
||||||
((_x & 0xff00) >> 8))
|
|
||||||
#else
|
|
||||||
# define const_le32(_x) (_x)
|
|
||||||
# define const_le16(_x) (_x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
/* qemu internals */
|
/* qemu internals */
|
||||||
|
|
||||||
@@ -111,6 +97,9 @@ struct VirtIOInputHost {
|
|||||||
void virtio_input_send(VirtIOInput *vinput, virtio_input_event *event);
|
void virtio_input_send(VirtIOInput *vinput, virtio_input_event *event);
|
||||||
void virtio_input_init_config(VirtIOInput *vinput,
|
void virtio_input_init_config(VirtIOInput *vinput,
|
||||||
virtio_input_config *config);
|
virtio_input_config *config);
|
||||||
|
virtio_input_config *virtio_input_find_config(VirtIOInput *vinput,
|
||||||
|
uint8_t select,
|
||||||
|
uint8_t subsel);
|
||||||
void virtio_input_add_config(VirtIOInput *vinput,
|
void virtio_input_add_config(VirtIOInput *vinput,
|
||||||
virtio_input_config *config);
|
virtio_input_config *config);
|
||||||
void virtio_input_idstr_config(VirtIOInput *vinput,
|
void virtio_input_idstr_config(VirtIOInput *vinput,
|
||||||
|
|||||||
@@ -125,6 +125,25 @@ static inline uint32_t qemu_bswap_len(uint32_t value, int len)
|
|||||||
return bswap32(value) >> (32 - 8 * len);
|
return bswap32(value) >> (32 - 8 * len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Same as cpu_to_le{16,23}, except that gcc will figure the result is
|
||||||
|
* a compile-time constant if you pass in a constant. So this can be
|
||||||
|
* used to initialize static variables.
|
||||||
|
*/
|
||||||
|
#if defined(HOST_WORDS_BIGENDIAN)
|
||||||
|
# define const_le32(_x) \
|
||||||
|
((((_x) & 0x000000ffU) << 24) | \
|
||||||
|
(((_x) & 0x0000ff00U) << 8) | \
|
||||||
|
(((_x) & 0x00ff0000U) >> 8) | \
|
||||||
|
(((_x) & 0xff000000U) >> 24))
|
||||||
|
# define const_le16(_x) \
|
||||||
|
((((_x) & 0x00ff) << 8) | \
|
||||||
|
(((_x) & 0xff00) >> 8))
|
||||||
|
#else
|
||||||
|
# define const_le32(_x) (_x)
|
||||||
|
# define const_le16(_x) (_x)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Unions for reinterpreting between floats and integers. */
|
/* Unions for reinterpreting between floats and integers. */
|
||||||
|
|
||||||
typedef union {
|
typedef union {
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
#include "block/block_int.h"
|
#include "block/block_int.h"
|
||||||
#include "block/blockjob.h"
|
#include "block/blockjob.h"
|
||||||
#include "block/qapi.h"
|
#include "block/qapi.h"
|
||||||
|
#include "crypto/init.h"
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
|
|
||||||
#define QEMU_IMG_VERSION "qemu-img version " QEMU_VERSION QEMU_PKGVERSION \
|
#define QEMU_IMG_VERSION "qemu-img version " QEMU_VERSION QEMU_PKGVERSION \
|
||||||
@@ -256,7 +257,7 @@ static BlockBackend *img_open_opts(const char *optstr,
|
|||||||
options = qemu_opts_to_qdict(opts, NULL);
|
options = qemu_opts_to_qdict(opts, NULL);
|
||||||
blk = blk_new_open(NULL, NULL, options, flags, &local_err);
|
blk = blk_new_open(NULL, NULL, options, flags, &local_err);
|
||||||
if (!blk) {
|
if (!blk) {
|
||||||
error_reportf_err(local_err, "Could not open '%s'", optstr);
|
error_reportf_err(local_err, "Could not open '%s': ", optstr);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
blk_set_enable_write_cache(blk, !writethrough);
|
blk_set_enable_write_cache(blk, !writethrough);
|
||||||
@@ -3486,6 +3487,11 @@ int main(int argc, char **argv)
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (qcrypto_init(&local_error) < 0) {
|
||||||
|
error_reportf_err(local_error, "cannot initialize crypto: ");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
module_call_init(MODULE_INIT_QOM);
|
module_call_init(MODULE_INIT_QOM);
|
||||||
bdrv_init();
|
bdrv_init();
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include "sysemu/block-backend.h"
|
#include "sysemu/block-backend.h"
|
||||||
#include "block/block_int.h"
|
#include "block/block_int.h"
|
||||||
#include "trace/control.h"
|
#include "trace/control.h"
|
||||||
|
#include "crypto/init.h"
|
||||||
|
|
||||||
#define CMD_NOFILE_OK 0x01
|
#define CMD_NOFILE_OK 0x01
|
||||||
|
|
||||||
@@ -443,6 +444,11 @@ int main(int argc, char **argv)
|
|||||||
progname = basename(argv[0]);
|
progname = basename(argv[0]);
|
||||||
qemu_init_exec_dir(argv[0]);
|
qemu_init_exec_dir(argv[0]);
|
||||||
|
|
||||||
|
if (qcrypto_init(&local_error) < 0) {
|
||||||
|
error_reportf_err(local_error, "cannot initialize crypto: ");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
module_call_init(MODULE_INIT_QOM);
|
module_call_init(MODULE_INIT_QOM);
|
||||||
qemu_add_opts(&qemu_object_opts);
|
qemu_add_opts(&qemu_object_opts);
|
||||||
bdrv_init();
|
bdrv_init();
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#include "qapi/qmp/qstring.h"
|
#include "qapi/qmp/qstring.h"
|
||||||
#include "qom/object_interfaces.h"
|
#include "qom/object_interfaces.h"
|
||||||
#include "io/channel-socket.h"
|
#include "io/channel-socket.h"
|
||||||
|
#include "crypto/init.h"
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
@@ -519,6 +520,12 @@ int main(int argc, char **argv)
|
|||||||
memset(&sa_sigterm, 0, sizeof(sa_sigterm));
|
memset(&sa_sigterm, 0, sizeof(sa_sigterm));
|
||||||
sa_sigterm.sa_handler = termsig_handler;
|
sa_sigterm.sa_handler = termsig_handler;
|
||||||
sigaction(SIGTERM, &sa_sigterm, NULL);
|
sigaction(SIGTERM, &sa_sigterm, NULL);
|
||||||
|
|
||||||
|
if (qcrypto_init(&local_err) < 0) {
|
||||||
|
error_reportf_err(local_err, "cannot initialize crypto: ");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
module_call_init(MODULE_INIT_QOM);
|
module_call_init(MODULE_INIT_QOM);
|
||||||
qemu_add_opts(&qemu_object_opts);
|
qemu_add_opts(&qemu_object_opts);
|
||||||
qemu_init_exec_dir(argv[0]);
|
qemu_init_exec_dir(argv[0]);
|
||||||
|
|||||||
@@ -4670,7 +4670,7 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
|
|||||||
TCGv r_const;
|
TCGv r_const;
|
||||||
|
|
||||||
gen_address_mask(dc, cpu_addr);
|
gen_address_mask(dc, cpu_addr);
|
||||||
tcg_gen_qemu_ld8s(cpu_val, cpu_addr, dc->mem_idx);
|
tcg_gen_qemu_ld8u(cpu_val, cpu_addr, dc->mem_idx);
|
||||||
r_const = tcg_const_tl(0xff);
|
r_const = tcg_const_tl(0xff);
|
||||||
tcg_gen_qemu_st8(r_const, cpu_addr, dc->mem_idx);
|
tcg_gen_qemu_st8(r_const, cpu_addr, dc->mem_idx);
|
||||||
tcg_temp_free(r_const);
|
tcg_temp_free(r_const);
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l1_update; errno: 5; imm: off; once: off; write
|
Event: l1_update; errno: 5; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
|
|
||||||
1 leaked clusters were found on the image.
|
1 leaked clusters were found on the image.
|
||||||
@@ -21,6 +23,8 @@ This means waste of disk space, but no harm to data.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l1_update; errno: 5; imm: off; once: off; write -b
|
Event: l1_update; errno: 5; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
|
|
||||||
1 leaked clusters were found on the image.
|
1 leaked clusters were found on the image.
|
||||||
@@ -38,6 +42,8 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l1_update; errno: 28; imm: off; once: off; write
|
Event: l1_update; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
|
||||||
1 leaked clusters were found on the image.
|
1 leaked clusters were found on the image.
|
||||||
@@ -45,6 +51,8 @@ This means waste of disk space, but no harm to data.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l1_update; errno: 28; imm: off; once: off; write -b
|
Event: l1_update; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
|
||||||
1 leaked clusters were found on the image.
|
1 leaked clusters were found on the image.
|
||||||
@@ -70,7 +78,11 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
|||||||
Event: l2_load; errno: 5; imm: off; once: off; write
|
Event: l2_load; errno: 5; imm: off; once: off; write
|
||||||
wrote 131072/131072 bytes at offset 0
|
wrote 131072/131072 bytes at offset 0
|
||||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
read failed: Input/output error
|
read failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -78,7 +90,11 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
|||||||
Event: l2_load; errno: 5; imm: off; once: off; write -b
|
Event: l2_load; errno: 5; imm: off; once: off; write -b
|
||||||
wrote 131072/131072 bytes at offset 0
|
wrote 131072/131072 bytes at offset 0
|
||||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
read failed: Input/output error
|
read failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -102,7 +118,11 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
|||||||
Event: l2_load; errno: 28; imm: off; once: off; write
|
Event: l2_load; errno: 28; imm: off; once: off; write
|
||||||
wrote 131072/131072 bytes at offset 0
|
wrote 131072/131072 bytes at offset 0
|
||||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
read failed: No space left on device
|
read failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -110,7 +130,11 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
|||||||
Event: l2_load; errno: 28; imm: off; once: off; write -b
|
Event: l2_load; errno: 28; imm: off; once: off; write -b
|
||||||
wrote 131072/131072 bytes at offset 0
|
wrote 131072/131072 bytes at offset 0
|
||||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
read failed: No space left on device
|
read failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -118,20 +142,18 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
|||||||
Event: l2_update; errno: 5; imm: off; once: on; write
|
Event: l2_update; errno: 5; imm: off; once: on; write
|
||||||
wrote 131072/131072 bytes at offset 0
|
wrote 131072/131072 bytes at offset 0
|
||||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
No errors were found on the image.
|
||||||
127 leaked clusters were found on the image.
|
|
||||||
This means waste of disk space, but no harm to data.
|
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l2_update; errno: 5; imm: off; once: on; write -b
|
Event: l2_update; errno: 5; imm: off; once: on; write -b
|
||||||
wrote 131072/131072 bytes at offset 0
|
wrote 131072/131072 bytes at offset 0
|
||||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
No errors were found on the image.
|
||||||
127 leaked clusters were found on the image.
|
|
||||||
This means waste of disk space, but no harm to data.
|
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l2_update; errno: 5; imm: off; once: off; write
|
Event: l2_update; errno: 5; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
wrote 131072/131072 bytes at offset 0
|
wrote 131072/131072 bytes at offset 0
|
||||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
|
||||||
@@ -140,6 +162,8 @@ This means waste of disk space, but no harm to data.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l2_update; errno: 5; imm: off; once: off; write -b
|
Event: l2_update; errno: 5; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
wrote 131072/131072 bytes at offset 0
|
wrote 131072/131072 bytes at offset 0
|
||||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
|
||||||
@@ -150,20 +174,18 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
|||||||
Event: l2_update; errno: 28; imm: off; once: on; write
|
Event: l2_update; errno: 28; imm: off; once: on; write
|
||||||
wrote 131072/131072 bytes at offset 0
|
wrote 131072/131072 bytes at offset 0
|
||||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
No errors were found on the image.
|
||||||
127 leaked clusters were found on the image.
|
|
||||||
This means waste of disk space, but no harm to data.
|
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l2_update; errno: 28; imm: off; once: on; write -b
|
Event: l2_update; errno: 28; imm: off; once: on; write -b
|
||||||
wrote 131072/131072 bytes at offset 0
|
wrote 131072/131072 bytes at offset 0
|
||||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
No errors were found on the image.
|
||||||
127 leaked clusters were found on the image.
|
|
||||||
This means waste of disk space, but no harm to data.
|
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l2_update; errno: 28; imm: off; once: off; write
|
Event: l2_update; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
wrote 131072/131072 bytes at offset 0
|
wrote 131072/131072 bytes at offset 0
|
||||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
|
||||||
@@ -172,6 +194,8 @@ This means waste of disk space, but no harm to data.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l2_update; errno: 28; imm: off; once: off; write -b
|
Event: l2_update; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
wrote 131072/131072 bytes at offset 0
|
wrote 131072/131072 bytes at offset 0
|
||||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
|
||||||
@@ -190,11 +214,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l2_alloc_write; errno: 5; imm: off; once: off; write
|
Event: l2_alloc_write; errno: 5; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l2_alloc_write; errno: 5; imm: off; once: off; write -b
|
Event: l2_alloc_write; errno: 5; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
|
|
||||||
1 leaked clusters were found on the image.
|
1 leaked clusters were found on the image.
|
||||||
@@ -212,11 +240,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l2_alloc_write; errno: 28; imm: off; once: off; write
|
Event: l2_alloc_write; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l2_alloc_write; errno: 28; imm: off; once: off; write -b
|
Event: l2_alloc_write; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
|
||||||
1 leaked clusters were found on the image.
|
1 leaked clusters were found on the image.
|
||||||
@@ -234,11 +266,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: write_aio; errno: 5; imm: off; once: off; write
|
Event: write_aio; errno: 5; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: write_aio; errno: 5; imm: off; once: off; write -b
|
Event: write_aio; errno: 5; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -254,11 +290,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: write_aio; errno: 28; imm: off; once: off; write
|
Event: write_aio; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: write_aio; errno: 28; imm: off; once: off; write -b
|
Event: write_aio; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -274,11 +314,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_load; errno: 5; imm: off; once: off; write
|
Event: refblock_load; errno: 5; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_load; errno: 5; imm: off; once: off; write -b
|
Event: refblock_load; errno: 5; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -294,11 +338,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_load; errno: 28; imm: off; once: off; write
|
Event: refblock_load; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_load; errno: 28; imm: off; once: off; write -b
|
Event: refblock_load; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -314,11 +362,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_update_part; errno: 5; imm: off; once: off; write
|
Event: refblock_update_part; errno: 5; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_update_part; errno: 5; imm: off; once: off; write -b
|
Event: refblock_update_part; errno: 5; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -334,11 +386,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_update_part; errno: 28; imm: off; once: off; write
|
Event: refblock_update_part; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_update_part; errno: 28; imm: off; once: off; write -b
|
Event: refblock_update_part; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -354,11 +410,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc; errno: 5; imm: off; once: off; write
|
Event: refblock_alloc; errno: 5; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc; errno: 5; imm: off; once: off; write -b
|
Event: refblock_alloc; errno: 5; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -374,11 +434,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc; errno: 28; imm: off; once: off; write
|
Event: refblock_alloc; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc; errno: 28; imm: off; once: off; write -b
|
Event: refblock_alloc; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -394,11 +458,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: cluster_alloc; errno: 5; imm: off; once: off; write
|
Event: cluster_alloc; errno: 5; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: cluster_alloc; errno: 5; imm: off; once: off; write -b
|
Event: cluster_alloc; errno: 5; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -414,11 +482,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: cluster_alloc; errno: 28; imm: off; once: off; write
|
Event: cluster_alloc; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: cluster_alloc; errno: 28; imm: off; once: off; write -b
|
Event: cluster_alloc; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
|
|
||||||
@@ -437,6 +509,8 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc_hookup; errno: 28; imm: off; once: off; write
|
Event: refblock_alloc_hookup; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
|
||||||
55 leaked clusters were found on the image.
|
55 leaked clusters were found on the image.
|
||||||
@@ -444,6 +518,8 @@ This means waste of disk space, but no harm to data.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc_hookup; errno: 28; imm: off; once: off; write -b
|
Event: refblock_alloc_hookup; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
|
||||||
251 leaked clusters were found on the image.
|
251 leaked clusters were found on the image.
|
||||||
@@ -461,11 +537,15 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc_write; errno: 28; imm: off; once: off; write
|
Event: refblock_alloc_write; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc_write; errno: 28; imm: off; once: off; write -b
|
Event: refblock_alloc_write; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -481,13 +561,17 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc_write_blocks; errno: 28; imm: off; once: off; write
|
Event: refblock_alloc_write_blocks; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
|
||||||
10 leaked clusters were found on the image.
|
11 leaked clusters were found on the image.
|
||||||
This means waste of disk space, but no harm to data.
|
This means waste of disk space, but no harm to data.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc_write_blocks; errno: 28; imm: off; once: off; write -b
|
Event: refblock_alloc_write_blocks; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
|
||||||
23 leaked clusters were found on the image.
|
23 leaked clusters were found on the image.
|
||||||
@@ -505,13 +589,17 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc_write_table; errno: 28; imm: off; once: off; write
|
Event: refblock_alloc_write_table; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
|
||||||
10 leaked clusters were found on the image.
|
11 leaked clusters were found on the image.
|
||||||
This means waste of disk space, but no harm to data.
|
This means waste of disk space, but no harm to data.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc_write_table; errno: 28; imm: off; once: off; write -b
|
Event: refblock_alloc_write_table; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
|
||||||
23 leaked clusters were found on the image.
|
23 leaked clusters were found on the image.
|
||||||
@@ -529,13 +617,17 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc_switch_table; errno: 28; imm: off; once: off; write
|
Event: refblock_alloc_switch_table; errno: 28; imm: off; once: off; write
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
|
||||||
10 leaked clusters were found on the image.
|
11 leaked clusters were found on the image.
|
||||||
This means waste of disk space, but no harm to data.
|
This means waste of disk space, but no harm to data.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: refblock_alloc_switch_table; errno: 28; imm: off; once: off; write -b
|
Event: refblock_alloc_switch_table; errno: 28; imm: off; once: off; write -b
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
|
||||||
23 leaked clusters were found on the image.
|
23 leaked clusters were found on the image.
|
||||||
@@ -551,6 +643,8 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l1_grow_alloc_table; errno: 5; imm: off; once: off
|
Event: l1_grow_alloc_table; errno: 5; imm: off; once: off
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -561,6 +655,8 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l1_grow_alloc_table; errno: 28; imm: off; once: off
|
Event: l1_grow_alloc_table; errno: 28; imm: off; once: off
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -571,6 +667,8 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l1_grow_write_table; errno: 5; imm: off; once: off
|
Event: l1_grow_write_table; errno: 5; imm: off; once: off
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -581,6 +679,8 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l1_grow_write_table; errno: 28; imm: off; once: off
|
Event: l1_grow_write_table; errno: 28; imm: off; once: off
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
@@ -591,6 +691,8 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l1_grow_activate_table; errno: 5; imm: off; once: off
|
Event: l1_grow_activate_table; errno: 5; imm: off; once: off
|
||||||
|
Failed to flush the L2 table cache: Input/output error
|
||||||
|
Failed to flush the refcount block cache: Input/output error
|
||||||
write failed: Input/output error
|
write failed: Input/output error
|
||||||
|
|
||||||
96 leaked clusters were found on the image.
|
96 leaked clusters were found on the image.
|
||||||
@@ -603,6 +705,8 @@ No errors were found on the image.
|
|||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||||
|
|
||||||
Event: l1_grow_activate_table; errno: 28; imm: off; once: off
|
Event: l1_grow_activate_table; errno: 28; imm: off; once: off
|
||||||
|
Failed to flush the L2 table cache: No space left on device
|
||||||
|
Failed to flush the refcount block cache: No space left on device
|
||||||
write failed: No space left on device
|
write failed: No space left on device
|
||||||
|
|
||||||
96 leaked clusters were found on the image.
|
96 leaked clusters were found on the image.
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ QEMU X.Y.Z monitor - type 'help' for more information
|
|||||||
Testing: -drive driver=null-co,cache=invalid_value
|
Testing: -drive driver=null-co,cache=invalid_value
|
||||||
QEMU_PROG: -drive driver=null-co,cache=invalid_value: invalid cache option
|
QEMU_PROG: -drive driver=null-co,cache=invalid_value: invalid cache option
|
||||||
|
|
||||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=writeback,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
Testing: -drive file=TEST_DIR/t.qcow2,cache=writeback,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
||||||
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||||
@@ -165,7 +165,7 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
|
|||||||
Cache mode: writeback, ignore flushes
|
Cache mode: writeback, ignore flushes
|
||||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||||
|
|
||||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=writethrough,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
Testing: -drive file=TEST_DIR/t.qcow2,cache=writethrough,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
||||||
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||||
@@ -185,7 +185,7 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
|
|||||||
Cache mode: writeback, ignore flushes
|
Cache mode: writeback, ignore flushes
|
||||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||||
|
|
||||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=unsafe,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
Testing: -drive file=TEST_DIR/t.qcow2,cache=unsafe,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
||||||
QEMU X.Y.Z monitor - type 'help' for more information
|
QEMU X.Y.Z monitor - type 'help' for more information
|
||||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
||||||
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||||
@@ -205,8 +205,8 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
|
|||||||
Cache mode: writeback, ignore flushes
|
Cache mode: writeback, ignore flushes
|
||||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||||
|
|
||||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
Testing: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
||||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0: invalid cache option
|
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0: invalid cache option
|
||||||
|
|
||||||
|
|
||||||
=== Specifying the protocol layer ===
|
=== Specifying the protocol layer ===
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ _make_test_img $IMG_SIZE
|
|||||||
|
|
||||||
case "$QEMU_DEFAULT_MACHINE" in
|
case "$QEMU_DEFAULT_MACHINE" in
|
||||||
s390-ccw-virtio)
|
s390-ccw-virtio)
|
||||||
platform_parm="-no-shutdown -machine accel=kvm"
|
platform_parm="-no-shutdown"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
platform_parm=""
|
platform_parm=""
|
||||||
|
|||||||
@@ -79,9 +79,6 @@ sector = "%d"
|
|||||||
self.assert_qmp(event, 'data/sector-num', sector)
|
self.assert_qmp(event, 'data/sector-num', sector)
|
||||||
|
|
||||||
def testQuorum(self):
|
def testQuorum(self):
|
||||||
if not 'quorum' in iotests.qemu_img_pipe('--help'):
|
|
||||||
return
|
|
||||||
|
|
||||||
# Generate an error and get an event
|
# Generate an error and get an event
|
||||||
self.vm.hmp_qemu_io("drive0", "aio_read %d %d" %
|
self.vm.hmp_qemu_io("drive0", "aio_read %d %d" %
|
||||||
(offset * sector_size, sector_size))
|
(offset * sector_size, sector_size))
|
||||||
@@ -139,4 +136,5 @@ class TestFifoQuorumEvents(TestQuorumEvents):
|
|||||||
read_pattern = 'fifo'
|
read_pattern = 'fifo'
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
iotests.verify_quorum()
|
||||||
iotests.main(supported_fmts=["raw"])
|
iotests.main(supported_fmts=["raw"])
|
||||||
|
|||||||
@@ -38,65 +38,34 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
|
|||||||
. ./common.rc
|
. ./common.rc
|
||||||
. ./common.filter
|
. ./common.filter
|
||||||
|
|
||||||
_supported_fmt generic
|
_supported_fmt raw qcow2
|
||||||
_supported_proto file
|
_supported_proto file
|
||||||
_supported_os Linux
|
_supported_os Linux
|
||||||
|
|
||||||
|
|
||||||
on_disk_size()
|
|
||||||
{
|
|
||||||
du "$@" | sed -e 's/\t\+.*//'
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
img_size=1048576
|
img_size=1048576
|
||||||
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo '=== Comparing empty image against sparse conversion ==='
|
echo '=== Mapping sparse conversion ==='
|
||||||
echo
|
echo
|
||||||
|
|
||||||
_make_test_img $img_size
|
|
||||||
|
|
||||||
empty_size=$(on_disk_size "$TEST_IMG")
|
|
||||||
|
|
||||||
|
|
||||||
$QEMU_IMG_PROG convert -O "$IMGFMT" -S 512 \
|
$QEMU_IMG_PROG convert -O "$IMGFMT" -S 512 \
|
||||||
"json:{ 'driver': 'null-co', 'size': $img_size, 'read-zeroes': true }" \
|
"json:{ 'driver': 'null-co', 'size': $img_size, 'read-zeroes': true }" \
|
||||||
"$TEST_IMG"
|
"$TEST_IMG"
|
||||||
|
|
||||||
sparse_convert_size=$(on_disk_size "$TEST_IMG")
|
$QEMU_IMG map "$TEST_IMG" | _filter_qemu_img_map
|
||||||
|
|
||||||
|
|
||||||
if [ "$empty_size" -eq "$sparse_convert_size" ]; then
|
|
||||||
echo 'Equal image size'
|
|
||||||
else
|
|
||||||
echo 'Different image size'
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo '=== Comparing full image against non-sparse conversion ==='
|
echo '=== Mapping non-sparse conversion ==='
|
||||||
echo
|
echo
|
||||||
|
|
||||||
_make_test_img $img_size
|
|
||||||
$QEMU_IO -c "write 0 $img_size" "$TEST_IMG" | _filter_qemu_io
|
|
||||||
|
|
||||||
full_size=$(on_disk_size "$TEST_IMG")
|
|
||||||
|
|
||||||
|
|
||||||
$QEMU_IMG convert -O "$IMGFMT" -S 0 \
|
$QEMU_IMG convert -O "$IMGFMT" -S 0 \
|
||||||
"json:{ 'driver': 'null-co', 'size': $img_size, 'read-zeroes': true }" \
|
"json:{ 'driver': 'null-co', 'size': $img_size, 'read-zeroes': true }" \
|
||||||
"$TEST_IMG"
|
"$TEST_IMG"
|
||||||
|
|
||||||
non_sparse_convert_size=$(on_disk_size "$TEST_IMG")
|
$QEMU_IMG map "$TEST_IMG" | _filter_qemu_img_map
|
||||||
|
|
||||||
|
|
||||||
if [ "$full_size" -eq "$non_sparse_convert_size" ]; then
|
|
||||||
echo 'Equal image size'
|
|
||||||
else
|
|
||||||
echo 'Different image size'
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# success, all done
|
# success, all done
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
QA output created by 150
|
QA output created by 150
|
||||||
|
|
||||||
=== Comparing empty image against sparse conversion ===
|
=== Mapping sparse conversion ===
|
||||||
|
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576
|
Offset Length File
|
||||||
Equal image size
|
|
||||||
|
|
||||||
=== Comparing full image against non-sparse conversion ===
|
=== Mapping non-sparse conversion ===
|
||||||
|
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576
|
Offset Length File
|
||||||
wrote 1048576/1048576 bytes at offset 0
|
0 0x100000 TEST_DIR/t.IMGFMT
|
||||||
1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
||||||
Equal image size
|
|
||||||
*** done
|
*** done
|
||||||
|
|||||||
@@ -19,7 +19,6 @@
|
|||||||
# Control script for QA
|
# Control script for QA
|
||||||
#
|
#
|
||||||
|
|
||||||
tmp=/tmp/$$
|
|
||||||
status=0
|
status=0
|
||||||
needwrap=true
|
needwrap=true
|
||||||
try=0
|
try=0
|
||||||
@@ -130,6 +129,8 @@ fi
|
|||||||
# exit 1
|
# exit 1
|
||||||
#fi
|
#fi
|
||||||
|
|
||||||
|
tmp="${TEST_DIR}"/$$
|
||||||
|
|
||||||
_wallclock()
|
_wallclock()
|
||||||
{
|
{
|
||||||
date "+%H %M %S" | $AWK_PROG '{ print $1*3600 + $2*60 + $3 }'
|
date "+%H %M %S" | $AWK_PROG '{ print $1*3600 + $2*60 + $3 }'
|
||||||
@@ -146,8 +147,8 @@ _wrapup()
|
|||||||
# for hangcheck ...
|
# for hangcheck ...
|
||||||
# remove files that were used by hangcheck
|
# remove files that were used by hangcheck
|
||||||
#
|
#
|
||||||
[ -f /tmp/check.pid ] && rm -rf /tmp/check.pid
|
[ -f "${TEST_DIR}"/check.pid ] && rm -rf "${TEST_DIR}"/check.pid
|
||||||
[ -f /tmp/check.sts ] && rm -rf /tmp/check.sts
|
[ -f "${TEST_DIR}"/check.sts ] && rm -rf "${TEST_DIR}"/check.sts
|
||||||
|
|
||||||
if $showme
|
if $showme
|
||||||
then
|
then
|
||||||
@@ -197,8 +198,8 @@ END { if (NR > 0) {
|
|||||||
needwrap=false
|
needwrap=false
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -f /tmp/*.out /tmp/*.err /tmp/*.time
|
rm -f "${TEST_DIR}"/*.out "${TEST_DIR}"/*.err "${TEST_DIR}"/*.time
|
||||||
rm -f /tmp/check.pid /tmp/check.sts
|
rm -f "${TEST_DIR}"/check.pid "${TEST_DIR}"/check.sts
|
||||||
rm -f $tmp.*
|
rm -f $tmp.*
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,16 +209,16 @@ trap "_wrapup; exit \$status" 0 1 2 3 15
|
|||||||
# Save pid of check in a well known place, so that hangcheck can be sure it
|
# Save pid of check in a well known place, so that hangcheck can be sure it
|
||||||
# has the right pid (getting the pid from ps output is not reliable enough).
|
# has the right pid (getting the pid from ps output is not reliable enough).
|
||||||
#
|
#
|
||||||
rm -rf /tmp/check.pid
|
rm -rf "${TEST_DIR}"/check.pid
|
||||||
echo $$ >/tmp/check.pid
|
echo $$ > "${TEST_DIR}"/check.pid
|
||||||
|
|
||||||
# for hangcheck ...
|
# for hangcheck ...
|
||||||
# Save the status of check in a well known place, so that hangcheck can be
|
# Save the status of check in a well known place, so that hangcheck can be
|
||||||
# sure to know where check is up to (getting test number from ps output is
|
# sure to know where check is up to (getting test number from ps output is
|
||||||
# not reliable enough since the trace stuff has been introduced).
|
# not reliable enough since the trace stuff has been introduced).
|
||||||
#
|
#
|
||||||
rm -rf /tmp/check.sts
|
rm -rf "${TEST_DIR}"/check.sts
|
||||||
echo "preamble" >/tmp/check.sts
|
echo "preamble" > "${TEST_DIR}"/check.sts
|
||||||
|
|
||||||
# don't leave old full output behind on a clean run
|
# don't leave old full output behind on a clean run
|
||||||
rm -f check.full
|
rm -f check.full
|
||||||
@@ -285,7 +286,7 @@ do
|
|||||||
rm -f core $seq.notrun
|
rm -f core $seq.notrun
|
||||||
|
|
||||||
# for hangcheck ...
|
# for hangcheck ...
|
||||||
echo "$seq" >/tmp/check.sts
|
echo "$seq" > "${TEST_DIR}"/check.sts
|
||||||
|
|
||||||
start=`_wallclock`
|
start=`_wallclock`
|
||||||
$timestamp && echo -n " ["`date "+%T"`"]"
|
$timestamp && echo -n " ["`date "+%T"`"]"
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import errno
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
@@ -28,10 +29,6 @@ import qmp
|
|||||||
import qtest
|
import qtest
|
||||||
import struct
|
import struct
|
||||||
|
|
||||||
__all__ = ['imgfmt', 'imgproto', 'test_dir' 'qemu_img', 'qemu_io',
|
|
||||||
'VM', 'QMPTestCase', 'notrun', 'main', 'verify_image_format',
|
|
||||||
'verify_platform', 'filter_test_dir', 'filter_win32',
|
|
||||||
'filter_qemu_io', 'filter_chown', 'log']
|
|
||||||
|
|
||||||
# This will not work if arguments contain spaces but is necessary if we
|
# This will not work if arguments contain spaces but is necessary if we
|
||||||
# want to support the override options that ./check supports.
|
# want to support the override options that ./check supports.
|
||||||
@@ -247,7 +244,8 @@ class VM(object):
|
|||||||
self._qmp.accept()
|
self._qmp.accept()
|
||||||
self._qtest.accept()
|
self._qtest.accept()
|
||||||
except:
|
except:
|
||||||
os.remove(self._monitor_path)
|
_remove_if_exists(self._monitor_path)
|
||||||
|
_remove_if_exists(self._qtest_path)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
@@ -409,6 +407,15 @@ class QMPTestCase(unittest.TestCase):
|
|||||||
event = self.wait_until_completed(drive=drive)
|
event = self.wait_until_completed(drive=drive)
|
||||||
self.assert_qmp(event, 'data/type', 'mirror')
|
self.assert_qmp(event, 'data/type', 'mirror')
|
||||||
|
|
||||||
|
def _remove_if_exists(path):
|
||||||
|
'''Remove file object at path if it exists'''
|
||||||
|
try:
|
||||||
|
os.remove(path)
|
||||||
|
except OSError as exception:
|
||||||
|
if exception.errno == errno.ENOENT:
|
||||||
|
return
|
||||||
|
raise
|
||||||
|
|
||||||
def notrun(reason):
|
def notrun(reason):
|
||||||
'''Skip this test suite'''
|
'''Skip this test suite'''
|
||||||
# Each test in qemu-iotests has a number ("seq")
|
# Each test in qemu-iotests has a number ("seq")
|
||||||
@@ -426,6 +433,11 @@ def verify_platform(supported_oses=['linux']):
|
|||||||
if True not in [sys.platform.startswith(x) for x in supported_oses]:
|
if True not in [sys.platform.startswith(x) for x in supported_oses]:
|
||||||
notrun('not suitable for this OS: %s' % sys.platform)
|
notrun('not suitable for this OS: %s' % sys.platform)
|
||||||
|
|
||||||
|
def verify_quorum():
|
||||||
|
'''Skip test suite if quorum support is not available'''
|
||||||
|
if 'quorum' not in qemu_img_pipe('--help'):
|
||||||
|
notrun('quorum support missing')
|
||||||
|
|
||||||
def main(supported_fmts=[], supported_oses=['linux']):
|
def main(supported_fmts=[], supported_oses=['linux']):
|
||||||
'''Run tests'''
|
'''Run tests'''
|
||||||
|
|
||||||
|
|||||||
@@ -337,7 +337,7 @@ static void input_linux_event_mouse(void *opaque)
|
|||||||
static void input_linux_complete(UserCreatable *uc, Error **errp)
|
static void input_linux_complete(UserCreatable *uc, Error **errp)
|
||||||
{
|
{
|
||||||
InputLinux *il = INPUT_LINUX(uc);
|
InputLinux *il = INPUT_LINUX(uc);
|
||||||
uint32_t evtmap;
|
uint32_t evtmap, relmap, absmap;
|
||||||
int rc, ver;
|
int rc, ver;
|
||||||
|
|
||||||
if (!il->evdev) {
|
if (!il->evdev) {
|
||||||
@@ -359,16 +359,36 @@ static void input_linux_complete(UserCreatable *uc, Error **errp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = ioctl(il->fd, EVIOCGBIT(0, sizeof(evtmap)), &evtmap);
|
rc = ioctl(il->fd, EVIOCGBIT(0, sizeof(evtmap)), &evtmap);
|
||||||
|
if (rc < 0) {
|
||||||
|
error_setg(errp, "%s: failed to read event bits", il->evdev);
|
||||||
|
goto err_close;
|
||||||
|
}
|
||||||
|
|
||||||
if (evtmap & (1 << EV_REL)) {
|
if (evtmap & (1 << EV_REL)) {
|
||||||
/* has relative axis -> assume mouse */
|
rc = ioctl(il->fd, EVIOCGBIT(EV_REL, sizeof(relmap)), &relmap);
|
||||||
|
if (rc < 0) {
|
||||||
|
relmap = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (evtmap & (1 << EV_ABS)) {
|
||||||
|
ioctl(il->fd, EVIOCGBIT(EV_ABS, sizeof(absmap)), &absmap);
|
||||||
|
if (rc < 0) {
|
||||||
|
absmap = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((evtmap & (1 << EV_REL)) &&
|
||||||
|
(relmap & (1 << REL_X))) {
|
||||||
|
/* has relative x axis -> assume mouse */
|
||||||
qemu_set_fd_handler(il->fd, input_linux_event_mouse, NULL, il);
|
qemu_set_fd_handler(il->fd, input_linux_event_mouse, NULL, il);
|
||||||
} else if (evtmap & (1 << EV_ABS)) {
|
} else if ((evtmap & (1 << EV_ABS)) &&
|
||||||
/* has absolute axis -> not supported */
|
(absmap & (1 << ABS_X))) {
|
||||||
|
/* has absolute x axis -> not supported */
|
||||||
error_setg(errp, "tablet/touchscreen not supported");
|
error_setg(errp, "tablet/touchscreen not supported");
|
||||||
goto err_close;
|
goto err_close;
|
||||||
} else if (evtmap & (1 << EV_KEY)) {
|
} else if (evtmap & (1 << EV_KEY)) {
|
||||||
/* has keys/buttons (and no axis) -> assume keyboard */
|
/* has keys/buttons (and no x axis) -> assume keyboard */
|
||||||
qemu_set_fd_handler(il->fd, input_linux_event_keyboard, NULL, il);
|
qemu_set_fd_handler(il->fd, input_linux_event_keyboard, NULL, il);
|
||||||
} else {
|
} else {
|
||||||
/* Huh? What is this? */
|
/* Huh? What is this? */
|
||||||
|
|||||||
Reference in New Issue
Block a user