1
The following changes since commit 23919ddfd56135cad3cb468a8f54d5a595f024f4:
1
The following changes since commit 54b89db5309d5fa8b5d3fe5fe56f81704e2f9706:
2
2
3
Merge remote-tracking branch 'remotes/aperard/tags/pull-xen-20190827' into staging (2019-08-27 15:52:36 +0100)
3
Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging (2019-09-03 09:43:26 +0100)
4
4
5
are available in the Git repository at:
5
are available in the Git repository at:
6
6
7
https://github.com/XanClic/qemu.git tags/pull-block-2019-08-27
7
https://github.com/XanClic/qemu.git tags/pull-block-2019-09-03
8
8
9
for you to fetch changes up to bb043c056cffcc2f3ce88bfdaf2e76e455c09e2c:
9
for you to fetch changes up to 755c5fe79d88717600356d3edf04835bba43dcb6:
10
10
11
iotests: Unify cache mode quoting (2019-08-27 19:48:44 +0200)
11
iotests: Unify cache mode quoting (2019-09-03 14:56:06 +0200)
12
12
13
----------------------------------------------------------------
13
----------------------------------------------------------------
14
Block patches:
14
Block patches:
15
- qemu-io now accepts a file to read a write pattern from
15
- qemu-io now accepts a file to read a write pattern from
16
- Ensure that raw files have their first block allocated so we can probe
16
- Ensure that raw files have their first block allocated so we can probe
17
the O_DIRECT alignment if necessary
17
the O_DIRECT alignment if necessary
18
- Various fixes
18
- Various fixes
19
19
20
----------------------------------------------------------------
20
----------------------------------------------------------------
21
v2:
22
- Added a patch we already had on the list to keep the iotests passing
23
when $DISPLAY is not set
24
25
----------------------------------------------------------------
21
Denis Plotnikov (1):
26
Denis Plotnikov (1):
22
qemu-io: add pattern file for write command
27
qemu-io: add pattern file for write command
23
28
24
Max Reitz (7):
29
Max Reitz (8):
25
iotests: Fix _filter_img_create()
30
iotests: Fix _filter_img_create()
26
vmdk: Use bdrv_dirname() for relative extent paths
31
vmdk: Use bdrv_dirname() for relative extent paths
27
iotests: Keep testing broken relative extent paths
32
iotests: Keep testing broken relative extent paths
28
vmdk: Reject invalid compressed writes
33
vmdk: Reject invalid compressed writes
29
iotests: Disable broken streamOptimized tests
34
iotests: Disable broken streamOptimized tests
30
iotests: Disable 110 for vmdk.twoGbMaxExtentSparse
35
iotests: Disable 110 for vmdk.twoGbMaxExtentSparse
31
iotests: Disable 126 for flat vmdk subformats
36
iotests: Disable 126 for flat vmdk subformats
37
iotests: Add -display none to the qemu options
32
38
33
Nir Soffer (3):
39
Nir Soffer (3):
34
block: posix: Always allocate the first block
40
block: posix: Always allocate the first block
35
iotests: Test allocate_first_block() with O_DIRECT
41
iotests: Test allocate_first_block() with O_DIRECT
36
iotests: Unify cache mode quoting
42
iotests: Unify cache mode quoting
...
...
91
tests/qemu-iotests/197 | 1 +
97
tests/qemu-iotests/197 | 1 +
92
tests/qemu-iotests/215 | 1 +
98
tests/qemu-iotests/215 | 1 +
93
tests/qemu-iotests/221.out | 12 ++-
99
tests/qemu-iotests/221.out | 12 ++-
94
tests/qemu-iotests/251 | 1 +
100
tests/qemu-iotests/251 | 1 +
95
tests/qemu-iotests/253.out | 12 ++-
101
tests/qemu-iotests/253.out | 12 ++-
102
tests/qemu-iotests/check | 6 +-
96
tests/qemu-iotests/common.filter | 4 +-
103
tests/qemu-iotests/common.filter | 4 +-
97
tests/qemu-iotests/common.rc | 14 +++
104
tests/qemu-iotests/common.rc | 14 +++
98
50 files changed, 391 insertions(+), 87 deletions(-)
105
51 files changed, 394 insertions(+), 90 deletions(-)
99
rename tests/qemu-iotests/{150.out => 150.out.qcow2} (100%)
106
rename tests/qemu-iotests/{150.out => 150.out.qcow2} (100%)
100
create mode 100644 tests/qemu-iotests/150.out.raw
107
create mode 100644 tests/qemu-iotests/150.out.raw
101
108
102
--
109
--
103
2.21.0
110
2.21.0
104
111
105
112
diff view generated by jsdifflib
1
From: Denis Plotnikov <dplotnikov@virtuozzo.com>
1
From: Denis Plotnikov <dplotnikov@virtuozzo.com>
2
2
3
The patch allows to provide a pattern file for write
3
The patch allows to provide a pattern file for write
4
command. There was no similar ability before.
4
command. There was no similar ability before.
5
5
6
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
6
Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
7
Message-id: 20190820164616.4072-1-dplotnikov@virtuozzo.com
7
Message-id: 20190820164616.4072-1-dplotnikov@virtuozzo.com
8
Reviewed-by: Eric Blake <eblake@redhat.com>
8
Reviewed-by: Eric Blake <eblake@redhat.com>
9
[mreitz: Keep optstring in alphabetical order]
9
[mreitz: Keep optstring in alphabetical order]
10
Signed-off-by: Max Reitz <mreitz@redhat.com>
10
Signed-off-by: Max Reitz <mreitz@redhat.com>
11
---
11
---
12
qemu-io-cmds.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++---
12
qemu-io-cmds.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++---
13
1 file changed, 93 insertions(+), 6 deletions(-)
13
1 file changed, 93 insertions(+), 6 deletions(-)
14
14
15
diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
15
diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
16
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
17
--- a/qemu-io-cmds.c
17
--- a/qemu-io-cmds.c
18
+++ b/qemu-io-cmds.c
18
+++ b/qemu-io-cmds.c
19
@@ -XXX,XX +XXX,XX @@ static void qemu_io_free(void *p)
19
@@ -XXX,XX +XXX,XX @@ static void qemu_io_free(void *p)
20
qemu_vfree(p);
20
qemu_vfree(p);
21
}
21
}
22
22
23
+/*
23
+/*
24
+ * qemu_io_alloc_from_file()
24
+ * qemu_io_alloc_from_file()
25
+ *
25
+ *
26
+ * Allocates the buffer and populates it with the content of the given file
26
+ * Allocates the buffer and populates it with the content of the given file
27
+ * up to @len bytes. If the file length is less than @len, then the buffer
27
+ * up to @len bytes. If the file length is less than @len, then the buffer
28
+ * is populated with the file content cyclically.
28
+ * is populated with the file content cyclically.
29
+ *
29
+ *
30
+ * @blk - the block backend where the buffer content is going to be written to
30
+ * @blk - the block backend where the buffer content is going to be written to
31
+ * @len - the buffer length
31
+ * @len - the buffer length
32
+ * @file_name - the file to read the content from
32
+ * @file_name - the file to read the content from
33
+ *
33
+ *
34
+ * Returns: the buffer pointer on success
34
+ * Returns: the buffer pointer on success
35
+ * NULL on error
35
+ * NULL on error
36
+ */
36
+ */
37
+static void *qemu_io_alloc_from_file(BlockBackend *blk, size_t len,
37
+static void *qemu_io_alloc_from_file(BlockBackend *blk, size_t len,
38
+ const char *file_name)
38
+ const char *file_name)
39
+{
39
+{
40
+ char *buf, *buf_origin;
40
+ char *buf, *buf_origin;
41
+ FILE *f = fopen(file_name, "r");
41
+ FILE *f = fopen(file_name, "r");
42
+ int pattern_len;
42
+ int pattern_len;
43
+
43
+
44
+ if (!f) {
44
+ if (!f) {
45
+ perror(file_name);
45
+ perror(file_name);
46
+ return NULL;
46
+ return NULL;
47
+ }
47
+ }
48
+
48
+
49
+ if (qemuio_misalign) {
49
+ if (qemuio_misalign) {
50
+ len += MISALIGN_OFFSET;
50
+ len += MISALIGN_OFFSET;
51
+ }
51
+ }
52
+
52
+
53
+ buf_origin = buf = blk_blockalign(blk, len);
53
+ buf_origin = buf = blk_blockalign(blk, len);
54
+
54
+
55
+ if (qemuio_misalign) {
55
+ if (qemuio_misalign) {
56
+ buf_origin += MISALIGN_OFFSET;
56
+ buf_origin += MISALIGN_OFFSET;
57
+ buf += MISALIGN_OFFSET;
57
+ buf += MISALIGN_OFFSET;
58
+ len -= MISALIGN_OFFSET;
58
+ len -= MISALIGN_OFFSET;
59
+ }
59
+ }
60
+
60
+
61
+ pattern_len = fread(buf_origin, 1, len, f);
61
+ pattern_len = fread(buf_origin, 1, len, f);
62
+
62
+
63
+ if (ferror(f)) {
63
+ if (ferror(f)) {
64
+ perror(file_name);
64
+ perror(file_name);
65
+ goto error;
65
+ goto error;
66
+ }
66
+ }
67
+
67
+
68
+ if (pattern_len == 0) {
68
+ if (pattern_len == 0) {
69
+ fprintf(stderr, "%s: file is empty\n", file_name);
69
+ fprintf(stderr, "%s: file is empty\n", file_name);
70
+ goto error;
70
+ goto error;
71
+ }
71
+ }
72
+
72
+
73
+ fclose(f);
73
+ fclose(f);
74
+
74
+
75
+ if (len > pattern_len) {
75
+ if (len > pattern_len) {
76
+ len -= pattern_len;
76
+ len -= pattern_len;
77
+ buf += pattern_len;
77
+ buf += pattern_len;
78
+
78
+
79
+ while (len > 0) {
79
+ while (len > 0) {
80
+ size_t len_to_copy = MIN(pattern_len, len);
80
+ size_t len_to_copy = MIN(pattern_len, len);
81
+
81
+
82
+ memcpy(buf, buf_origin, len_to_copy);
82
+ memcpy(buf, buf_origin, len_to_copy);
83
+
83
+
84
+ len -= len_to_copy;
84
+ len -= len_to_copy;
85
+ buf += len_to_copy;
85
+ buf += len_to_copy;
86
+ }
86
+ }
87
+ }
87
+ }
88
+
88
+
89
+ return buf_origin;
89
+ return buf_origin;
90
+
90
+
91
+error:
91
+error:
92
+ qemu_io_free(buf_origin);
92
+ qemu_io_free(buf_origin);
93
+ return NULL;
93
+ return NULL;
94
+}
94
+}
95
+
95
+
96
static void dump_buffer(const void *buffer, int64_t offset, int64_t len)
96
static void dump_buffer(const void *buffer, int64_t offset, int64_t len)
97
{
97
{
98
uint64_t i;
98
uint64_t i;
99
@@ -XXX,XX +XXX,XX @@ static void write_help(void)
99
@@ -XXX,XX +XXX,XX @@ static void write_help(void)
100
" -n, -- with -z, don't allow slow fallback\n"
100
" -n, -- with -z, don't allow slow fallback\n"
101
" -p, -- ignored for backwards compatibility\n"
101
" -p, -- ignored for backwards compatibility\n"
102
" -P, -- use different pattern to fill file\n"
102
" -P, -- use different pattern to fill file\n"
103
+" -s, -- use a pattern file to fill the write buffer\n"
103
+" -s, -- use a pattern file to fill the write buffer\n"
104
" -C, -- report statistics in a machine parsable format\n"
104
" -C, -- report statistics in a machine parsable format\n"
105
" -q, -- quiet mode, do not show I/O statistics\n"
105
" -q, -- quiet mode, do not show I/O statistics\n"
106
" -u, -- with -z, allow unmapping\n"
106
" -u, -- with -z, allow unmapping\n"
107
@@ -XXX,XX +XXX,XX @@ static const cmdinfo_t write_cmd = {
107
@@ -XXX,XX +XXX,XX @@ static const cmdinfo_t write_cmd = {
108
.perm = BLK_PERM_WRITE,
108
.perm = BLK_PERM_WRITE,
109
.argmin = 2,
109
.argmin = 2,
110
.argmax = -1,
110
.argmax = -1,
111
- .args = "[-bcCfnquz] [-P pattern] off len",
111
- .args = "[-bcCfnquz] [-P pattern] off len",
112
+ .args = "[-bcCfnquz] [-P pattern | -s source_file] off len",
112
+ .args = "[-bcCfnquz] [-P pattern | -s source_file] off len",
113
.oneline = "writes a number of bytes at a specified offset",
113
.oneline = "writes a number of bytes at a specified offset",
114
.help = write_help,
114
.help = write_help,
115
};
115
};
116
@@ -XXX,XX +XXX,XX @@ static int write_f(BlockBackend *blk, int argc, char **argv)
116
@@ -XXX,XX +XXX,XX @@ static int write_f(BlockBackend *blk, int argc, char **argv)
117
{
117
{
118
struct timespec t1, t2;
118
struct timespec t1, t2;
119
bool Cflag = false, qflag = false, bflag = false;
119
bool Cflag = false, qflag = false, bflag = false;
120
- bool Pflag = false, zflag = false, cflag = false;
120
- bool Pflag = false, zflag = false, cflag = false;
121
+ bool Pflag = false, zflag = false, cflag = false, sflag = false;
121
+ bool Pflag = false, zflag = false, cflag = false, sflag = false;
122
int flags = 0;
122
int flags = 0;
123
int c, cnt, ret;
123
int c, cnt, ret;
124
char *buf = NULL;
124
char *buf = NULL;
125
@@ -XXX,XX +XXX,XX @@ static int write_f(BlockBackend *blk, int argc, char **argv)
125
@@ -XXX,XX +XXX,XX @@ static int write_f(BlockBackend *blk, int argc, char **argv)
126
/* Some compilers get confused and warn if this is not initialized. */
126
/* Some compilers get confused and warn if this is not initialized. */
127
int64_t total = 0;
127
int64_t total = 0;
128
int pattern = 0xcd;
128
int pattern = 0xcd;
129
+ const char *file_name = NULL;
129
+ const char *file_name = NULL;
130
130
131
- while ((c = getopt(argc, argv, "bcCfnpP:quz")) != -1) {
131
- while ((c = getopt(argc, argv, "bcCfnpP:quz")) != -1) {
132
+ while ((c = getopt(argc, argv, "bcCfnpP:qs:uz")) != -1) {
132
+ while ((c = getopt(argc, argv, "bcCfnpP:qs:uz")) != -1) {
133
switch (c) {
133
switch (c) {
134
case 'b':
134
case 'b':
135
bflag = true;
135
bflag = true;
136
@@ -XXX,XX +XXX,XX @@ static int write_f(BlockBackend *blk, int argc, char **argv)
136
@@ -XXX,XX +XXX,XX @@ static int write_f(BlockBackend *blk, int argc, char **argv)
137
case 'q':
137
case 'q':
138
qflag = true;
138
qflag = true;
139
break;
139
break;
140
+ case 's':
140
+ case 's':
141
+ sflag = true;
141
+ sflag = true;
142
+ file_name = optarg;
142
+ file_name = optarg;
143
+ break;
143
+ break;
144
case 'u':
144
case 'u':
145
flags |= BDRV_REQ_MAY_UNMAP;
145
flags |= BDRV_REQ_MAY_UNMAP;
146
break;
146
break;
147
@@ -XXX,XX +XXX,XX @@ static int write_f(BlockBackend *blk, int argc, char **argv)
147
@@ -XXX,XX +XXX,XX @@ static int write_f(BlockBackend *blk, int argc, char **argv)
148
return -EINVAL;
148
return -EINVAL;
149
}
149
}
150
150
151
- if (zflag && Pflag) {
151
- if (zflag && Pflag) {
152
- printf("-z and -P cannot be specified at the same time\n");
152
- printf("-z and -P cannot be specified at the same time\n");
153
+ if (zflag + Pflag + sflag > 1) {
153
+ if (zflag + Pflag + sflag > 1) {
154
+ printf("Only one of -z, -P, and -s "
154
+ printf("Only one of -z, -P, and -s "
155
+ "can be specified at the same time\n");
155
+ "can be specified at the same time\n");
156
return -EINVAL;
156
return -EINVAL;
157
}
157
}
158
158
159
@@ -XXX,XX +XXX,XX @@ static int write_f(BlockBackend *blk, int argc, char **argv)
159
@@ -XXX,XX +XXX,XX @@ static int write_f(BlockBackend *blk, int argc, char **argv)
160
}
160
}
161
161
162
if (!zflag) {
162
if (!zflag) {
163
- buf = qemu_io_alloc(blk, count, pattern);
163
- buf = qemu_io_alloc(blk, count, pattern);
164
+ if (sflag) {
164
+ if (sflag) {
165
+ buf = qemu_io_alloc_from_file(blk, count, file_name);
165
+ buf = qemu_io_alloc_from_file(blk, count, file_name);
166
+ if (!buf) {
166
+ if (!buf) {
167
+ return -EINVAL;
167
+ return -EINVAL;
168
+ }
168
+ }
169
+ } else {
169
+ } else {
170
+ buf = qemu_io_alloc(blk, count, pattern);
170
+ buf = qemu_io_alloc(blk, count, pattern);
171
+ }
171
+ }
172
}
172
}
173
173
174
clock_gettime(CLOCK_MONOTONIC, &t1);
174
clock_gettime(CLOCK_MONOTONIC, &t1);
175
--
175
--
176
2.21.0
176
2.21.0
177
177
178
178
diff view generated by jsdifflib
1
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
1
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
2
2
3
It's wrong to OR shared permissions. It may lead to crash on further
3
It's wrong to OR shared permissions. It may lead to crash on further
4
permission updates.
4
permission updates.
5
Also, no needs to consider previously calculated permissions, as at
5
Also, no needs to consider previously calculated permissions, as at
6
this point we already bind all new parents and bdrv_get_cumulative_perm
6
this point we already bind all new parents and bdrv_get_cumulative_perm
7
result is enough. So fix the bug by just set permissions by
7
result is enough. So fix the bug by just set permissions by
8
bdrv_get_cumulative_perm result.
8
bdrv_get_cumulative_perm result.
9
9
10
Bug was introduced in long ago 234ac1a9025, in 2.9.
10
Bug was introduced in long ago 234ac1a9025, in 2.9.
11
11
12
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
12
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
13
Message-id: 20190824100740.61635-1-vsementsov@virtuozzo.com
13
Message-id: 20190824100740.61635-1-vsementsov@virtuozzo.com
14
Signed-off-by: Max Reitz <mreitz@redhat.com>
14
Signed-off-by: Max Reitz <mreitz@redhat.com>
15
---
15
---
16
block.c | 5 ++---
16
block.c | 5 ++---
17
1 file changed, 2 insertions(+), 3 deletions(-)
17
1 file changed, 2 insertions(+), 3 deletions(-)
18
18
19
diff --git a/block.c b/block.c
19
diff --git a/block.c b/block.c
20
index XXXXXXX..XXXXXXX 100644
20
index XXXXXXX..XXXXXXX 100644
21
--- a/block.c
21
--- a/block.c
22
+++ b/block.c
22
+++ b/block.c
23
@@ -XXX,XX +XXX,XX @@ void bdrv_replace_node(BlockDriverState *from, BlockDriverState *to,
23
@@ -XXX,XX +XXX,XX @@ void bdrv_replace_node(BlockDriverState *from, BlockDriverState *to,
24
{
24
{
25
BdrvChild *c, *next;
25
BdrvChild *c, *next;
26
GSList *list = NULL, *p;
26
GSList *list = NULL, *p;
27
- uint64_t old_perm, old_shared;
27
- uint64_t old_perm, old_shared;
28
uint64_t perm = 0, shared = BLK_PERM_ALL;
28
uint64_t perm = 0, shared = BLK_PERM_ALL;
29
int ret;
29
int ret;
30
30
31
@@ -XXX,XX +XXX,XX @@ void bdrv_replace_node(BlockDriverState *from, BlockDriverState *to,
31
@@ -XXX,XX +XXX,XX @@ void bdrv_replace_node(BlockDriverState *from, BlockDriverState *to,
32
bdrv_unref(from);
32
bdrv_unref(from);
33
}
33
}
34
34
35
- bdrv_get_cumulative_perm(to, &old_perm, &old_shared);
35
- bdrv_get_cumulative_perm(to, &old_perm, &old_shared);
36
- bdrv_set_perm(to, old_perm | perm, old_shared | shared);
36
- bdrv_set_perm(to, old_perm | perm, old_shared | shared);
37
+ bdrv_get_cumulative_perm(to, &perm, &shared);
37
+ bdrv_get_cumulative_perm(to, &perm, &shared);
38
+ bdrv_set_perm(to, perm, shared);
38
+ bdrv_set_perm(to, perm, shared);
39
39
40
out:
40
out:
41
g_slist_free(list);
41
g_slist_free(list);
42
--
42
--
43
2.21.0
43
2.21.0
44
44
45
45
diff view generated by jsdifflib
1
From: Nir Soffer <nirsof@gmail.com>
1
From: Nir Soffer <nirsof@gmail.com>
2
2
3
When creating an image with preallocation "off" or "falloc", the first
3
When creating an image with preallocation "off" or "falloc", the first
4
block of the image is typically not allocated. When using Gluster
4
block of the image is typically not allocated. When using Gluster
5
storage backed by XFS filesystem, reading this block using direct I/O
5
storage backed by XFS filesystem, reading this block using direct I/O
6
succeeds regardless of request length, fooling alignment detection.
6
succeeds regardless of request length, fooling alignment detection.
7
7
8
In this case we fallback to a safe value (4096) instead of the optimal
8
In this case we fallback to a safe value (4096) instead of the optimal
9
value (512), which may lead to unneeded data copying when aligning
9
value (512), which may lead to unneeded data copying when aligning
10
requests. Allocating the first block avoids the fallback.
10
requests. Allocating the first block avoids the fallback.
11
11
12
Since we allocate the first block even with preallocation=off, we no
12
Since we allocate the first block even with preallocation=off, we no
13
longer create images with zero disk size:
13
longer create images with zero disk size:
14
14
15
$ ./qemu-img create -f raw test.raw 1g
15
$ ./qemu-img create -f raw test.raw 1g
16
Formatting 'test.raw', fmt=raw size=1073741824
16
Formatting 'test.raw', fmt=raw size=1073741824
17
17
18
$ ls -lhs test.raw
18
$ ls -lhs test.raw
19
4.0K -rw-r--r--. 1 nsoffer nsoffer 1.0G Aug 16 23:48 test.raw
19
4.0K -rw-r--r--. 1 nsoffer nsoffer 1.0G Aug 16 23:48 test.raw
20
20
21
And converting the image requires additional cluster:
21
And converting the image requires additional cluster:
22
22
23
$ ./qemu-img measure -f raw -O qcow2 test.raw
23
$ ./qemu-img measure -f raw -O qcow2 test.raw
24
required size: 458752
24
required size: 458752
25
fully allocated size: 1074135040
25
fully allocated size: 1074135040
26
26
27
When using format like vmdk with multiple files per image, we allocate
27
When using format like vmdk with multiple files per image, we allocate
28
one block per file:
28
one block per file:
29
29
30
$ ./qemu-img create -f vmdk -o subformat=twoGbMaxExtentFlat test.vmdk 4g
30
$ ./qemu-img create -f vmdk -o subformat=twoGbMaxExtentFlat test.vmdk 4g
31
Formatting 'test.vmdk', fmt=vmdk size=4294967296 compat6=off hwversion=undefined subformat=twoGbMaxExtentFlat
31
Formatting 'test.vmdk', fmt=vmdk size=4294967296 compat6=off hwversion=undefined subformat=twoGbMaxExtentFlat
32
32
33
$ ls -lhs test*.vmdk
33
$ ls -lhs test*.vmdk
34
4.0K -rw-r--r--. 1 nsoffer nsoffer 2.0G Aug 27 03:23 test-f001.vmdk
34
4.0K -rw-r--r--. 1 nsoffer nsoffer 2.0G Aug 27 03:23 test-f001.vmdk
35
4.0K -rw-r--r--. 1 nsoffer nsoffer 2.0G Aug 27 03:23 test-f002.vmdk
35
4.0K -rw-r--r--. 1 nsoffer nsoffer 2.0G Aug 27 03:23 test-f002.vmdk
36
4.0K -rw-r--r--. 1 nsoffer nsoffer 353 Aug 27 03:23 test.vmdk
36
4.0K -rw-r--r--. 1 nsoffer nsoffer 353 Aug 27 03:23 test.vmdk
37
37
38
I did quick performance test for copying disks with qemu-img convert to
38
I did quick performance test for copying disks with qemu-img convert to
39
new raw target image to Gluster storage with sector size of 512 bytes:
39
new raw target image to Gluster storage with sector size of 512 bytes:
40
40
41
for i in $(seq 10); do
41
for i in $(seq 10); do
42
rm -f dst.raw
42
rm -f dst.raw
43
sleep 10
43
sleep 10
44
time ./qemu-img convert -f raw -O raw -t none -T none src.raw dst.raw
44
time ./qemu-img convert -f raw -O raw -t none -T none src.raw dst.raw
45
done
45
done
46
46
47
Here is a table comparing the total time spent:
47
Here is a table comparing the total time spent:
48
48
49
Type Before(s) After(s) Diff(%)
49
Type Before(s) After(s) Diff(%)
50
---------------------------------------
50
---------------------------------------
51
real 530.028 469.123 -11.4
51
real 530.028 469.123 -11.4
52
user 17.204 10.768 -37.4
52
user 17.204 10.768 -37.4
53
sys 17.881 7.011 -60.7
53
sys 17.881 7.011 -60.7
54
54
55
We can see very clear improvement in CPU usage.
55
We can see very clear improvement in CPU usage.
56
56
57
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
57
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
58
Message-id: 20190827010528.8818-2-nsoffer@redhat.com
58
Message-id: 20190827010528.8818-2-nsoffer@redhat.com
59
Reviewed-by: Max Reitz <mreitz@redhat.com>
59
Reviewed-by: Max Reitz <mreitz@redhat.com>
60
Signed-off-by: Max Reitz <mreitz@redhat.com>
60
Signed-off-by: Max Reitz <mreitz@redhat.com>
61
---
61
---
62
block/file-posix.c | 51 +++++++++++++++++++
62
block/file-posix.c | 51 +++++++++++++++++++
63
tests/qemu-iotests/059.out | 2 +-
63
tests/qemu-iotests/059.out | 2 +-
64
tests/qemu-iotests/{150.out => 150.out.qcow2} | 0
64
tests/qemu-iotests/{150.out => 150.out.qcow2} | 0
65
tests/qemu-iotests/150.out.raw | 12 +++++
65
tests/qemu-iotests/150.out.raw | 12 +++++
66
tests/qemu-iotests/175 | 19 ++++---
66
tests/qemu-iotests/175 | 19 ++++---
67
tests/qemu-iotests/175.out | 8 +--
67
tests/qemu-iotests/175.out | 8 +--
68
tests/qemu-iotests/178.out.qcow2 | 4 +-
68
tests/qemu-iotests/178.out.qcow2 | 4 +-
69
tests/qemu-iotests/221.out | 12 +++--
69
tests/qemu-iotests/221.out | 12 +++--
70
tests/qemu-iotests/253.out | 12 +++--
70
tests/qemu-iotests/253.out | 12 +++--
71
9 files changed, 99 insertions(+), 21 deletions(-)
71
9 files changed, 99 insertions(+), 21 deletions(-)
72
rename tests/qemu-iotests/{150.out => 150.out.qcow2} (100%)
72
rename tests/qemu-iotests/{150.out => 150.out.qcow2} (100%)
73
create mode 100644 tests/qemu-iotests/150.out.raw
73
create mode 100644 tests/qemu-iotests/150.out.raw
74
74
75
diff --git a/block/file-posix.c b/block/file-posix.c
75
diff --git a/block/file-posix.c b/block/file-posix.c
76
index XXXXXXX..XXXXXXX 100644
76
index XXXXXXX..XXXXXXX 100644
77
--- a/block/file-posix.c
77
--- a/block/file-posix.c
78
+++ b/block/file-posix.c
78
+++ b/block/file-posix.c
79
@@ -XXX,XX +XXX,XX @@ static int handle_aiocb_discard(void *opaque)
79
@@ -XXX,XX +XXX,XX @@ static int handle_aiocb_discard(void *opaque)
80
return ret;
80
return ret;
81
}
81
}
82
82
83
+/*
83
+/*
84
+ * Help alignment probing by allocating the first block.
84
+ * Help alignment probing by allocating the first block.
85
+ *
85
+ *
86
+ * When reading with direct I/O from unallocated area on Gluster backed by XFS,
86
+ * When reading with direct I/O from unallocated area on Gluster backed by XFS,
87
+ * reading succeeds regardless of request length. In this case we fallback to
87
+ * reading succeeds regardless of request length. In this case we fallback to
88
+ * safe alignment which is not optimal. Allocating the first block avoids this
88
+ * safe alignment which is not optimal. Allocating the first block avoids this
89
+ * fallback.
89
+ * fallback.
90
+ *
90
+ *
91
+ * fd may be opened with O_DIRECT, but we don't know the buffer alignment or
91
+ * fd may be opened with O_DIRECT, but we don't know the buffer alignment or
92
+ * request alignment, so we use safe values.
92
+ * request alignment, so we use safe values.
93
+ *
93
+ *
94
+ * Returns: 0 on success, -errno on failure. Since this is an optimization,
94
+ * Returns: 0 on success, -errno on failure. Since this is an optimization,
95
+ * caller may ignore failures.
95
+ * caller may ignore failures.
96
+ */
96
+ */
97
+static int allocate_first_block(int fd, size_t max_size)
97
+static int allocate_first_block(int fd, size_t max_size)
98
+{
98
+{
99
+ size_t write_size = (max_size < MAX_BLOCKSIZE)
99
+ size_t write_size = (max_size < MAX_BLOCKSIZE)
100
+ ? BDRV_SECTOR_SIZE
100
+ ? BDRV_SECTOR_SIZE
101
+ : MAX_BLOCKSIZE;
101
+ : MAX_BLOCKSIZE;
102
+ size_t max_align = MAX(MAX_BLOCKSIZE, getpagesize());
102
+ size_t max_align = MAX(MAX_BLOCKSIZE, getpagesize());
103
+ void *buf;
103
+ void *buf;
104
+ ssize_t n;
104
+ ssize_t n;
105
+ int ret;
105
+ int ret;
106
+
106
+
107
+ buf = qemu_memalign(max_align, write_size);
107
+ buf = qemu_memalign(max_align, write_size);
108
+ memset(buf, 0, write_size);
108
+ memset(buf, 0, write_size);
109
+
109
+
110
+ do {
110
+ do {
111
+ n = pwrite(fd, buf, write_size, 0);
111
+ n = pwrite(fd, buf, write_size, 0);
112
+ } while (n == -1 && errno == EINTR);
112
+ } while (n == -1 && errno == EINTR);
113
+
113
+
114
+ ret = (n == -1) ? -errno : 0;
114
+ ret = (n == -1) ? -errno : 0;
115
+
115
+
116
+ qemu_vfree(buf);
116
+ qemu_vfree(buf);
117
+ return ret;
117
+ return ret;
118
+}
118
+}
119
+
119
+
120
static int handle_aiocb_truncate(void *opaque)
120
static int handle_aiocb_truncate(void *opaque)
121
{
121
{
122
RawPosixAIOData *aiocb = opaque;
122
RawPosixAIOData *aiocb = opaque;
123
@@ -XXX,XX +XXX,XX @@ static int handle_aiocb_truncate(void *opaque)
123
@@ -XXX,XX +XXX,XX @@ static int handle_aiocb_truncate(void *opaque)
124
/* posix_fallocate() doesn't set errno. */
124
/* posix_fallocate() doesn't set errno. */
125
error_setg_errno(errp, -result,
125
error_setg_errno(errp, -result,
126
"Could not preallocate new data");
126
"Could not preallocate new data");
127
+ } else if (current_length == 0) {
127
+ } else if (current_length == 0) {
128
+ /*
128
+ /*
129
+ * posix_fallocate() uses fallocate() if the filesystem
129
+ * posix_fallocate() uses fallocate() if the filesystem
130
+ * supports it, or fallback to manually writing zeroes. If
130
+ * supports it, or fallback to manually writing zeroes. If
131
+ * fallocate() was used, unaligned reads from the fallocated
131
+ * fallocate() was used, unaligned reads from the fallocated
132
+ * area in raw_probe_alignment() will succeed, hence we need to
132
+ * area in raw_probe_alignment() will succeed, hence we need to
133
+ * allocate the first block.
133
+ * allocate the first block.
134
+ *
134
+ *
135
+ * Optimize future alignment probing; ignore failures.
135
+ * Optimize future alignment probing; ignore failures.
136
+ */
136
+ */
137
+ allocate_first_block(fd, offset);
137
+ allocate_first_block(fd, offset);
138
}
138
}
139
} else {
139
} else {
140
result = 0;
140
result = 0;
141
@@ -XXX,XX +XXX,XX @@ static int handle_aiocb_truncate(void *opaque)
141
@@ -XXX,XX +XXX,XX @@ static int handle_aiocb_truncate(void *opaque)
142
if (ftruncate(fd, offset) != 0) {
142
if (ftruncate(fd, offset) != 0) {
143
result = -errno;
143
result = -errno;
144
error_setg_errno(errp, -result, "Could not resize file");
144
error_setg_errno(errp, -result, "Could not resize file");
145
+ } else if (current_length == 0 && offset > current_length) {
145
+ } else if (current_length == 0 && offset > current_length) {
146
+ /* Optimize future alignment probing; ignore failures. */
146
+ /* Optimize future alignment probing; ignore failures. */
147
+ allocate_first_block(fd, offset);
147
+ allocate_first_block(fd, offset);
148
}
148
}
149
return result;
149
return result;
150
default:
150
default:
151
diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out
151
diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out
152
index XXXXXXX..XXXXXXX 100644
152
index XXXXXXX..XXXXXXX 100644
153
--- a/tests/qemu-iotests/059.out
153
--- a/tests/qemu-iotests/059.out
154
+++ b/tests/qemu-iotests/059.out
154
+++ b/tests/qemu-iotests/059.out
155
@@ -XXX,XX +XXX,XX @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824000 subformat=twoGbMax
155
@@ -XXX,XX +XXX,XX @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824000 subformat=twoGbMax
156
image: TEST_DIR/t.vmdk
156
image: TEST_DIR/t.vmdk
157
file format: vmdk
157
file format: vmdk
158
virtual size: 0.977 TiB (1073741824000 bytes)
158
virtual size: 0.977 TiB (1073741824000 bytes)
159
-disk size: 16 KiB
159
-disk size: 16 KiB
160
+disk size: 1.97 MiB
160
+disk size: 1.97 MiB
161
Format specific information:
161
Format specific information:
162
cid: XXXXXXXX
162
cid: XXXXXXXX
163
parent cid: XXXXXXXX
163
parent cid: XXXXXXXX
164
diff --git a/tests/qemu-iotests/150.out b/tests/qemu-iotests/150.out.qcow2
164
diff --git a/tests/qemu-iotests/150.out b/tests/qemu-iotests/150.out.qcow2
165
similarity index 100%
165
similarity index 100%
166
rename from tests/qemu-iotests/150.out
166
rename from tests/qemu-iotests/150.out
167
rename to tests/qemu-iotests/150.out.qcow2
167
rename to tests/qemu-iotests/150.out.qcow2
168
diff --git a/tests/qemu-iotests/150.out.raw b/tests/qemu-iotests/150.out.raw
168
diff --git a/tests/qemu-iotests/150.out.raw b/tests/qemu-iotests/150.out.raw
169
new file mode 100644
169
new file mode 100644
170
index XXXXXXX..XXXXXXX
170
index XXXXXXX..XXXXXXX
171
--- /dev/null
171
--- /dev/null
172
+++ b/tests/qemu-iotests/150.out.raw
172
+++ b/tests/qemu-iotests/150.out.raw
173
@@ -XXX,XX +XXX,XX @@
173
@@ -XXX,XX +XXX,XX @@
174
+QA output created by 150
174
+QA output created by 150
175
+
175
+
176
+=== Mapping sparse conversion ===
176
+=== Mapping sparse conversion ===
177
+
177
+
178
+Offset Length File
178
+Offset Length File
179
+0 0x1000 TEST_DIR/t.IMGFMT
179
+0 0x1000 TEST_DIR/t.IMGFMT
180
+
180
+
181
+=== Mapping non-sparse conversion ===
181
+=== Mapping non-sparse conversion ===
182
+
182
+
183
+Offset Length File
183
+Offset Length File
184
+0 0x100000 TEST_DIR/t.IMGFMT
184
+0 0x100000 TEST_DIR/t.IMGFMT
185
+*** done
185
+*** done
186
diff --git a/tests/qemu-iotests/175 b/tests/qemu-iotests/175
186
diff --git a/tests/qemu-iotests/175 b/tests/qemu-iotests/175
187
index XXXXXXX..XXXXXXX 100755
187
index XXXXXXX..XXXXXXX 100755
188
--- a/tests/qemu-iotests/175
188
--- a/tests/qemu-iotests/175
189
+++ b/tests/qemu-iotests/175
189
+++ b/tests/qemu-iotests/175
190
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
190
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
191
# the file size. This function hides the resulting difference in the
191
# the file size. This function hides the resulting difference in the
192
# stat -c '%b' output.
192
# stat -c '%b' output.
193
# Parameter 1: Number of blocks an empty file occupies
193
# Parameter 1: Number of blocks an empty file occupies
194
-# Parameter 2: Image size in bytes
194
-# Parameter 2: Image size in bytes
195
+# Parameter 2: Minimal number of blocks in an image
195
+# Parameter 2: Minimal number of blocks in an image
196
+# Parameter 3: Image size in bytes
196
+# Parameter 3: Image size in bytes
197
_filter_blocks()
197
_filter_blocks()
198
{
198
{
199
extra_blocks=$1
199
extra_blocks=$1
200
- img_size=$2
200
- img_size=$2
201
+ min_blocks=$2
201
+ min_blocks=$2
202
+ img_size=$3
202
+ img_size=$3
203
203
204
- sed -e "s/blocks=$extra_blocks\\(\$\\|[^0-9]\\)/nothing allocated/" \
204
- sed -e "s/blocks=$extra_blocks\\(\$\\|[^0-9]\\)/nothing allocated/" \
205
- -e "s/blocks=$((extra_blocks + img_size / 512))\\(\$\\|[^0-9]\\)/everything allocated/"
205
- -e "s/blocks=$((extra_blocks + img_size / 512))\\(\$\\|[^0-9]\\)/everything allocated/"
206
+ sed -e "s/blocks=$min_blocks\\(\$\\|[^0-9]\\)/min allocation/" \
206
+ sed -e "s/blocks=$min_blocks\\(\$\\|[^0-9]\\)/min allocation/" \
207
+ -e "s/blocks=$((extra_blocks + img_size / 512))\\(\$\\|[^0-9]\\)/max allocation/"
207
+ -e "s/blocks=$((extra_blocks + img_size / 512))\\(\$\\|[^0-9]\\)/max allocation/"
208
}
208
}
209
209
210
# get standard environment, filters and checks
210
# get standard environment, filters and checks
211
@@ -XXX,XX +XXX,XX @@ size=$((1 * 1024 * 1024))
211
@@ -XXX,XX +XXX,XX @@ size=$((1 * 1024 * 1024))
212
touch "$TEST_DIR/empty"
212
touch "$TEST_DIR/empty"
213
extra_blocks=$(stat -c '%b' "$TEST_DIR/empty")
213
extra_blocks=$(stat -c '%b' "$TEST_DIR/empty")
214
214
215
+# We always write the first byte; check how many blocks this filesystem
215
+# We always write the first byte; check how many blocks this filesystem
216
+# allocates to match empty image alloation.
216
+# allocates to match empty image alloation.
217
+printf "\0" > "$TEST_DIR/empty"
217
+printf "\0" > "$TEST_DIR/empty"
218
+min_blocks=$(stat -c '%b' "$TEST_DIR/empty")
218
+min_blocks=$(stat -c '%b' "$TEST_DIR/empty")
219
+
219
+
220
echo
220
echo
221
echo "== creating image with default preallocation =="
221
echo "== creating image with default preallocation =="
222
_make_test_img $size | _filter_imgfmt
222
_make_test_img $size | _filter_imgfmt
223
-stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $size
223
-stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $size
224
+stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $size
224
+stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $size
225
225
226
for mode in off full falloc; do
226
for mode in off full falloc; do
227
echo
227
echo
228
echo "== creating image with preallocation $mode =="
228
echo "== creating image with preallocation $mode =="
229
IMGOPTS=preallocation=$mode _make_test_img $size | _filter_imgfmt
229
IMGOPTS=preallocation=$mode _make_test_img $size | _filter_imgfmt
230
- stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $size
230
- stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $size
231
+ stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $size
231
+ stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $size
232
done
232
done
233
233
234
# success, all done
234
# success, all done
235
diff --git a/tests/qemu-iotests/175.out b/tests/qemu-iotests/175.out
235
diff --git a/tests/qemu-iotests/175.out b/tests/qemu-iotests/175.out
236
index XXXXXXX..XXXXXXX 100644
236
index XXXXXXX..XXXXXXX 100644
237
--- a/tests/qemu-iotests/175.out
237
--- a/tests/qemu-iotests/175.out
238
+++ b/tests/qemu-iotests/175.out
238
+++ b/tests/qemu-iotests/175.out
239
@@ -XXX,XX +XXX,XX @@ QA output created by 175
239
@@ -XXX,XX +XXX,XX @@ QA output created by 175
240
240
241
== creating image with default preallocation ==
241
== creating image with default preallocation ==
242
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576
242
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576
243
-size=1048576, nothing allocated
243
-size=1048576, nothing allocated
244
+size=1048576, min allocation
244
+size=1048576, min allocation
245
245
246
== creating image with preallocation off ==
246
== creating image with preallocation off ==
247
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 preallocation=off
247
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 preallocation=off
248
-size=1048576, nothing allocated
248
-size=1048576, nothing allocated
249
+size=1048576, min allocation
249
+size=1048576, min allocation
250
250
251
== creating image with preallocation full ==
251
== creating image with preallocation full ==
252
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 preallocation=full
252
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 preallocation=full
253
-size=1048576, everything allocated
253
-size=1048576, everything allocated
254
+size=1048576, max allocation
254
+size=1048576, max allocation
255
255
256
== creating image with preallocation falloc ==
256
== creating image with preallocation falloc ==
257
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 preallocation=falloc
257
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 preallocation=falloc
258
-size=1048576, everything allocated
258
-size=1048576, everything allocated
259
+size=1048576, max allocation
259
+size=1048576, max allocation
260
*** done
260
*** done
261
diff --git a/tests/qemu-iotests/178.out.qcow2 b/tests/qemu-iotests/178.out.qcow2
261
diff --git a/tests/qemu-iotests/178.out.qcow2 b/tests/qemu-iotests/178.out.qcow2
262
index XXXXXXX..XXXXXXX 100644
262
index XXXXXXX..XXXXXXX 100644
263
--- a/tests/qemu-iotests/178.out.qcow2
263
--- a/tests/qemu-iotests/178.out.qcow2
264
+++ b/tests/qemu-iotests/178.out.qcow2
264
+++ b/tests/qemu-iotests/178.out.qcow2
265
@@ -XXX,XX +XXX,XX @@ converted image file size in bytes: 196608
265
@@ -XXX,XX +XXX,XX @@ converted image file size in bytes: 196608
266
== raw input image with data (human) ==
266
== raw input image with data (human) ==
267
267
268
Formatting 'TEST_DIR/t.qcow2', fmt=IMGFMT size=1073741824
268
Formatting 'TEST_DIR/t.qcow2', fmt=IMGFMT size=1073741824
269
-required size: 393216
269
-required size: 393216
270
+required size: 458752
270
+required size: 458752
271
fully allocated size: 1074135040
271
fully allocated size: 1074135040
272
wrote 512/512 bytes at offset 512
272
wrote 512/512 bytes at offset 512
273
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
273
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
274
@@ -XXX,XX +XXX,XX @@ converted image file size in bytes: 196608
274
@@ -XXX,XX +XXX,XX @@ converted image file size in bytes: 196608
275
275
276
Formatting 'TEST_DIR/t.qcow2', fmt=IMGFMT size=1073741824
276
Formatting 'TEST_DIR/t.qcow2', fmt=IMGFMT size=1073741824
277
{
277
{
278
- "required": 393216,
278
- "required": 393216,
279
+ "required": 458752,
279
+ "required": 458752,
280
"fully-allocated": 1074135040
280
"fully-allocated": 1074135040
281
}
281
}
282
wrote 512/512 bytes at offset 512
282
wrote 512/512 bytes at offset 512
283
diff --git a/tests/qemu-iotests/221.out b/tests/qemu-iotests/221.out
283
diff --git a/tests/qemu-iotests/221.out b/tests/qemu-iotests/221.out
284
index XXXXXXX..XXXXXXX 100644
284
index XXXXXXX..XXXXXXX 100644
285
--- a/tests/qemu-iotests/221.out
285
--- a/tests/qemu-iotests/221.out
286
+++ b/tests/qemu-iotests/221.out
286
+++ b/tests/qemu-iotests/221.out
287
@@ -XXX,XX +XXX,XX @@ QA output created by 221
287
@@ -XXX,XX +XXX,XX @@ QA output created by 221
288
=== Check mapping of unaligned raw image ===
288
=== Check mapping of unaligned raw image ===
289
289
290
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=65537
290
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=65537
291
-[{ "start": 0, "length": 66048, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
291
-[{ "start": 0, "length": 66048, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
292
-[{ "start": 0, "length": 66048, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
292
-[{ "start": 0, "length": 66048, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
293
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
293
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
294
+{ "start": 4096, "length": 61952, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
294
+{ "start": 4096, "length": 61952, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
295
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
295
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
296
+{ "start": 4096, "length": 61952, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
296
+{ "start": 4096, "length": 61952, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
297
wrote 1/1 bytes at offset 65536
297
wrote 1/1 bytes at offset 65536
298
1 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
298
1 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
299
-[{ "start": 0, "length": 65536, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
299
-[{ "start": 0, "length": 65536, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
300
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
300
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
301
+{ "start": 4096, "length": 61440, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
301
+{ "start": 4096, "length": 61440, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
302
{ "start": 65536, "length": 1, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
302
{ "start": 65536, "length": 1, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
303
{ "start": 65537, "length": 511, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
303
{ "start": 65537, "length": 511, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
304
-[{ "start": 0, "length": 65536, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
304
-[{ "start": 0, "length": 65536, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
305
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
305
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
306
+{ "start": 4096, "length": 61440, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
306
+{ "start": 4096, "length": 61440, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
307
{ "start": 65536, "length": 1, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
307
{ "start": 65536, "length": 1, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
308
{ "start": 65537, "length": 511, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
308
{ "start": 65537, "length": 511, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
309
*** done
309
*** done
310
diff --git a/tests/qemu-iotests/253.out b/tests/qemu-iotests/253.out
310
diff --git a/tests/qemu-iotests/253.out b/tests/qemu-iotests/253.out
311
index XXXXXXX..XXXXXXX 100644
311
index XXXXXXX..XXXXXXX 100644
312
--- a/tests/qemu-iotests/253.out
312
--- a/tests/qemu-iotests/253.out
313
+++ b/tests/qemu-iotests/253.out
313
+++ b/tests/qemu-iotests/253.out
314
@@ -XXX,XX +XXX,XX @@ QA output created by 253
314
@@ -XXX,XX +XXX,XX @@ QA output created by 253
315
=== Check mapping of unaligned raw image ===
315
=== Check mapping of unaligned raw image ===
316
316
317
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048575
317
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048575
318
-[{ "start": 0, "length": 1048576, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
318
-[{ "start": 0, "length": 1048576, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
319
-[{ "start": 0, "length": 1048576, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
319
-[{ "start": 0, "length": 1048576, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
320
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
320
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
321
+{ "start": 4096, "length": 1044480, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
321
+{ "start": 4096, "length": 1044480, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
322
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
322
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
323
+{ "start": 4096, "length": 1044480, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
323
+{ "start": 4096, "length": 1044480, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
324
wrote 65535/65535 bytes at offset 983040
324
wrote 65535/65535 bytes at offset 983040
325
63.999 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
325
63.999 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
326
-[{ "start": 0, "length": 983040, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
326
-[{ "start": 0, "length": 983040, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
327
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
327
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
328
+{ "start": 4096, "length": 978944, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
328
+{ "start": 4096, "length": 978944, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
329
{ "start": 983040, "length": 65536, "depth": 0, "zero": false, "data": true, "offset": OFFSET}]
329
{ "start": 983040, "length": 65536, "depth": 0, "zero": false, "data": true, "offset": OFFSET}]
330
-[{ "start": 0, "length": 983040, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
330
-[{ "start": 0, "length": 983040, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
331
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
331
+[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET},
332
+{ "start": 4096, "length": 978944, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
332
+{ "start": 4096, "length": 978944, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
333
{ "start": 983040, "length": 65536, "depth": 0, "zero": false, "data": true, "offset": OFFSET}]
333
{ "start": 983040, "length": 65536, "depth": 0, "zero": false, "data": true, "offset": OFFSET}]
334
*** done
334
*** done
335
--
335
--
336
2.21.0
336
2.21.0
337
337
338
338
diff view generated by jsdifflib
1
From: Nir Soffer <nirsof@gmail.com>
1
From: Nir Soffer <nirsof@gmail.com>
2
2
3
Using block_resize we can test allocate_first_block() with file
3
Using block_resize we can test allocate_first_block() with file
4
descriptor opened with O_DIRECT, ensuring that it works for any size
4
descriptor opened with O_DIRECT, ensuring that it works for any size
5
larger than 4096 bytes.
5
larger than 4096 bytes.
6
6
7
Testing smaller sizes is tricky as the result depends on the filesystem
7
Testing smaller sizes is tricky as the result depends on the filesystem
8
used for testing. For example on NFS any size will work since O_DIRECT
8
used for testing. For example on NFS any size will work since O_DIRECT
9
does not require any alignment.
9
does not require any alignment.
10
10
11
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
11
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
12
Reviewed-by: Max Reitz <mreitz@redhat.com>
12
Reviewed-by: Max Reitz <mreitz@redhat.com>
13
Message-id: 20190827010528.8818-3-nsoffer@redhat.com
13
Message-id: 20190827010528.8818-3-nsoffer@redhat.com
14
Signed-off-by: Max Reitz <mreitz@redhat.com>
14
Signed-off-by: Max Reitz <mreitz@redhat.com>
15
---
15
---
16
tests/qemu-iotests/175 | 28 ++++++++++++++++++++++++++++
16
tests/qemu-iotests/175 | 28 ++++++++++++++++++++++++++++
17
tests/qemu-iotests/175.out | 8 ++++++++
17
tests/qemu-iotests/175.out | 8 ++++++++
18
2 files changed, 36 insertions(+)
18
2 files changed, 36 insertions(+)
19
19
20
diff --git a/tests/qemu-iotests/175 b/tests/qemu-iotests/175
20
diff --git a/tests/qemu-iotests/175 b/tests/qemu-iotests/175
21
index XXXXXXX..XXXXXXX 100755
21
index XXXXXXX..XXXXXXX 100755
22
--- a/tests/qemu-iotests/175
22
--- a/tests/qemu-iotests/175
23
+++ b/tests/qemu-iotests/175
23
+++ b/tests/qemu-iotests/175
24
@@ -XXX,XX +XXX,XX @@ _filter_blocks()
24
@@ -XXX,XX +XXX,XX @@ _filter_blocks()
25
-e "s/blocks=$((extra_blocks + img_size / 512))\\(\$\\|[^0-9]\\)/max allocation/"
25
-e "s/blocks=$((extra_blocks + img_size / 512))\\(\$\\|[^0-9]\\)/max allocation/"
26
}
26
}
27
27
28
+# Resize image using block_resize.
28
+# Resize image using block_resize.
29
+# Parameter 1: image path
29
+# Parameter 1: image path
30
+# Parameter 2: new size
30
+# Parameter 2: new size
31
+_block_resize()
31
+_block_resize()
32
+{
32
+{
33
+ local path=$1
33
+ local path=$1
34
+ local size=$2
34
+ local size=$2
35
+
35
+
36
+ $QEMU -qmp stdio -nographic -nodefaults \
36
+ $QEMU -qmp stdio -nographic -nodefaults \
37
+ -blockdev file,node-name=file,filename=$path,cache.direct=on \
37
+ -blockdev file,node-name=file,filename=$path,cache.direct=on \
38
+ <<EOF
38
+ <<EOF
39
+{'execute': 'qmp_capabilities'}
39
+{'execute': 'qmp_capabilities'}
40
+{'execute': 'block_resize', 'arguments': {'node-name': 'file', 'size': $size}}
40
+{'execute': 'block_resize', 'arguments': {'node-name': 'file', 'size': $size}}
41
+{'execute': 'quit'}
41
+{'execute': 'quit'}
42
+EOF
42
+EOF
43
+}
43
+}
44
+
44
+
45
# get standard environment, filters and checks
45
# get standard environment, filters and checks
46
. ./common.rc
46
. ./common.rc
47
. ./common.filter
47
. ./common.filter
48
@@ -XXX,XX +XXX,XX @@ _supported_fmt raw
48
@@ -XXX,XX +XXX,XX @@ _supported_fmt raw
49
_supported_proto file
49
_supported_proto file
50
_supported_os Linux
50
_supported_os Linux
51
51
52
+_default_cache_mode none
52
+_default_cache_mode none
53
+_supported_cache_modes none directsync
53
+_supported_cache_modes none directsync
54
+
54
+
55
size=$((1 * 1024 * 1024))
55
size=$((1 * 1024 * 1024))
56
56
57
touch "$TEST_DIR/empty"
57
touch "$TEST_DIR/empty"
58
@@ -XXX,XX +XXX,XX @@ for mode in off full falloc; do
58
@@ -XXX,XX +XXX,XX @@ for mode in off full falloc; do
59
stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $size
59
stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $size
60
done
60
done
61
61
62
+for new_size in 4096 1048576; do
62
+for new_size in 4096 1048576; do
63
+ echo
63
+ echo
64
+ echo "== resize empty image with block_resize =="
64
+ echo "== resize empty image with block_resize =="
65
+ _make_test_img 0 | _filter_imgfmt
65
+ _make_test_img 0 | _filter_imgfmt
66
+ _block_resize $TEST_IMG $new_size >/dev/null
66
+ _block_resize $TEST_IMG $new_size >/dev/null
67
+ stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $new_size
67
+ stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $new_size
68
+done
68
+done
69
+
69
+
70
# success, all done
70
# success, all done
71
echo "*** done"
71
echo "*** done"
72
rm -f $seq.full
72
rm -f $seq.full
73
diff --git a/tests/qemu-iotests/175.out b/tests/qemu-iotests/175.out
73
diff --git a/tests/qemu-iotests/175.out b/tests/qemu-iotests/175.out
74
index XXXXXXX..XXXXXXX 100644
74
index XXXXXXX..XXXXXXX 100644
75
--- a/tests/qemu-iotests/175.out
75
--- a/tests/qemu-iotests/175.out
76
+++ b/tests/qemu-iotests/175.out
76
+++ b/tests/qemu-iotests/175.out
77
@@ -XXX,XX +XXX,XX @@ size=1048576, max allocation
77
@@ -XXX,XX +XXX,XX @@ size=1048576, max allocation
78
== creating image with preallocation falloc ==
78
== creating image with preallocation falloc ==
79
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 preallocation=falloc
79
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 preallocation=falloc
80
size=1048576, max allocation
80
size=1048576, max allocation
81
+
81
+
82
+== resize empty image with block_resize ==
82
+== resize empty image with block_resize ==
83
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=0
83
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=0
84
+size=4096, min allocation
84
+size=4096, min allocation
85
+
85
+
86
+== resize empty image with block_resize ==
86
+== resize empty image with block_resize ==
87
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=0
87
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=0
88
+size=1048576, min allocation
88
+size=1048576, min allocation
89
*** done
89
*** done
90
--
90
--
91
2.21.0
91
2.21.0
92
92
93
93
diff view generated by jsdifflib
1
fe646693acc changed qemu-img create's output so that it no longer prints
1
fe646693acc changed qemu-img create's output so that it no longer prints
2
single quotes around parameter values. The subformat and adapter_type
2
single quotes around parameter values. The subformat and adapter_type
3
filters in _filter_img_create() have never been adapted to that change.
3
filters in _filter_img_create() have never been adapted to that change.
4
4
5
Fixes: fe646693acc13ac48b98435d14149ab04dc597bc
5
Fixes: fe646693acc13ac48b98435d14149ab04dc597bc
6
Signed-off-by: Max Reitz <mreitz@redhat.com>
6
Signed-off-by: Max Reitz <mreitz@redhat.com>
7
Reviewed-by: John Snow <jsnow@redhat.com>
7
Reviewed-by: John Snow <jsnow@redhat.com>
8
Message-id: 20190815153638.4600-2-mreitz@redhat.com
8
Message-id: 20190815153638.4600-2-mreitz@redhat.com
9
Reviewed-by: John Snow <jsnow@redhat.com>
9
Reviewed-by: John Snow <jsnow@redhat.com>
10
Signed-off-by: Max Reitz <mreitz@redhat.com>
10
Signed-off-by: Max Reitz <mreitz@redhat.com>
11
---
11
---
12
tests/qemu-iotests/059.out | 16 ++++++++--------
12
tests/qemu-iotests/059.out | 16 ++++++++--------
13
tests/qemu-iotests/common.filter | 4 ++--
13
tests/qemu-iotests/common.filter | 4 ++--
14
2 files changed, 10 insertions(+), 10 deletions(-)
14
2 files changed, 10 insertions(+), 10 deletions(-)
15
15
16
diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out
16
diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out
17
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
18
--- a/tests/qemu-iotests/059.out
18
--- a/tests/qemu-iotests/059.out
19
+++ b/tests/qemu-iotests/059.out
19
+++ b/tests/qemu-iotests/059.out
20
@@ -XXX,XX +XXX,XX @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
20
@@ -XXX,XX +XXX,XX @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
21
qemu-io: can't open device TEST_DIR/t.vmdk: L1 size too big
21
qemu-io: can't open device TEST_DIR/t.vmdk: L1 size too big
22
22
23
=== Testing monolithicFlat creation and opening ===
23
=== Testing monolithicFlat creation and opening ===
24
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648 subformat=monolithicFlat
24
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648 subformat=monolithicFlat
25
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648
25
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648
26
image: TEST_DIR/t.IMGFMT
26
image: TEST_DIR/t.IMGFMT
27
file format: IMGFMT
27
file format: IMGFMT
28
virtual size: 2 GiB (2147483648 bytes)
28
virtual size: 2 GiB (2147483648 bytes)
29
29
30
=== Testing monolithicFlat with zeroed_grain ===
30
=== Testing monolithicFlat with zeroed_grain ===
31
qemu-img: TEST_DIR/t.IMGFMT: Flat image can't enable zeroed grain
31
qemu-img: TEST_DIR/t.IMGFMT: Flat image can't enable zeroed grain
32
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648 subformat=monolithicFlat
32
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648 subformat=monolithicFlat
33
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648
33
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648
34
34
35
=== Testing big twoGbMaxExtentFlat ===
35
=== Testing big twoGbMaxExtentFlat ===
36
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824000 subformat=twoGbMaxExtentFlat
36
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824000 subformat=twoGbMaxExtentFlat
37
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824000
37
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824000
38
image: TEST_DIR/t.vmdk
38
image: TEST_DIR/t.vmdk
39
file format: vmdk
39
file format: vmdk
40
virtual size: 0.977 TiB (1073741824000 bytes)
40
virtual size: 0.977 TiB (1073741824000 bytes)
41
@@ -XXX,XX +XXX,XX @@ Format specific information:
41
@@ -XXX,XX +XXX,XX @@ Format specific information:
42
qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Invalid extent line: RW 12582912 VMFS "dummy.IMGFMT" 1
42
qemu-img: Could not open 'TEST_DIR/t.IMGFMT': Invalid extent line: RW 12582912 VMFS "dummy.IMGFMT" 1
43
43
44
=== Testing truncated sparse ===
44
=== Testing truncated sparse ===
45
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=107374182400 subformat=monolithicSparse
45
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=107374182400 subformat=monolithicSparse
46
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=107374182400
46
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=107374182400
47
qemu-img: Could not open 'TEST_DIR/t.IMGFMT': File truncated, expecting at least 13172736 bytes
47
qemu-img: Could not open 'TEST_DIR/t.IMGFMT': File truncated, expecting at least 13172736 bytes
48
48
49
=== Converting to streamOptimized from image with small cluster size===
49
=== Converting to streamOptimized from image with small cluster size===
50
@@ -XXX,XX +XXX,XX @@ wrote 512/512 bytes at offset 10240
50
@@ -XXX,XX +XXX,XX @@ wrote 512/512 bytes at offset 10240
51
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
51
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
52
52
53
=== Testing monolithicFlat with internally generated JSON file name ===
53
=== Testing monolithicFlat with internally generated JSON file name ===
54
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 subformat=monolithicFlat
54
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 subformat=monolithicFlat
55
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
55
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
56
qemu-io: can't open: Cannot use relative extent paths with VMDK descriptor file 'json:{"image": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "driver": "blkdebug", "inject-error.0.event": "read_aio"}'
56
qemu-io: can't open: Cannot use relative extent paths with VMDK descriptor file 'json:{"image": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "driver": "blkdebug", "inject-error.0.event": "read_aio"}'
57
57
58
=== Testing version 3 ===
58
=== Testing version 3 ===
59
@@ -XXX,XX +XXX,XX @@ read 512/512 bytes at offset 64931328
59
@@ -XXX,XX +XXX,XX @@ read 512/512 bytes at offset 64931328
60
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
60
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
61
61
62
=== Testing 4TB monolithicFlat creation and IO ===
62
=== Testing 4TB monolithicFlat creation and IO ===
63
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4398046511104 subformat=monolithicFlat
63
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4398046511104 subformat=monolithicFlat
64
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4398046511104
64
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4398046511104
65
image: TEST_DIR/t.IMGFMT
65
image: TEST_DIR/t.IMGFMT
66
file format: IMGFMT
66
file format: IMGFMT
67
virtual size: 4 TiB (4398046511104 bytes)
67
virtual size: 4 TiB (4398046511104 bytes)
68
@@ -XXX,XX +XXX,XX @@ read 1024/1024 bytes at offset 966367641600
68
@@ -XXX,XX +XXX,XX @@ read 1024/1024 bytes at offset 966367641600
69
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
69
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
70
70
71
=== Testing qemu-img map on extents ===
71
=== Testing qemu-img map on extents ===
72
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33285996544 subformat=monolithicSparse
72
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33285996544 subformat=monolithicSparse
73
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33285996544
73
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33285996544
74
wrote 1024/1024 bytes at offset 65024
74
wrote 1024/1024 bytes at offset 65024
75
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
75
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
76
wrote 1024/1024 bytes at offset 2147483136
76
wrote 1024/1024 bytes at offset 2147483136
77
@@ -XXX,XX +XXX,XX @@ Offset Length Mapped to File
77
@@ -XXX,XX +XXX,XX @@ Offset Length Mapped to File
78
0 0x20000 0x3f0000 TEST_DIR/t.vmdk
78
0 0x20000 0x3f0000 TEST_DIR/t.vmdk
79
0x7fff0000 0x20000 0x410000 TEST_DIR/t.vmdk
79
0x7fff0000 0x20000 0x410000 TEST_DIR/t.vmdk
80
0x140000000 0x10000 0x430000 TEST_DIR/t.vmdk
80
0x140000000 0x10000 0x430000 TEST_DIR/t.vmdk
81
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33285996544 subformat=twoGbMaxExtentSparse
81
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33285996544 subformat=twoGbMaxExtentSparse
82
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33285996544
82
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33285996544
83
wrote 1024/1024 bytes at offset 65024
83
wrote 1024/1024 bytes at offset 65024
84
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
84
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
85
wrote 1024/1024 bytes at offset 2147483136
85
wrote 1024/1024 bytes at offset 2147483136
86
diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter
86
diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter
87
index XXXXXXX..XXXXXXX 100644
87
index XXXXXXX..XXXXXXX 100644
88
--- a/tests/qemu-iotests/common.filter
88
--- a/tests/qemu-iotests/common.filter
89
+++ b/tests/qemu-iotests/common.filter
89
+++ b/tests/qemu-iotests/common.filter
90
@@ -XXX,XX +XXX,XX @@ _filter_img_create()
90
@@ -XXX,XX +XXX,XX @@ _filter_img_create()
91
-e "s# compat6=\\(on\\|off\\)##g" \
91
-e "s# compat6=\\(on\\|off\\)##g" \
92
-e "s# static=\\(on\\|off\\)##g" \
92
-e "s# static=\\(on\\|off\\)##g" \
93
-e "s# zeroed_grain=\\(on\\|off\\)##g" \
93
-e "s# zeroed_grain=\\(on\\|off\\)##g" \
94
- -e "s# subformat='[^']*'##g" \
94
- -e "s# subformat='[^']*'##g" \
95
- -e "s# adapter_type='[^']*'##g" \
95
- -e "s# adapter_type='[^']*'##g" \
96
+ -e "s# subformat=[^ ]*##g" \
96
+ -e "s# subformat=[^ ]*##g" \
97
+ -e "s# adapter_type=[^ ]*##g" \
97
+ -e "s# adapter_type=[^ ]*##g" \
98
-e "s# hwversion=[^ ]*##g" \
98
-e "s# hwversion=[^ ]*##g" \
99
-e "s# lazy_refcounts=\\(on\\|off\\)##g" \
99
-e "s# lazy_refcounts=\\(on\\|off\\)##g" \
100
-e "s# block_size=[0-9]\\+##g" \
100
-e "s# block_size=[0-9]\\+##g" \
101
--
101
--
102
2.21.0
102
2.21.0
103
103
104
104
diff view generated by jsdifflib
1
This makes iotest 033 pass with e.g. subformat=monolithicFlat. It also
1
This makes iotest 033 pass with e.g. subformat=monolithicFlat. It also
2
turns a former error in 059 into success.
2
turns a former error in 059 into success.
3
3
4
Signed-off-by: Max Reitz <mreitz@redhat.com>
4
Signed-off-by: Max Reitz <mreitz@redhat.com>
5
Message-id: 20190815153638.4600-3-mreitz@redhat.com
5
Message-id: 20190815153638.4600-3-mreitz@redhat.com
6
Reviewed-by: John Snow <jsnow@redhat.com>
6
Reviewed-by: John Snow <jsnow@redhat.com>
7
Signed-off-by: Max Reitz <mreitz@redhat.com>
7
Signed-off-by: Max Reitz <mreitz@redhat.com>
8
---
8
---
9
block/vmdk.c | 54 ++++++++++++++++++++++++--------------
9
block/vmdk.c | 54 ++++++++++++++++++++++++--------------
10
tests/qemu-iotests/059 | 7 +++--
10
tests/qemu-iotests/059 | 7 +++--
11
tests/qemu-iotests/059.out | 4 ++-
11
tests/qemu-iotests/059.out | 4 ++-
12
3 files changed, 42 insertions(+), 23 deletions(-)
12
3 files changed, 42 insertions(+), 23 deletions(-)
13
13
14
diff --git a/block/vmdk.c b/block/vmdk.c
14
diff --git a/block/vmdk.c b/block/vmdk.c
15
index XXXXXXX..XXXXXXX 100644
15
index XXXXXXX..XXXXXXX 100644
16
--- a/block/vmdk.c
16
--- a/block/vmdk.c
17
+++ b/block/vmdk.c
17
+++ b/block/vmdk.c
18
@@ -XXX,XX +XXX,XX @@ static const char *next_line(const char *s)
18
@@ -XXX,XX +XXX,XX @@ static const char *next_line(const char *s)
19
}
19
}
20
20
21
static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
21
static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
22
- const char *desc_file_path, QDict *options,
22
- const char *desc_file_path, QDict *options,
23
- Error **errp)
23
- Error **errp)
24
+ QDict *options, Error **errp)
24
+ QDict *options, Error **errp)
25
{
25
{
26
int ret;
26
int ret;
27
int matches;
27
int matches;
28
@@ -XXX,XX +XXX,XX @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
28
@@ -XXX,XX +XXX,XX @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
29
const char *p, *np;
29
const char *p, *np;
30
int64_t sectors = 0;
30
int64_t sectors = 0;
31
int64_t flat_offset;
31
int64_t flat_offset;
32
+ char *desc_file_dir = NULL;
32
+ char *desc_file_dir = NULL;
33
char *extent_path;
33
char *extent_path;
34
BdrvChild *extent_file;
34
BdrvChild *extent_file;
35
BDRVVmdkState *s = bs->opaque;
35
BDRVVmdkState *s = bs->opaque;
36
@@ -XXX,XX +XXX,XX @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
36
@@ -XXX,XX +XXX,XX @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
37
continue;
37
continue;
38
}
38
}
39
39
40
- if (!path_is_absolute(fname) && !path_has_protocol(fname) &&
40
- if (!path_is_absolute(fname) && !path_has_protocol(fname) &&
41
- !desc_file_path[0])
41
- !desc_file_path[0])
42
- {
42
- {
43
- bdrv_refresh_filename(bs->file->bs);
43
- bdrv_refresh_filename(bs->file->bs);
44
- error_setg(errp, "Cannot use relative extent paths with VMDK "
44
- error_setg(errp, "Cannot use relative extent paths with VMDK "
45
- "descriptor file '%s'", bs->file->bs->filename);
45
- "descriptor file '%s'", bs->file->bs->filename);
46
- return -EINVAL;
46
- return -EINVAL;
47
- }
47
- }
48
+ if (path_is_absolute(fname)) {
48
+ if (path_is_absolute(fname)) {
49
+ extent_path = g_strdup(fname);
49
+ extent_path = g_strdup(fname);
50
+ } else {
50
+ } else {
51
+ if (!desc_file_dir) {
51
+ if (!desc_file_dir) {
52
+ desc_file_dir = bdrv_dirname(bs->file->bs, errp);
52
+ desc_file_dir = bdrv_dirname(bs->file->bs, errp);
53
+ if (!desc_file_dir) {
53
+ if (!desc_file_dir) {
54
+ bdrv_refresh_filename(bs->file->bs);
54
+ bdrv_refresh_filename(bs->file->bs);
55
+ error_prepend(errp, "Cannot use relative paths with VMDK "
55
+ error_prepend(errp, "Cannot use relative paths with VMDK "
56
+ "descriptor file '%s': ",
56
+ "descriptor file '%s': ",
57
+ bs->file->bs->filename);
57
+ bs->file->bs->filename);
58
+ ret = -EINVAL;
58
+ ret = -EINVAL;
59
+ goto out;
59
+ goto out;
60
+ }
60
+ }
61
+ }
61
+ }
62
62
63
- extent_path = path_combine(desc_file_path, fname);
63
- extent_path = path_combine(desc_file_path, fname);
64
+ extent_path = g_strconcat(desc_file_dir, fname, NULL);
64
+ extent_path = g_strconcat(desc_file_dir, fname, NULL);
65
+ }
65
+ }
66
66
67
ret = snprintf(extent_opt_prefix, 32, "extents.%d", s->num_extents);
67
ret = snprintf(extent_opt_prefix, 32, "extents.%d", s->num_extents);
68
assert(ret < 32);
68
assert(ret < 32);
69
@@ -XXX,XX +XXX,XX @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
69
@@ -XXX,XX +XXX,XX @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
70
g_free(extent_path);
70
g_free(extent_path);
71
if (local_err) {
71
if (local_err) {
72
error_propagate(errp, local_err);
72
error_propagate(errp, local_err);
73
- return -EINVAL;
73
- return -EINVAL;
74
+ ret = -EINVAL;
74
+ ret = -EINVAL;
75
+ goto out;
75
+ goto out;
76
}
76
}
77
77
78
/* save to extents array */
78
/* save to extents array */
79
@@ -XXX,XX +XXX,XX @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
79
@@ -XXX,XX +XXX,XX @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
80
0, 0, 0, 0, 0, &extent, errp);
80
0, 0, 0, 0, 0, &extent, errp);
81
if (ret < 0) {
81
if (ret < 0) {
82
bdrv_unref_child(bs, extent_file);
82
bdrv_unref_child(bs, extent_file);
83
- return ret;
83
- return ret;
84
+ goto out;
84
+ goto out;
85
}
85
}
86
extent->flat_start_offset = flat_offset << 9;
86
extent->flat_start_offset = flat_offset << 9;
87
} else if (!strcmp(type, "SPARSE") || !strcmp(type, "VMFSSPARSE")) {
87
} else if (!strcmp(type, "SPARSE") || !strcmp(type, "VMFSSPARSE")) {
88
@@ -XXX,XX +XXX,XX @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
88
@@ -XXX,XX +XXX,XX @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
89
g_free(buf);
89
g_free(buf);
90
if (ret) {
90
if (ret) {
91
bdrv_unref_child(bs, extent_file);
91
bdrv_unref_child(bs, extent_file);
92
- return ret;
92
- return ret;
93
+ goto out;
93
+ goto out;
94
}
94
}
95
extent = &s->extents[s->num_extents - 1];
95
extent = &s->extents[s->num_extents - 1];
96
} else if (!strcmp(type, "SESPARSE")) {
96
} else if (!strcmp(type, "SESPARSE")) {
97
ret = vmdk_open_se_sparse(bs, extent_file, bs->open_flags, errp);
97
ret = vmdk_open_se_sparse(bs, extent_file, bs->open_flags, errp);
98
if (ret) {
98
if (ret) {
99
bdrv_unref_child(bs, extent_file);
99
bdrv_unref_child(bs, extent_file);
100
- return ret;
100
- return ret;
101
+ goto out;
101
+ goto out;
102
}
102
}
103
extent = &s->extents[s->num_extents - 1];
103
extent = &s->extents[s->num_extents - 1];
104
} else {
104
} else {
105
error_setg(errp, "Unsupported extent type '%s'", type);
105
error_setg(errp, "Unsupported extent type '%s'", type);
106
bdrv_unref_child(bs, extent_file);
106
bdrv_unref_child(bs, extent_file);
107
- return -ENOTSUP;
107
- return -ENOTSUP;
108
+ ret = -ENOTSUP;
108
+ ret = -ENOTSUP;
109
+ goto out;
109
+ goto out;
110
}
110
}
111
extent->type = g_strdup(type);
111
extent->type = g_strdup(type);
112
}
112
}
113
- return 0;
113
- return 0;
114
+
114
+
115
+ ret = 0;
115
+ ret = 0;
116
+ goto out;
116
+ goto out;
117
117
118
invalid:
118
invalid:
119
np = next_line(p);
119
np = next_line(p);
120
@@ -XXX,XX +XXX,XX @@ invalid:
120
@@ -XXX,XX +XXX,XX @@ invalid:
121
np--;
121
np--;
122
}
122
}
123
error_setg(errp, "Invalid extent line: %.*s", (int)(np - p), p);
123
error_setg(errp, "Invalid extent line: %.*s", (int)(np - p), p);
124
- return -EINVAL;
124
- return -EINVAL;
125
+ ret = -EINVAL;
125
+ ret = -EINVAL;
126
+
126
+
127
+out:
127
+out:
128
+ g_free(desc_file_dir);
128
+ g_free(desc_file_dir);
129
+ return ret;
129
+ return ret;
130
}
130
}
131
131
132
static int vmdk_open_desc_file(BlockDriverState *bs, int flags, char *buf,
132
static int vmdk_open_desc_file(BlockDriverState *bs, int flags, char *buf,
133
@@ -XXX,XX +XXX,XX @@ static int vmdk_open_desc_file(BlockDriverState *bs, int flags, char *buf,
133
@@ -XXX,XX +XXX,XX @@ static int vmdk_open_desc_file(BlockDriverState *bs, int flags, char *buf,
134
}
134
}
135
s->create_type = g_strdup(ct);
135
s->create_type = g_strdup(ct);
136
s->desc_offset = 0;
136
s->desc_offset = 0;
137
- ret = vmdk_parse_extents(buf, bs, bs->file->bs->exact_filename, options,
137
- ret = vmdk_parse_extents(buf, bs, bs->file->bs->exact_filename, options,
138
- errp);
138
- errp);
139
+ ret = vmdk_parse_extents(buf, bs, options, errp);
139
+ ret = vmdk_parse_extents(buf, bs, options, errp);
140
exit:
140
exit:
141
return ret;
141
return ret;
142
}
142
}
143
diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059
143
diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059
144
index XXXXXXX..XXXXXXX 100755
144
index XXXXXXX..XXXXXXX 100755
145
--- a/tests/qemu-iotests/059
145
--- a/tests/qemu-iotests/059
146
+++ b/tests/qemu-iotests/059
146
+++ b/tests/qemu-iotests/059
147
@@ -XXX,XX +XXX,XX @@ $QEMU_IMG convert -f qcow2 -O vmdk -o subformat=streamOptimized "$TEST_IMG.qcow2
147
@@ -XXX,XX +XXX,XX @@ $QEMU_IMG convert -f qcow2 -O vmdk -o subformat=streamOptimized "$TEST_IMG.qcow2
148
148
149
echo
149
echo
150
echo "=== Testing monolithicFlat with internally generated JSON file name ==="
150
echo "=== Testing monolithicFlat with internally generated JSON file name ==="
151
+# Should work, because bdrv_dirname() works fine with blkdebug
151
+# Should work, because bdrv_dirname() works fine with blkdebug
152
IMGOPTS="subformat=monolithicFlat" _make_test_img 64M
152
IMGOPTS="subformat=monolithicFlat" _make_test_img 64M
153
-$QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.image.filename=$TEST_IMG,file.inject-error.0.event=read_aio" 2>&1 \
153
-$QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.image.filename=$TEST_IMG,file.inject-error.0.event=read_aio" 2>&1 \
154
- | _filter_testdir | _filter_imgfmt
154
- | _filter_testdir | _filter_imgfmt
155
+$QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.image.filename=$TEST_IMG,file.inject-error.0.event=read_aio" \
155
+$QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.image.filename=$TEST_IMG,file.inject-error.0.event=read_aio" \
156
+ -c info \
156
+ -c info \
157
+ 2>&1 \
157
+ 2>&1 \
158
+ | _filter_testdir | _filter_imgfmt | _filter_img_info
158
+ | _filter_testdir | _filter_imgfmt | _filter_img_info
159
_cleanup_test_img
159
_cleanup_test_img
160
160
161
echo
161
echo
162
diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out
162
diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out
163
index XXXXXXX..XXXXXXX 100644
163
index XXXXXXX..XXXXXXX 100644
164
--- a/tests/qemu-iotests/059.out
164
--- a/tests/qemu-iotests/059.out
165
+++ b/tests/qemu-iotests/059.out
165
+++ b/tests/qemu-iotests/059.out
166
@@ -XXX,XX +XXX,XX @@ wrote 512/512 bytes at offset 10240
166
@@ -XXX,XX +XXX,XX @@ wrote 512/512 bytes at offset 10240
167
167
168
=== Testing monolithicFlat with internally generated JSON file name ===
168
=== Testing monolithicFlat with internally generated JSON file name ===
169
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
169
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
170
-qemu-io: can't open: Cannot use relative extent paths with VMDK descriptor file 'json:{"image": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "driver": "blkdebug", "inject-error.0.event": "read_aio"}'
170
-qemu-io: can't open: Cannot use relative extent paths with VMDK descriptor file 'json:{"image": {"driver": "file", "filename": "TEST_DIR/t.IMGFMT"}, "driver": "blkdebug", "inject-error.0.event": "read_aio"}'
171
+format name: IMGFMT
171
+format name: IMGFMT
172
+cluster size: 0 bytes
172
+cluster size: 0 bytes
173
+vm state offset: 0 bytes
173
+vm state offset: 0 bytes
174
174
175
=== Testing version 3 ===
175
=== Testing version 3 ===
176
image: TEST_DIR/iotest-version3.IMGFMT
176
image: TEST_DIR/iotest-version3.IMGFMT
177
--
177
--
178
2.21.0
178
2.21.0
179
179
180
180
diff view generated by jsdifflib
1
We had a test for a case where relative extent paths did not work, but
1
We had a test for a case where relative extent paths did not work, but
2
unfortunately we just fixed the underlying problem, so it works now.
2
unfortunately we just fixed the underlying problem, so it works now.
3
This patch adds a new test case that still fails.
3
This patch adds a new test case that still fails.
4
4
5
Signed-off-by: Max Reitz <mreitz@redhat.com>
5
Signed-off-by: Max Reitz <mreitz@redhat.com>
6
Reviewed-by: John Snow <jsnow@redhat.com>
6
Reviewed-by: John Snow <jsnow@redhat.com>
7
Message-id: 20190815153638.4600-4-mreitz@redhat.com
7
Message-id: 20190815153638.4600-4-mreitz@redhat.com
8
Reviewed-by: John Snow <jsnow@redhat.com>
8
Reviewed-by: John Snow <jsnow@redhat.com>
9
Signed-off-by: Max Reitz <mreitz@redhat.com>
9
Signed-off-by: Max Reitz <mreitz@redhat.com>
10
---
10
---
11
tests/qemu-iotests/059 | 27 +++++++++++++++++++++++++++
11
tests/qemu-iotests/059 | 27 +++++++++++++++++++++++++++
12
tests/qemu-iotests/059.out | 4 ++++
12
tests/qemu-iotests/059.out | 4 ++++
13
2 files changed, 31 insertions(+)
13
2 files changed, 31 insertions(+)
14
14
15
diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059
15
diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059
16
index XXXXXXX..XXXXXXX 100755
16
index XXXXXXX..XXXXXXX 100755
17
--- a/tests/qemu-iotests/059
17
--- a/tests/qemu-iotests/059
18
+++ b/tests/qemu-iotests/059
18
+++ b/tests/qemu-iotests/059
19
@@ -XXX,XX +XXX,XX @@ $QEMU_IMG convert -f qcow2 -O vmdk -o subformat=streamOptimized "$TEST_IMG.qcow2
19
@@ -XXX,XX +XXX,XX @@ $QEMU_IMG convert -f qcow2 -O vmdk -o subformat=streamOptimized "$TEST_IMG.qcow2
20
20
21
echo
21
echo
22
echo "=== Testing monolithicFlat with internally generated JSON file name ==="
22
echo "=== Testing monolithicFlat with internally generated JSON file name ==="
23
+
23
+
24
+echo '--- blkdebug ---'
24
+echo '--- blkdebug ---'
25
# Should work, because bdrv_dirname() works fine with blkdebug
25
# Should work, because bdrv_dirname() works fine with blkdebug
26
IMGOPTS="subformat=monolithicFlat" _make_test_img 64M
26
IMGOPTS="subformat=monolithicFlat" _make_test_img 64M
27
$QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.image.filename=$TEST_IMG,file.inject-error.0.event=read_aio" \
27
$QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.image.filename=$TEST_IMG,file.inject-error.0.event=read_aio" \
28
@@ -XXX,XX +XXX,XX @@ $QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.image.filename=$TE
28
@@ -XXX,XX +XXX,XX @@ $QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.image.filename=$TE
29
| _filter_testdir | _filter_imgfmt | _filter_img_info
29
| _filter_testdir | _filter_imgfmt | _filter_img_info
30
_cleanup_test_img
30
_cleanup_test_img
31
31
32
+echo '--- quorum ---'
32
+echo '--- quorum ---'
33
+# Should not work, because bdrv_dirname() does not work with quorum
33
+# Should not work, because bdrv_dirname() does not work with quorum
34
+IMGOPTS="subformat=monolithicFlat" _make_test_img 64M
34
+IMGOPTS="subformat=monolithicFlat" _make_test_img 64M
35
+cp "$TEST_IMG" "$TEST_IMG.orig"
35
+cp "$TEST_IMG" "$TEST_IMG.orig"
36
+
36
+
37
+filename="json:{
37
+filename="json:{
38
+ \"driver\": \"$IMGFMT\",
38
+ \"driver\": \"$IMGFMT\",
39
+ \"file\": {
39
+ \"file\": {
40
+ \"driver\": \"quorum\",
40
+ \"driver\": \"quorum\",
41
+ \"children\": [ {
41
+ \"children\": [ {
42
+ \"driver\": \"file\",
42
+ \"driver\": \"file\",
43
+ \"filename\": \"$TEST_IMG\"
43
+ \"filename\": \"$TEST_IMG\"
44
+ }, {
44
+ }, {
45
+ \"driver\": \"file\",
45
+ \"driver\": \"file\",
46
+ \"filename\": \"$TEST_IMG.orig\"
46
+ \"filename\": \"$TEST_IMG.orig\"
47
+ } ],
47
+ } ],
48
+ \"vote-threshold\": 1
48
+ \"vote-threshold\": 1
49
+ } }"
49
+ } }"
50
+
50
+
51
+filename=$(echo "$filename" | tr '\n' ' ' | sed -e 's/\s\+/ /g')
51
+filename=$(echo "$filename" | tr '\n' ' ' | sed -e 's/\s\+/ /g')
52
+$QEMU_IMG info "$filename" 2>&1 \
52
+$QEMU_IMG info "$filename" 2>&1 \
53
+ | sed -e "s/'json:[^']*'/\$QUORUM_FILE/g" \
53
+ | sed -e "s/'json:[^']*'/\$QUORUM_FILE/g" \
54
+ | _filter_testdir | _filter_imgfmt | _filter_img_info
54
+ | _filter_testdir | _filter_imgfmt | _filter_img_info
55
+
55
+
56
+
56
+
57
echo
57
echo
58
echo "=== Testing version 3 ==="
58
echo "=== Testing version 3 ==="
59
_use_sample_img iotest-version3.vmdk.bz2
59
_use_sample_img iotest-version3.vmdk.bz2
60
diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out
60
diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out
61
index XXXXXXX..XXXXXXX 100644
61
index XXXXXXX..XXXXXXX 100644
62
--- a/tests/qemu-iotests/059.out
62
--- a/tests/qemu-iotests/059.out
63
+++ b/tests/qemu-iotests/059.out
63
+++ b/tests/qemu-iotests/059.out
64
@@ -XXX,XX +XXX,XX @@ wrote 512/512 bytes at offset 10240
64
@@ -XXX,XX +XXX,XX @@ wrote 512/512 bytes at offset 10240
65
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
65
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
66
66
67
=== Testing monolithicFlat with internally generated JSON file name ===
67
=== Testing monolithicFlat with internally generated JSON file name ===
68
+--- blkdebug ---
68
+--- blkdebug ---
69
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
69
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
70
format name: IMGFMT
70
format name: IMGFMT
71
cluster size: 0 bytes
71
cluster size: 0 bytes
72
vm state offset: 0 bytes
72
vm state offset: 0 bytes
73
+--- quorum ---
73
+--- quorum ---
74
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
74
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
75
+qemu-img: Could not open $QUORUM_FILE: Cannot use relative paths with VMDK descriptor file $QUORUM_FILE: Cannot generate a base directory for quorum nodes
75
+qemu-img: Could not open $QUORUM_FILE: Cannot use relative paths with VMDK descriptor file $QUORUM_FILE: Cannot generate a base directory for quorum nodes
76
76
77
=== Testing version 3 ===
77
=== Testing version 3 ===
78
image: TEST_DIR/iotest-version3.IMGFMT
78
image: TEST_DIR/iotest-version3.IMGFMT
79
--
79
--
80
2.21.0
80
2.21.0
81
81
82
82
diff view generated by jsdifflib
1
Compressed writes generally have to write full clusters, not just in
1
Compressed writes generally have to write full clusters, not just in
2
theory but also in practice when it comes to vmdk's streamOptimized
2
theory but also in practice when it comes to vmdk's streamOptimized
3
subformat. It currently is just silently broken for writes with
3
subformat. It currently is just silently broken for writes with
4
non-zero in-cluster offsets:
4
non-zero in-cluster offsets:
5
5
6
$ qemu-img create -f vmdk -o subformat=streamOptimized foo.vmdk 1M
6
$ qemu-img create -f vmdk -o subformat=streamOptimized foo.vmdk 1M
7
$ qemu-io -c 'write 4k 4k' -c 'read 4k 4k' foo.vmdk
7
$ qemu-io -c 'write 4k 4k' -c 'read 4k 4k' foo.vmdk
8
wrote 4096/4096 bytes at offset 4096
8
wrote 4096/4096 bytes at offset 4096
9
4 KiB, 1 ops; 00.01 sec (443.724 KiB/sec and 110.9309 ops/sec)
9
4 KiB, 1 ops; 00.01 sec (443.724 KiB/sec and 110.9309 ops/sec)
10
read failed: Invalid argument
10
read failed: Invalid argument
11
11
12
(The technical reason is that vmdk_write_extent() just writes the
12
(The technical reason is that vmdk_write_extent() just writes the
13
incomplete compressed data actually to offset 4k. When reading the
13
incomplete compressed data actually to offset 4k. When reading the
14
data, vmdk_read_extent() looks at offset 0 and finds the compressed data
14
data, vmdk_read_extent() looks at offset 0 and finds the compressed data
15
size to be 0, because that is what it reads from there. This yields an
15
size to be 0, because that is what it reads from there. This yields an
16
error.)
16
error.)
17
17
18
For incomplete writes with zero in-cluster offsets, the error path when
18
For incomplete writes with zero in-cluster offsets, the error path when
19
reading the rest of the cluster is a bit different, but the result is
19
reading the rest of the cluster is a bit different, but the result is
20
the same:
20
the same:
21
21
22
$ qemu-img create -f vmdk -o subformat=streamOptimized foo.vmdk 1M
22
$ qemu-img create -f vmdk -o subformat=streamOptimized foo.vmdk 1M
23
$ qemu-io -c 'write 0k 4k' -c 'read 4k 4k' foo.vmdk
23
$ qemu-io -c 'write 0k 4k' -c 'read 4k 4k' foo.vmdk
24
wrote 4096/4096 bytes at offset 0
24
wrote 4096/4096 bytes at offset 0
25
4 KiB, 1 ops; 00.01 sec (362.641 KiB/sec and 90.6603 ops/sec)
25
4 KiB, 1 ops; 00.01 sec (362.641 KiB/sec and 90.6603 ops/sec)
26
read failed: Invalid argument
26
read failed: Invalid argument
27
27
28
(Here, vmdk_read_extent() finds the data and then sees that the
28
(Here, vmdk_read_extent() finds the data and then sees that the
29
uncompressed data is short.)
29
uncompressed data is short.)
30
30
31
It is better to reject invalid writes than to make the user believe they
31
It is better to reject invalid writes than to make the user believe they
32
might have succeeded and then fail when trying to read it back.
32
might have succeeded and then fail when trying to read it back.
33
33
34
Signed-off-by: Max Reitz <mreitz@redhat.com>
34
Signed-off-by: Max Reitz <mreitz@redhat.com>
35
Reviewed-by: John Snow <jsnow@redhat.com>
35
Reviewed-by: John Snow <jsnow@redhat.com>
36
Message-id: 20190815153638.4600-5-mreitz@redhat.com
36
Message-id: 20190815153638.4600-5-mreitz@redhat.com
37
Reviewed-by: John Snow <jsnow@redhat.com>
37
Reviewed-by: John Snow <jsnow@redhat.com>
38
Signed-off-by: Max Reitz <mreitz@redhat.com>
38
Signed-off-by: Max Reitz <mreitz@redhat.com>
39
---
39
---
40
block/vmdk.c | 10 ++++++++++
40
block/vmdk.c | 10 ++++++++++
41
1 file changed, 10 insertions(+)
41
1 file changed, 10 insertions(+)
42
42
43
diff --git a/block/vmdk.c b/block/vmdk.c
43
diff --git a/block/vmdk.c b/block/vmdk.c
44
index XXXXXXX..XXXXXXX 100644
44
index XXXXXXX..XXXXXXX 100644
45
--- a/block/vmdk.c
45
--- a/block/vmdk.c
46
+++ b/block/vmdk.c
46
+++ b/block/vmdk.c
47
@@ -XXX,XX +XXX,XX @@ static int vmdk_write_extent(VmdkExtent *extent, int64_t cluster_offset,
47
@@ -XXX,XX +XXX,XX @@ static int vmdk_write_extent(VmdkExtent *extent, int64_t cluster_offset,
48
if (extent->compressed) {
48
if (extent->compressed) {
49
void *compressed_data;
49
void *compressed_data;
50
50
51
+ /* Only whole clusters */
51
+ /* Only whole clusters */
52
+ if (offset_in_cluster ||
52
+ if (offset_in_cluster ||
53
+ n_bytes > (extent->cluster_sectors * SECTOR_SIZE) ||
53
+ n_bytes > (extent->cluster_sectors * SECTOR_SIZE) ||
54
+ (n_bytes < (extent->cluster_sectors * SECTOR_SIZE) &&
54
+ (n_bytes < (extent->cluster_sectors * SECTOR_SIZE) &&
55
+ offset + n_bytes != extent->end_sector * SECTOR_SIZE))
55
+ offset + n_bytes != extent->end_sector * SECTOR_SIZE))
56
+ {
56
+ {
57
+ ret = -EINVAL;
57
+ ret = -EINVAL;
58
+ goto out;
58
+ goto out;
59
+ }
59
+ }
60
+
60
+
61
if (!extent->has_marker) {
61
if (!extent->has_marker) {
62
ret = -EINVAL;
62
ret = -EINVAL;
63
goto out;
63
goto out;
64
--
64
--
65
2.21.0
65
2.21.0
66
66
67
67
diff view generated by jsdifflib
1
streamOptimized does not support writes that do not span exactly one
1
streamOptimized does not support writes that do not span exactly one
2
cluster. Furthermore, it cannot rewrite already allocated clusters.
2
cluster. Furthermore, it cannot rewrite already allocated clusters.
3
As such, many iotests do not work with it. Disable them.
3
As such, many iotests do not work with it. Disable them.
4
4
5
Signed-off-by: Max Reitz <mreitz@redhat.com>
5
Signed-off-by: Max Reitz <mreitz@redhat.com>
6
Message-id: 20190815153638.4600-6-mreitz@redhat.com
6
Message-id: 20190815153638.4600-6-mreitz@redhat.com
7
Reviewed-by: John Snow <jsnow@redhat.com>
7
Reviewed-by: John Snow <jsnow@redhat.com>
8
Signed-off-by: Max Reitz <mreitz@redhat.com>
8
Signed-off-by: Max Reitz <mreitz@redhat.com>
9
---
9
---
10
tests/qemu-iotests/002 | 1 +
10
tests/qemu-iotests/002 | 1 +
11
tests/qemu-iotests/003 | 1 +
11
tests/qemu-iotests/003 | 1 +
12
tests/qemu-iotests/005 | 3 ++-
12
tests/qemu-iotests/005 | 3 ++-
13
tests/qemu-iotests/009 | 1 +
13
tests/qemu-iotests/009 | 1 +
14
tests/qemu-iotests/010 | 1 +
14
tests/qemu-iotests/010 | 1 +
15
tests/qemu-iotests/011 | 1 +
15
tests/qemu-iotests/011 | 1 +
16
tests/qemu-iotests/017 | 3 ++-
16
tests/qemu-iotests/017 | 3 ++-
17
tests/qemu-iotests/018 | 3 ++-
17
tests/qemu-iotests/018 | 3 ++-
18
tests/qemu-iotests/019 | 3 ++-
18
tests/qemu-iotests/019 | 3 ++-
19
tests/qemu-iotests/020 | 3 ++-
19
tests/qemu-iotests/020 | 3 ++-
20
tests/qemu-iotests/027 | 1 +
20
tests/qemu-iotests/027 | 1 +
21
tests/qemu-iotests/032 | 1 +
21
tests/qemu-iotests/032 | 1 +
22
tests/qemu-iotests/033 | 1 +
22
tests/qemu-iotests/033 | 1 +
23
tests/qemu-iotests/034 | 3 ++-
23
tests/qemu-iotests/034 | 3 ++-
24
tests/qemu-iotests/037 | 3 ++-
24
tests/qemu-iotests/037 | 3 ++-
25
tests/qemu-iotests/063 | 3 ++-
25
tests/qemu-iotests/063 | 3 ++-
26
tests/qemu-iotests/072 | 1 +
26
tests/qemu-iotests/072 | 1 +
27
tests/qemu-iotests/105 | 3 ++-
27
tests/qemu-iotests/105 | 3 ++-
28
tests/qemu-iotests/197 | 1 +
28
tests/qemu-iotests/197 | 1 +
29
tests/qemu-iotests/215 | 1 +
29
tests/qemu-iotests/215 | 1 +
30
tests/qemu-iotests/251 | 1 +
30
tests/qemu-iotests/251 | 1 +
31
21 files changed, 30 insertions(+), 9 deletions(-)
31
21 files changed, 30 insertions(+), 9 deletions(-)
32
32
33
diff --git a/tests/qemu-iotests/002 b/tests/qemu-iotests/002
33
diff --git a/tests/qemu-iotests/002 b/tests/qemu-iotests/002
34
index XXXXXXX..XXXXXXX 100755
34
index XXXXXXX..XXXXXXX 100755
35
--- a/tests/qemu-iotests/002
35
--- a/tests/qemu-iotests/002
36
+++ b/tests/qemu-iotests/002
36
+++ b/tests/qemu-iotests/002
37
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
37
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
38
38
39
_supported_fmt generic
39
_supported_fmt generic
40
_supported_proto generic
40
_supported_proto generic
41
+_unsupported_imgopts "subformat=streamOptimized"
41
+_unsupported_imgopts "subformat=streamOptimized"
42
42
43
43
44
size=128M
44
size=128M
45
diff --git a/tests/qemu-iotests/003 b/tests/qemu-iotests/003
45
diff --git a/tests/qemu-iotests/003 b/tests/qemu-iotests/003
46
index XXXXXXX..XXXXXXX 100755
46
index XXXXXXX..XXXXXXX 100755
47
--- a/tests/qemu-iotests/003
47
--- a/tests/qemu-iotests/003
48
+++ b/tests/qemu-iotests/003
48
+++ b/tests/qemu-iotests/003
49
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
49
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
50
50
51
_supported_fmt generic
51
_supported_fmt generic
52
_supported_proto generic
52
_supported_proto generic
53
+_unsupported_imgopts "subformat=streamOptimized"
53
+_unsupported_imgopts "subformat=streamOptimized"
54
54
55
size=128M
55
size=128M
56
offset=67M
56
offset=67M
57
diff --git a/tests/qemu-iotests/005 b/tests/qemu-iotests/005
57
diff --git a/tests/qemu-iotests/005 b/tests/qemu-iotests/005
58
index XXXXXXX..XXXXXXX 100755
58
index XXXXXXX..XXXXXXX 100755
59
--- a/tests/qemu-iotests/005
59
--- a/tests/qemu-iotests/005
60
+++ b/tests/qemu-iotests/005
60
+++ b/tests/qemu-iotests/005
61
@@ -XXX,XX +XXX,XX @@ _supported_fmt generic
61
@@ -XXX,XX +XXX,XX @@ _supported_fmt generic
62
_supported_proto generic
62
_supported_proto generic
63
_supported_os Linux
63
_supported_os Linux
64
_unsupported_imgopts "subformat=twoGbMaxExtentFlat" \
64
_unsupported_imgopts "subformat=twoGbMaxExtentFlat" \
65
- "subformat=twoGbMaxExtentSparse"
65
- "subformat=twoGbMaxExtentSparse"
66
+ "subformat=twoGbMaxExtentSparse" \
66
+ "subformat=twoGbMaxExtentSparse" \
67
+ "subformat=streamOptimized"
67
+ "subformat=streamOptimized"
68
68
69
# vpc is limited to 127GB, so we can't test it here
69
# vpc is limited to 127GB, so we can't test it here
70
if [ "$IMGFMT" = "vpc" ]; then
70
if [ "$IMGFMT" = "vpc" ]; then
71
diff --git a/tests/qemu-iotests/009 b/tests/qemu-iotests/009
71
diff --git a/tests/qemu-iotests/009 b/tests/qemu-iotests/009
72
index XXXXXXX..XXXXXXX 100755
72
index XXXXXXX..XXXXXXX 100755
73
--- a/tests/qemu-iotests/009
73
--- a/tests/qemu-iotests/009
74
+++ b/tests/qemu-iotests/009
74
+++ b/tests/qemu-iotests/009
75
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
75
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
76
76
77
_supported_fmt generic
77
_supported_fmt generic
78
_supported_proto generic
78
_supported_proto generic
79
+_unsupported_imgopts "subformat=streamOptimized"
79
+_unsupported_imgopts "subformat=streamOptimized"
80
80
81
81
82
size=6G
82
size=6G
83
diff --git a/tests/qemu-iotests/010 b/tests/qemu-iotests/010
83
diff --git a/tests/qemu-iotests/010 b/tests/qemu-iotests/010
84
index XXXXXXX..XXXXXXX 100755
84
index XXXXXXX..XXXXXXX 100755
85
--- a/tests/qemu-iotests/010
85
--- a/tests/qemu-iotests/010
86
+++ b/tests/qemu-iotests/010
86
+++ b/tests/qemu-iotests/010
87
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
87
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
88
88
89
_supported_fmt generic
89
_supported_fmt generic
90
_supported_proto generic
90
_supported_proto generic
91
+_unsupported_imgopts "subformat=streamOptimized"
91
+_unsupported_imgopts "subformat=streamOptimized"
92
92
93
93
94
size=6G
94
size=6G
95
diff --git a/tests/qemu-iotests/011 b/tests/qemu-iotests/011
95
diff --git a/tests/qemu-iotests/011 b/tests/qemu-iotests/011
96
index XXXXXXX..XXXXXXX 100755
96
index XXXXXXX..XXXXXXX 100755
97
--- a/tests/qemu-iotests/011
97
--- a/tests/qemu-iotests/011
98
+++ b/tests/qemu-iotests/011
98
+++ b/tests/qemu-iotests/011
99
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
99
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
100
100
101
_supported_fmt generic
101
_supported_fmt generic
102
_supported_proto generic
102
_supported_proto generic
103
+_unsupported_imgopts "subformat=streamOptimized"
103
+_unsupported_imgopts "subformat=streamOptimized"
104
104
105
105
106
size=6G
106
size=6G
107
diff --git a/tests/qemu-iotests/017 b/tests/qemu-iotests/017
107
diff --git a/tests/qemu-iotests/017 b/tests/qemu-iotests/017
108
index XXXXXXX..XXXXXXX 100755
108
index XXXXXXX..XXXXXXX 100755
109
--- a/tests/qemu-iotests/017
109
--- a/tests/qemu-iotests/017
110
+++ b/tests/qemu-iotests/017
110
+++ b/tests/qemu-iotests/017
111
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
111
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
112
_supported_fmt qcow qcow2 vmdk qed
112
_supported_fmt qcow qcow2 vmdk qed
113
_supported_proto generic
113
_supported_proto generic
114
_unsupported_proto vxhs
114
_unsupported_proto vxhs
115
-_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat"
115
-_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat"
116
+_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" \
116
+_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" \
117
+ "subformat=streamOptimized"
117
+ "subformat=streamOptimized"
118
118
119
TEST_OFFSETS="0 4294967296"
119
TEST_OFFSETS="0 4294967296"
120
120
121
diff --git a/tests/qemu-iotests/018 b/tests/qemu-iotests/018
121
diff --git a/tests/qemu-iotests/018 b/tests/qemu-iotests/018
122
index XXXXXXX..XXXXXXX 100755
122
index XXXXXXX..XXXXXXX 100755
123
--- a/tests/qemu-iotests/018
123
--- a/tests/qemu-iotests/018
124
+++ b/tests/qemu-iotests/018
124
+++ b/tests/qemu-iotests/018
125
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
125
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
126
_supported_fmt qcow qcow2 vmdk qed
126
_supported_fmt qcow qcow2 vmdk qed
127
_supported_proto file
127
_supported_proto file
128
_supported_os Linux
128
_supported_os Linux
129
-_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat"
129
-_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat"
130
+_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" \
130
+_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" \
131
+ "streamOptimized"
131
+ "streamOptimized"
132
132
133
TEST_OFFSETS="0 4294967296"
133
TEST_OFFSETS="0 4294967296"
134
134
135
diff --git a/tests/qemu-iotests/019 b/tests/qemu-iotests/019
135
diff --git a/tests/qemu-iotests/019 b/tests/qemu-iotests/019
136
index XXXXXXX..XXXXXXX 100755
136
index XXXXXXX..XXXXXXX 100755
137
--- a/tests/qemu-iotests/019
137
--- a/tests/qemu-iotests/019
138
+++ b/tests/qemu-iotests/019
138
+++ b/tests/qemu-iotests/019
139
@@ -XXX,XX +XXX,XX @@ _supported_proto file
139
@@ -XXX,XX +XXX,XX @@ _supported_proto file
140
_supported_os Linux
140
_supported_os Linux
141
_unsupported_imgopts "subformat=monolithicFlat" \
141
_unsupported_imgopts "subformat=monolithicFlat" \
142
"subformat=twoGbMaxExtentFlat" \
142
"subformat=twoGbMaxExtentFlat" \
143
- "subformat=twoGbMaxExtentSparse"
143
- "subformat=twoGbMaxExtentSparse"
144
+ "subformat=twoGbMaxExtentSparse" \
144
+ "subformat=twoGbMaxExtentSparse" \
145
+ "subformat=streamOptimized"
145
+ "subformat=streamOptimized"
146
146
147
TEST_OFFSETS="0 4294967296"
147
TEST_OFFSETS="0 4294967296"
148
CLUSTER_SIZE=65536
148
CLUSTER_SIZE=65536
149
diff --git a/tests/qemu-iotests/020 b/tests/qemu-iotests/020
149
diff --git a/tests/qemu-iotests/020 b/tests/qemu-iotests/020
150
index XXXXXXX..XXXXXXX 100755
150
index XXXXXXX..XXXXXXX 100755
151
--- a/tests/qemu-iotests/020
151
--- a/tests/qemu-iotests/020
152
+++ b/tests/qemu-iotests/020
152
+++ b/tests/qemu-iotests/020
153
@@ -XXX,XX +XXX,XX @@ _supported_fmt qcow qcow2 vmdk qed
153
@@ -XXX,XX +XXX,XX @@ _supported_fmt qcow qcow2 vmdk qed
154
_supported_proto file
154
_supported_proto file
155
_unsupported_imgopts "subformat=monolithicFlat" \
155
_unsupported_imgopts "subformat=monolithicFlat" \
156
"subformat=twoGbMaxExtentFlat" \
156
"subformat=twoGbMaxExtentFlat" \
157
- "subformat=twoGbMaxExtentSparse"
157
- "subformat=twoGbMaxExtentSparse"
158
+ "subformat=twoGbMaxExtentSparse" \
158
+ "subformat=twoGbMaxExtentSparse" \
159
+ "subformat=streamOptimized"
159
+ "subformat=streamOptimized"
160
160
161
TEST_OFFSETS="0 4294967296"
161
TEST_OFFSETS="0 4294967296"
162
162
163
diff --git a/tests/qemu-iotests/027 b/tests/qemu-iotests/027
163
diff --git a/tests/qemu-iotests/027 b/tests/qemu-iotests/027
164
index XXXXXXX..XXXXXXX 100755
164
index XXXXXXX..XXXXXXX 100755
165
--- a/tests/qemu-iotests/027
165
--- a/tests/qemu-iotests/027
166
+++ b/tests/qemu-iotests/027
166
+++ b/tests/qemu-iotests/027
167
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
167
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
168
168
169
_supported_fmt vmdk qcow qcow2 qed
169
_supported_fmt vmdk qcow qcow2 qed
170
_supported_proto generic
170
_supported_proto generic
171
+_unsupported_imgopts "subformat=streamOptimized"
171
+_unsupported_imgopts "subformat=streamOptimized"
172
172
173
173
174
size=128M
174
size=128M
175
diff --git a/tests/qemu-iotests/032 b/tests/qemu-iotests/032
175
diff --git a/tests/qemu-iotests/032 b/tests/qemu-iotests/032
176
index XXXXXXX..XXXXXXX 100755
176
index XXXXXXX..XXXXXXX 100755
177
--- a/tests/qemu-iotests/032
177
--- a/tests/qemu-iotests/032
178
+++ b/tests/qemu-iotests/032
178
+++ b/tests/qemu-iotests/032
179
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
179
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
180
# This works for any image format (though unlikely to segfault for raw)
180
# This works for any image format (though unlikely to segfault for raw)
181
_supported_fmt generic
181
_supported_fmt generic
182
_supported_proto generic
182
_supported_proto generic
183
+_unsupported_imgopts "subformat=streamOptimized"
183
+_unsupported_imgopts "subformat=streamOptimized"
184
184
185
echo
185
echo
186
echo === Prepare image ===
186
echo === Prepare image ===
187
diff --git a/tests/qemu-iotests/033 b/tests/qemu-iotests/033
187
diff --git a/tests/qemu-iotests/033 b/tests/qemu-iotests/033
188
index XXXXXXX..XXXXXXX 100755
188
index XXXXXXX..XXXXXXX 100755
189
--- a/tests/qemu-iotests/033
189
--- a/tests/qemu-iotests/033
190
+++ b/tests/qemu-iotests/033
190
+++ b/tests/qemu-iotests/033
191
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
191
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
192
192
193
_supported_fmt generic
193
_supported_fmt generic
194
_supported_proto generic
194
_supported_proto generic
195
+_unsupported_imgopts "subformat=streamOptimized"
195
+_unsupported_imgopts "subformat=streamOptimized"
196
196
197
197
198
size=128M
198
size=128M
199
diff --git a/tests/qemu-iotests/034 b/tests/qemu-iotests/034
199
diff --git a/tests/qemu-iotests/034 b/tests/qemu-iotests/034
200
index XXXXXXX..XXXXXXX 100755
200
index XXXXXXX..XXXXXXX 100755
201
--- a/tests/qemu-iotests/034
201
--- a/tests/qemu-iotests/034
202
+++ b/tests/qemu-iotests/034
202
+++ b/tests/qemu-iotests/034
203
@@ -XXX,XX +XXX,XX @@ _supported_proto file
203
@@ -XXX,XX +XXX,XX @@ _supported_proto file
204
_supported_os Linux
204
_supported_os Linux
205
_unsupported_imgopts "subformat=monolithicFlat" \
205
_unsupported_imgopts "subformat=monolithicFlat" \
206
"subformat=twoGbMaxExtentFlat" \
206
"subformat=twoGbMaxExtentFlat" \
207
- "subformat=twoGbMaxExtentSparse"
207
- "subformat=twoGbMaxExtentSparse"
208
+ "subformat=twoGbMaxExtentSparse" \
208
+ "subformat=twoGbMaxExtentSparse" \
209
+ "subformat=streamOptimized"
209
+ "subformat=streamOptimized"
210
210
211
CLUSTER_SIZE=4k
211
CLUSTER_SIZE=4k
212
size=128M
212
size=128M
213
diff --git a/tests/qemu-iotests/037 b/tests/qemu-iotests/037
213
diff --git a/tests/qemu-iotests/037 b/tests/qemu-iotests/037
214
index XXXXXXX..XXXXXXX 100755
214
index XXXXXXX..XXXXXXX 100755
215
--- a/tests/qemu-iotests/037
215
--- a/tests/qemu-iotests/037
216
+++ b/tests/qemu-iotests/037
216
+++ b/tests/qemu-iotests/037
217
@@ -XXX,XX +XXX,XX @@ _supported_fmt qcow qcow2 vmdk qed
217
@@ -XXX,XX +XXX,XX @@ _supported_fmt qcow qcow2 vmdk qed
218
_supported_proto file
218
_supported_proto file
219
_unsupported_imgopts "subformat=monolithicFlat" \
219
_unsupported_imgopts "subformat=monolithicFlat" \
220
"subformat=twoGbMaxExtentFlat" \
220
"subformat=twoGbMaxExtentFlat" \
221
- "subformat=twoGbMaxExtentSparse"
221
- "subformat=twoGbMaxExtentSparse"
222
+ "subformat=twoGbMaxExtentSparse" \
222
+ "subformat=twoGbMaxExtentSparse" \
223
+ "subformat=streamOptimized"
223
+ "subformat=streamOptimized"
224
224
225
CLUSTER_SIZE=4k
225
CLUSTER_SIZE=4k
226
size=128M
226
size=128M
227
diff --git a/tests/qemu-iotests/063 b/tests/qemu-iotests/063
227
diff --git a/tests/qemu-iotests/063 b/tests/qemu-iotests/063
228
index XXXXXXX..XXXXXXX 100755
228
index XXXXXXX..XXXXXXX 100755
229
--- a/tests/qemu-iotests/063
229
--- a/tests/qemu-iotests/063
230
+++ b/tests/qemu-iotests/063
230
+++ b/tests/qemu-iotests/063
231
@@ -XXX,XX +XXX,XX @@ _supported_fmt qcow qcow2 vmdk qed raw
231
@@ -XXX,XX +XXX,XX @@ _supported_fmt qcow qcow2 vmdk qed raw
232
_supported_proto file
232
_supported_proto file
233
_unsupported_imgopts "subformat=monolithicFlat" \
233
_unsupported_imgopts "subformat=monolithicFlat" \
234
"subformat=twoGbMaxExtentFlat" \
234
"subformat=twoGbMaxExtentFlat" \
235
- "subformat=twoGbMaxExtentSparse"
235
- "subformat=twoGbMaxExtentSparse"
236
+ "subformat=twoGbMaxExtentSparse" \
236
+ "subformat=twoGbMaxExtentSparse" \
237
+ "subformat=streamOptimized"
237
+ "subformat=streamOptimized"
238
238
239
_make_test_img 4M
239
_make_test_img 4M
240
240
241
diff --git a/tests/qemu-iotests/072 b/tests/qemu-iotests/072
241
diff --git a/tests/qemu-iotests/072 b/tests/qemu-iotests/072
242
index XXXXXXX..XXXXXXX 100755
242
index XXXXXXX..XXXXXXX 100755
243
--- a/tests/qemu-iotests/072
243
--- a/tests/qemu-iotests/072
244
+++ b/tests/qemu-iotests/072
244
+++ b/tests/qemu-iotests/072
245
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
245
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
246
246
247
_supported_fmt vpc vmdk vhdx vdi qed qcow2 qcow
247
_supported_fmt vpc vmdk vhdx vdi qed qcow2 qcow
248
_supported_proto file
248
_supported_proto file
249
+_unsupported_imgopts "subformat=streamOptimized"
249
+_unsupported_imgopts "subformat=streamOptimized"
250
250
251
IMG_SIZE=64M
251
IMG_SIZE=64M
252
252
253
diff --git a/tests/qemu-iotests/105 b/tests/qemu-iotests/105
253
diff --git a/tests/qemu-iotests/105 b/tests/qemu-iotests/105
254
index XXXXXXX..XXXXXXX 100755
254
index XXXXXXX..XXXXXXX 100755
255
--- a/tests/qemu-iotests/105
255
--- a/tests/qemu-iotests/105
256
+++ b/tests/qemu-iotests/105
256
+++ b/tests/qemu-iotests/105
257
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
257
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
258
_supported_fmt qcow2 vmdk vhdx qed
258
_supported_fmt qcow2 vmdk vhdx qed
259
_supported_proto generic
259
_supported_proto generic
260
_unsupported_imgopts "subformat=twoGbMaxExtentFlat" \
260
_unsupported_imgopts "subformat=twoGbMaxExtentFlat" \
261
- "subformat=twoGbMaxExtentSparse"
261
- "subformat=twoGbMaxExtentSparse"
262
+ "subformat=twoGbMaxExtentSparse" \
262
+ "subformat=twoGbMaxExtentSparse" \
263
+ "subformat=streamOptimized"
263
+ "subformat=streamOptimized"
264
264
265
echo
265
echo
266
echo "creating large image"
266
echo "creating large image"
267
diff --git a/tests/qemu-iotests/197 b/tests/qemu-iotests/197
267
diff --git a/tests/qemu-iotests/197 b/tests/qemu-iotests/197
268
index XXXXXXX..XXXXXXX 100755
268
index XXXXXXX..XXXXXXX 100755
269
--- a/tests/qemu-iotests/197
269
--- a/tests/qemu-iotests/197
270
+++ b/tests/qemu-iotests/197
270
+++ b/tests/qemu-iotests/197
271
@@ -XXX,XX +XXX,XX @@ _supported_fmt generic
271
@@ -XXX,XX +XXX,XX @@ _supported_fmt generic
272
_supported_proto generic
272
_supported_proto generic
273
# LUKS support may be possible, but it complicates things.
273
# LUKS support may be possible, but it complicates things.
274
_unsupported_fmt luks
274
_unsupported_fmt luks
275
+_unsupported_imgopts "subformat=streamOptimized"
275
+_unsupported_imgopts "subformat=streamOptimized"
276
276
277
echo
277
echo
278
echo '=== Copy-on-read ==='
278
echo '=== Copy-on-read ==='
279
diff --git a/tests/qemu-iotests/215 b/tests/qemu-iotests/215
279
diff --git a/tests/qemu-iotests/215 b/tests/qemu-iotests/215
280
index XXXXXXX..XXXXXXX 100755
280
index XXXXXXX..XXXXXXX 100755
281
--- a/tests/qemu-iotests/215
281
--- a/tests/qemu-iotests/215
282
+++ b/tests/qemu-iotests/215
282
+++ b/tests/qemu-iotests/215
283
@@ -XXX,XX +XXX,XX @@ _supported_fmt generic
283
@@ -XXX,XX +XXX,XX @@ _supported_fmt generic
284
_supported_proto generic
284
_supported_proto generic
285
# LUKS support may be possible, but it complicates things.
285
# LUKS support may be possible, but it complicates things.
286
_unsupported_fmt luks
286
_unsupported_fmt luks
287
+_unsupported_imgopts "subformat=streamOptimized"
287
+_unsupported_imgopts "subformat=streamOptimized"
288
288
289
echo
289
echo
290
echo '=== Copy-on-read ==='
290
echo '=== Copy-on-read ==='
291
diff --git a/tests/qemu-iotests/251 b/tests/qemu-iotests/251
291
diff --git a/tests/qemu-iotests/251 b/tests/qemu-iotests/251
292
index XXXXXXX..XXXXXXX 100755
292
index XXXXXXX..XXXXXXX 100755
293
--- a/tests/qemu-iotests/251
293
--- a/tests/qemu-iotests/251
294
+++ b/tests/qemu-iotests/251
294
+++ b/tests/qemu-iotests/251
295
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
295
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
296
_supported_fmt generic
296
_supported_fmt generic
297
_supported_proto file
297
_supported_proto file
298
_supported_os Linux
298
_supported_os Linux
299
+_unsupported_imgopts "subformat=streamOptimized"
299
+_unsupported_imgopts "subformat=streamOptimized"
300
300
301
if [ "$IMGOPTSSYNTAX" = "true" ]; then
301
if [ "$IMGOPTSSYNTAX" = "true" ]; then
302
# We use json:{} filenames here, so we cannot work with additional options.
302
# We use json:{} filenames here, so we cannot work with additional options.
303
--
303
--
304
2.21.0
304
2.21.0
305
305
306
306
diff view generated by jsdifflib
1
The error message for the test case where we have a quorum node for
1
The error message for the test case where we have a quorum node for
2
which no directory name can be generated is different: For
2
which no directory name can be generated is different: For
3
twoGbMaxExtentSparse, it complains that it cannot open the extent file.
3
twoGbMaxExtentSparse, it complains that it cannot open the extent file.
4
For other (sub)formats, it just notes that it cannot determine the
4
For other (sub)formats, it just notes that it cannot determine the
5
backing file path. Both are fine, but just disable twoGbMaxExtentSparse
5
backing file path. Both are fine, but just disable twoGbMaxExtentSparse
6
for simplicity's sake.
6
for simplicity's sake.
7
7
8
Signed-off-by: Max Reitz <mreitz@redhat.com>
8
Signed-off-by: Max Reitz <mreitz@redhat.com>
9
Reviewed-by: John Snow <jsnow@redhat.com>
9
Reviewed-by: John Snow <jsnow@redhat.com>
10
Message-id: 20190815153638.4600-7-mreitz@redhat.com
10
Message-id: 20190815153638.4600-7-mreitz@redhat.com
11
Reviewed-by: John Snow <jsnow@redhat.com>
11
Reviewed-by: John Snow <jsnow@redhat.com>
12
Signed-off-by: Max Reitz <mreitz@redhat.com>
12
Signed-off-by: Max Reitz <mreitz@redhat.com>
13
---
13
---
14
tests/qemu-iotests/110 | 3 ++-
14
tests/qemu-iotests/110 | 3 ++-
15
1 file changed, 2 insertions(+), 1 deletion(-)
15
1 file changed, 2 insertions(+), 1 deletion(-)
16
16
17
diff --git a/tests/qemu-iotests/110 b/tests/qemu-iotests/110
17
diff --git a/tests/qemu-iotests/110 b/tests/qemu-iotests/110
18
index XXXXXXX..XXXXXXX 100755
18
index XXXXXXX..XXXXXXX 100755
19
--- a/tests/qemu-iotests/110
19
--- a/tests/qemu-iotests/110
20
+++ b/tests/qemu-iotests/110
20
+++ b/tests/qemu-iotests/110
21
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
21
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
22
# Any format supporting backing files
22
# Any format supporting backing files
23
_supported_fmt qed qcow qcow2 vmdk
23
_supported_fmt qed qcow qcow2 vmdk
24
_supported_proto file
24
_supported_proto file
25
-_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat"
25
-_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat"
26
+_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" \
26
+_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" \
27
+ "subformat=twoGbMaxExtentSparse"
27
+ "subformat=twoGbMaxExtentSparse"
28
28
29
TEST_IMG_REL=$(basename "$TEST_IMG")
29
TEST_IMG_REL=$(basename "$TEST_IMG")
30
30
31
--
31
--
32
2.21.0
32
2.21.0
33
33
34
34
diff view generated by jsdifflib
1
iotest 126 requires backing file support, which flat vmdks cannot offer.
1
iotest 126 requires backing file support, which flat vmdks cannot offer.
2
Skip this test for such subformats.
2
Skip this test for such subformats.
3
3
4
Signed-off-by: Max Reitz <mreitz@redhat.com>
4
Signed-off-by: Max Reitz <mreitz@redhat.com>
5
Message-id: 20190815153638.4600-8-mreitz@redhat.com
5
Message-id: 20190815153638.4600-8-mreitz@redhat.com
6
Reviewed-by: John Snow <jsnow@redhat.com>
6
Reviewed-by: John Snow <jsnow@redhat.com>
7
Signed-off-by: Max Reitz <mreitz@redhat.com>
7
Signed-off-by: Max Reitz <mreitz@redhat.com>
8
---
8
---
9
tests/qemu-iotests/126 | 2 ++
9
tests/qemu-iotests/126 | 2 ++
10
1 file changed, 2 insertions(+)
10
1 file changed, 2 insertions(+)
11
11
12
diff --git a/tests/qemu-iotests/126 b/tests/qemu-iotests/126
12
diff --git a/tests/qemu-iotests/126 b/tests/qemu-iotests/126
13
index XXXXXXX..XXXXXXX 100755
13
index XXXXXXX..XXXXXXX 100755
14
--- a/tests/qemu-iotests/126
14
--- a/tests/qemu-iotests/126
15
+++ b/tests/qemu-iotests/126
15
+++ b/tests/qemu-iotests/126
16
@@ -XXX,XX +XXX,XX @@ status=1    # failure is the default!
16
@@ -XXX,XX +XXX,XX @@ status=1    # failure is the default!
17
17
18
# Needs backing file support
18
# Needs backing file support
19
_supported_fmt qcow qcow2 qed vmdk
19
_supported_fmt qcow qcow2 qed vmdk
20
+_unsupported_imgopts "subformat=monolithicFlat" \
20
+_unsupported_imgopts "subformat=monolithicFlat" \
21
+ "subformat=twoGbMaxExtentFlat"
21
+ "subformat=twoGbMaxExtentFlat"
22
# This is the default protocol (and we want to test the difference between
22
# This is the default protocol (and we want to test the difference between
23
# colons which separate a protocol prefix from the rest and colons which are
23
# colons which separate a protocol prefix from the rest and colons which are
24
# just part of the filename, so we cannot test protocols which require a prefix)
24
# just part of the filename, so we cannot test protocols which require a prefix)
25
--
25
--
26
2.21.0
26
2.21.0
27
27
28
28
diff view generated by jsdifflib
1
From: Stefan Hajnoczi <stefanha@redhat.com>
1
From: Stefan Hajnoczi <stefanha@redhat.com>
2
2
3
Fixes: a6b257a08e3d72219f03e461a52152672fec0612
3
Fixes: a6b257a08e3d72219f03e461a52152672fec0612
4
("file-posix: Handle undetectable alignment")
4
("file-posix: Handle undetectable alignment")
5
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
5
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
6
Message-id: 20190827101328.4062-1-stefanha@redhat.com
6
Message-id: 20190827101328.4062-1-stefanha@redhat.com
7
Reviewed-by: Thomas Huth <thuth@redhat.com>
7
Reviewed-by: Thomas Huth <thuth@redhat.com>
8
Signed-off-by: Max Reitz <mreitz@redhat.com>
8
Signed-off-by: Max Reitz <mreitz@redhat.com>
9
---
9
---
10
block/file-posix.c | 2 +-
10
block/file-posix.c | 2 +-
11
1 file changed, 1 insertion(+), 1 deletion(-)
11
1 file changed, 1 insertion(+), 1 deletion(-)
12
12
13
diff --git a/block/file-posix.c b/block/file-posix.c
13
diff --git a/block/file-posix.c b/block/file-posix.c
14
index XXXXXXX..XXXXXXX 100644
14
index XXXXXXX..XXXXXXX 100644
15
--- a/block/file-posix.c
15
--- a/block/file-posix.c
16
+++ b/block/file-posix.c
16
+++ b/block/file-posix.c
17
@@ -XXX,XX +XXX,XX @@ static void raw_probe_alignment(BlockDriverState *bs, int fd, Error **errp)
17
@@ -XXX,XX +XXX,XX @@ static void raw_probe_alignment(BlockDriverState *bs, int fd, Error **errp)
18
for (i = 0; i < ARRAY_SIZE(alignments); i++) {
18
for (i = 0; i < ARRAY_SIZE(alignments); i++) {
19
align = alignments[i];
19
align = alignments[i];
20
if (raw_is_io_aligned(fd, buf + align, max_align)) {
20
if (raw_is_io_aligned(fd, buf + align, max_align)) {
21
- /* Fallback to request_aligment. */
21
- /* Fallback to request_aligment. */
22
+ /* Fallback to request_alignment. */
22
+ /* Fallback to request_alignment. */
23
s->buf_align = (align != 1) ? align : bs->bl.request_alignment;
23
s->buf_align = (align != 1) ? align : bs->bl.request_alignment;
24
break;
24
break;
25
}
25
}
26
--
26
--
27
2.21.0
27
2.21.0
28
28
29
29
diff view generated by jsdifflib
New patch
1
Without this argument, qemu will print an angry message about not being
2
able to connect to a display server if $DISPLAY is not set. For me,
3
that breaks iotests.supported_formats() because it thus only sees
4
["Could", "not", "connect"] as the supported formats.
1
5
6
Signed-off-by: Max Reitz <mreitz@redhat.com>
7
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
8
Message-id: 20190819201851.24418-2-mreitz@redhat.com
9
Reviewed-by: Thomas Huth <thuth@redhat.com>
10
Signed-off-by: Max Reitz <mreitz@redhat.com>
11
---
12
tests/qemu-iotests/check | 6 +++---
13
1 file changed, 3 insertions(+), 3 deletions(-)
14
15
diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
16
index XXXXXXX..XXXXXXX 100755
17
--- a/tests/qemu-iotests/check
18
+++ b/tests/qemu-iotests/check
19
@@ -XXX,XX +XXX,XX @@ export QEMU_PROG="$(type -p "$QEMU_PROG")"
20
21
case "$QEMU_PROG" in
22
*qemu-system-arm|*qemu-system-aarch64)
23
- export QEMU_OPTIONS="-nodefaults -machine virt,accel=qtest"
24
+ export QEMU_OPTIONS="-nodefaults -display none -machine virt,accel=qtest"
25
;;
26
*qemu-system-tricore)
27
- export QEMU_OPTIONS="-nodefaults -machine tricore_testboard,accel=qtest"
28
+ export QEMU_OPTIONS="-nodefaults -display none -machine tricore_testboard,accel=qtest"
29
;;
30
*)
31
- export QEMU_OPTIONS="-nodefaults -machine accel=qtest"
32
+ export QEMU_OPTIONS="-nodefaults -display none -machine accel=qtest"
33
;;
34
esac
35
36
--
37
2.21.0
38
39
diff view generated by jsdifflib
1
From: Thomas Huth <thuth@redhat.com>
1
From: Thomas Huth <thuth@redhat.com>
2
2
3
It is possible to enable only a subset of the block drivers with the
3
It is possible to enable only a subset of the block drivers with the
4
"--block-drv-rw-whitelist" option of the "configure" script. All other
4
"--block-drv-rw-whitelist" option of the "configure" script. All other
5
drivers are marked as unusable (or only included as read-only with the
5
drivers are marked as unusable (or only included as read-only with the
6
"--block-drv-ro-whitelist" option). If an iotest is now using such a
6
"--block-drv-ro-whitelist" option). If an iotest is now using such a
7
disabled block driver, it is failing - which is bad, since at least the
7
disabled block driver, it is failing - which is bad, since at least the
8
tests in the "auto" group should be able to deal with this situation.
8
tests in the "auto" group should be able to deal with this situation.
9
Thus let's introduce a "_require_drivers" function that can be used by
9
Thus let's introduce a "_require_drivers" function that can be used by
10
the shell tests to check for the availability of certain drivers first,
10
the shell tests to check for the availability of certain drivers first,
11
and marks the test as "not run" if one of the drivers is missing.
11
and marks the test as "not run" if one of the drivers is missing.
12
12
13
This patch mainly targets the test in the "auto" group which should
13
This patch mainly targets the test in the "auto" group which should
14
never fail in such a case, but also improves some of the other tests
14
never fail in such a case, but also improves some of the other tests
15
along the way. Note that we also assume that the "qcow2" and "file"
15
along the way. Note that we also assume that the "qcow2" and "file"
16
drivers are always available - otherwise it does not make sense to
16
drivers are always available - otherwise it does not make sense to
17
run "make check-block" at all (which only tests with qcow2 by default).
17
run "make check-block" at all (which only tests with qcow2 by default).
18
18
19
Signed-off-by: Thomas Huth <thuth@redhat.com>
19
Signed-off-by: Thomas Huth <thuth@redhat.com>
20
Message-id: 20190823133552.11680-1-thuth@redhat.com
20
Message-id: 20190823133552.11680-1-thuth@redhat.com
21
Signed-off-by: Max Reitz <mreitz@redhat.com>
21
Signed-off-by: Max Reitz <mreitz@redhat.com>
22
---
22
---
23
tests/qemu-iotests/071 | 1 +
23
tests/qemu-iotests/071 | 1 +
24
tests/qemu-iotests/081 | 4 +---
24
tests/qemu-iotests/081 | 4 +---
25
tests/qemu-iotests/099 | 1 +
25
tests/qemu-iotests/099 | 1 +
26
tests/qemu-iotests/120 | 1 +
26
tests/qemu-iotests/120 | 1 +
27
tests/qemu-iotests/162 | 4 +---
27
tests/qemu-iotests/162 | 4 +---
28
tests/qemu-iotests/184 | 1 +
28
tests/qemu-iotests/184 | 1 +
29
tests/qemu-iotests/186 | 1 +
29
tests/qemu-iotests/186 | 1 +
30
tests/qemu-iotests/common.rc | 14 ++++++++++++++
30
tests/qemu-iotests/common.rc | 14 ++++++++++++++
31
8 files changed, 21 insertions(+), 6 deletions(-)
31
8 files changed, 21 insertions(+), 6 deletions(-)
32
32
33
diff --git a/tests/qemu-iotests/071 b/tests/qemu-iotests/071
33
diff --git a/tests/qemu-iotests/071 b/tests/qemu-iotests/071
34
index XXXXXXX..XXXXXXX 100755
34
index XXXXXXX..XXXXXXX 100755
35
--- a/tests/qemu-iotests/071
35
--- a/tests/qemu-iotests/071
36
+++ b/tests/qemu-iotests/071
36
+++ b/tests/qemu-iotests/071
37
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
37
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
38
38
39
_supported_fmt qcow2
39
_supported_fmt qcow2
40
_supported_proto file
40
_supported_proto file
41
+_require_drivers blkdebug blkverify
41
+_require_drivers blkdebug blkverify
42
42
43
do_run_qemu()
43
do_run_qemu()
44
{
44
{
45
diff --git a/tests/qemu-iotests/081 b/tests/qemu-iotests/081
45
diff --git a/tests/qemu-iotests/081 b/tests/qemu-iotests/081
46
index XXXXXXX..XXXXXXX 100755
46
index XXXXXXX..XXXXXXX 100755
47
--- a/tests/qemu-iotests/081
47
--- a/tests/qemu-iotests/081
48
+++ b/tests/qemu-iotests/081
48
+++ b/tests/qemu-iotests/081
49
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
49
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
50
_supported_fmt raw
50
_supported_fmt raw
51
_supported_proto file
51
_supported_proto file
52
_supported_os Linux
52
_supported_os Linux
53
+_require_drivers quorum
53
+_require_drivers quorum
54
54
55
do_run_qemu()
55
do_run_qemu()
56
{
56
{
57
@@ -XXX,XX +XXX,XX @@ run_qemu()
57
@@ -XXX,XX +XXX,XX @@ run_qemu()
58
| _filter_qemu_io | _filter_generated_node_ids
58
| _filter_qemu_io | _filter_generated_node_ids
59
}
59
}
60
60
61
-test_quorum=$($QEMU_IMG --help|grep quorum)
61
-test_quorum=$($QEMU_IMG --help|grep quorum)
62
-[ "$test_quorum" = "" ] && _supported_fmt quorum
62
-[ "$test_quorum" = "" ] && _supported_fmt quorum
63
-
63
-
64
quorum="driver=raw,file.driver=quorum,file.vote-threshold=2"
64
quorum="driver=raw,file.driver=quorum,file.vote-threshold=2"
65
quorum="$quorum,file.children.0.file.filename=$TEST_DIR/1.raw"
65
quorum="$quorum,file.children.0.file.filename=$TEST_DIR/1.raw"
66
quorum="$quorum,file.children.1.file.filename=$TEST_DIR/2.raw"
66
quorum="$quorum,file.children.1.file.filename=$TEST_DIR/2.raw"
67
diff --git a/tests/qemu-iotests/099 b/tests/qemu-iotests/099
67
diff --git a/tests/qemu-iotests/099 b/tests/qemu-iotests/099
68
index XXXXXXX..XXXXXXX 100755
68
index XXXXXXX..XXXXXXX 100755
69
--- a/tests/qemu-iotests/099
69
--- a/tests/qemu-iotests/099
70
+++ b/tests/qemu-iotests/099
70
+++ b/tests/qemu-iotests/099
71
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
71
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
72
_supported_fmt qcow qcow2 qed vdi vhdx vmdk vpc
72
_supported_fmt qcow qcow2 qed vdi vhdx vmdk vpc
73
_supported_proto file
73
_supported_proto file
74
_supported_os Linux
74
_supported_os Linux
75
+_require_drivers blkdebug blkverify
75
+_require_drivers blkdebug blkverify
76
_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" \
76
_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" \
77
"subformat=twoGbMaxExtentSparse"
77
"subformat=twoGbMaxExtentSparse"
78
78
79
diff --git a/tests/qemu-iotests/120 b/tests/qemu-iotests/120
79
diff --git a/tests/qemu-iotests/120 b/tests/qemu-iotests/120
80
index XXXXXXX..XXXXXXX 100755
80
index XXXXXXX..XXXXXXX 100755
81
--- a/tests/qemu-iotests/120
81
--- a/tests/qemu-iotests/120
82
+++ b/tests/qemu-iotests/120
82
+++ b/tests/qemu-iotests/120
83
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
83
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
84
_supported_fmt generic
84
_supported_fmt generic
85
_supported_proto file
85
_supported_proto file
86
_unsupported_fmt luks
86
_unsupported_fmt luks
87
+_require_drivers raw
87
+_require_drivers raw
88
88
89
_make_test_img 64M
89
_make_test_img 64M
90
90
91
diff --git a/tests/qemu-iotests/162 b/tests/qemu-iotests/162
91
diff --git a/tests/qemu-iotests/162 b/tests/qemu-iotests/162
92
index XXXXXXX..XXXXXXX 100755
92
index XXXXXXX..XXXXXXX 100755
93
--- a/tests/qemu-iotests/162
93
--- a/tests/qemu-iotests/162
94
+++ b/tests/qemu-iotests/162
94
+++ b/tests/qemu-iotests/162
95
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
95
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
96
. ./common.filter
96
. ./common.filter
97
97
98
_supported_fmt generic
98
_supported_fmt generic
99
-
99
-
100
-test_ssh=$($QEMU_IMG --help | grep '^Supported formats:.* ssh\( \|$\)')
100
-test_ssh=$($QEMU_IMG --help | grep '^Supported formats:.* ssh\( \|$\)')
101
-[ "$test_ssh" = "" ] && _notrun "ssh support required"
101
-[ "$test_ssh" = "" ] && _notrun "ssh support required"
102
+_require_drivers ssh
102
+_require_drivers ssh
103
103
104
echo
104
echo
105
echo '=== NBD ==='
105
echo '=== NBD ==='
106
diff --git a/tests/qemu-iotests/184 b/tests/qemu-iotests/184
106
diff --git a/tests/qemu-iotests/184 b/tests/qemu-iotests/184
107
index XXXXXXX..XXXXXXX 100755
107
index XXXXXXX..XXXXXXX 100755
108
--- a/tests/qemu-iotests/184
108
--- a/tests/qemu-iotests/184
109
+++ b/tests/qemu-iotests/184
109
+++ b/tests/qemu-iotests/184
110
@@ -XXX,XX +XXX,XX @@ trap "exit \$status" 0 1 2 3 15
110
@@ -XXX,XX +XXX,XX @@ trap "exit \$status" 0 1 2 3 15
111
. ./common.filter
111
. ./common.filter
112
112
113
_supported_os Linux
113
_supported_os Linux
114
+_require_drivers throttle
114
+_require_drivers throttle
115
115
116
do_run_qemu()
116
do_run_qemu()
117
{
117
{
118
diff --git a/tests/qemu-iotests/186 b/tests/qemu-iotests/186
118
diff --git a/tests/qemu-iotests/186 b/tests/qemu-iotests/186
119
index XXXXXXX..XXXXXXX 100755
119
index XXXXXXX..XXXXXXX 100755
120
--- a/tests/qemu-iotests/186
120
--- a/tests/qemu-iotests/186
121
+++ b/tests/qemu-iotests/186
121
+++ b/tests/qemu-iotests/186
122
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
122
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
123
123
124
_supported_fmt qcow2
124
_supported_fmt qcow2
125
_supported_proto file
125
_supported_proto file
126
+_require_drivers null-co
126
+_require_drivers null-co
127
127
128
if [ "$QEMU_DEFAULT_MACHINE" != "pc" ]; then
128
if [ "$QEMU_DEFAULT_MACHINE" != "pc" ]; then
129
_notrun "Requires a PC machine"
129
_notrun "Requires a PC machine"
130
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
130
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
131
index XXXXXXX..XXXXXXX 100644
131
index XXXXXXX..XXXXXXX 100644
132
--- a/tests/qemu-iotests/common.rc
132
--- a/tests/qemu-iotests/common.rc
133
+++ b/tests/qemu-iotests/common.rc
133
+++ b/tests/qemu-iotests/common.rc
134
@@ -XXX,XX +XXX,XX @@ _require_command()
134
@@ -XXX,XX +XXX,XX @@ _require_command()
135
[ -x "$c" ] || _notrun "$1 utility required, skipped this test"
135
[ -x "$c" ] || _notrun "$1 utility required, skipped this test"
136
}
136
}
137
137
138
+# Check that a set of drivers has been whitelisted in the QEMU binary
138
+# Check that a set of drivers has been whitelisted in the QEMU binary
139
+#
139
+#
140
+_require_drivers()
140
+_require_drivers()
141
+{
141
+{
142
+ available=$($QEMU -drive format=help | \
142
+ available=$($QEMU -drive format=help | \
143
+ sed -e '/Supported formats:/!d' -e 's/Supported formats://')
143
+ sed -e '/Supported formats:/!d' -e 's/Supported formats://')
144
+ for driver
144
+ for driver
145
+ do
145
+ do
146
+ if ! echo "$available" | grep -q " $driver\( \|$\)"; then
146
+ if ! echo "$available" | grep -q " $driver\( \|$\)"; then
147
+ _notrun "$driver not available"
147
+ _notrun "$driver not available"
148
+ fi
148
+ fi
149
+ done
149
+ done
150
+}
150
+}
151
+
151
+
152
# make sure this script returns success
152
# make sure this script returns success
153
true
153
true
154
--
154
--
155
2.21.0
155
2.21.0
156
156
157
157
diff view generated by jsdifflib
1
From: Thomas Huth <thuth@redhat.com>
1
From: Thomas Huth <thuth@redhat.com>
2
2
3
The sanitizers (especially the address sanitizer from Clang) are
3
The sanitizers (especially the address sanitizer from Clang) are
4
sometimes printing out warnings or false positives - this spoils
4
sometimes printing out warnings or false positives - this spoils
5
the output of the iotests, causing some of the tests to fail.
5
the output of the iotests, causing some of the tests to fail.
6
Thus let's skip the automatic iotests during "make check" when the
6
Thus let's skip the automatic iotests during "make check" when the
7
user configured QEMU with --enable-sanitizers.
7
user configured QEMU with --enable-sanitizers.
8
8
9
Signed-off-by: Thomas Huth <thuth@redhat.com>
9
Signed-off-by: Thomas Huth <thuth@redhat.com>
10
Message-id: 20190823084203.29734-1-thuth@redhat.com
10
Message-id: 20190823084203.29734-1-thuth@redhat.com
11
Signed-off-by: Max Reitz <mreitz@redhat.com>
11
Signed-off-by: Max Reitz <mreitz@redhat.com>
12
---
12
---
13
tests/check-block.sh | 5 +++++
13
tests/check-block.sh | 5 +++++
14
1 file changed, 5 insertions(+)
14
1 file changed, 5 insertions(+)
15
15
16
diff --git a/tests/check-block.sh b/tests/check-block.sh
16
diff --git a/tests/check-block.sh b/tests/check-block.sh
17
index XXXXXXX..XXXXXXX 100755
17
index XXXXXXX..XXXXXXX 100755
18
--- a/tests/check-block.sh
18
--- a/tests/check-block.sh
19
+++ b/tests/check-block.sh
19
+++ b/tests/check-block.sh
20
@@ -XXX,XX +XXX,XX @@ if grep -q "TARGET_GPROF=y" *-softmmu/config-target.mak 2>/dev/null ; then
20
@@ -XXX,XX +XXX,XX @@ if grep -q "TARGET_GPROF=y" *-softmmu/config-target.mak 2>/dev/null ; then
21
exit 0
21
exit 0
22
fi
22
fi
23
23
24
+if grep -q "CFLAGS.*-fsanitize" config-host.mak 2>/dev/null ; then
24
+if grep -q "CFLAGS.*-fsanitize" config-host.mak 2>/dev/null ; then
25
+ echo "Sanitizers are enabled ==> Not running the qemu-iotests."
25
+ echo "Sanitizers are enabled ==> Not running the qemu-iotests."
26
+ exit 0
26
+ exit 0
27
+fi
27
+fi
28
+
28
+
29
if [ -z "$(find . -name 'qemu-system-*' -print)" ]; then
29
if [ -z "$(find . -name 'qemu-system-*' -print)" ]; then
30
echo "No qemu-system binary available ==> Not running the qemu-iotests."
30
echo "No qemu-system binary available ==> Not running the qemu-iotests."
31
exit 0
31
exit 0
32
--
32
--
33
2.21.0
33
2.21.0
34
34
35
35
diff view generated by jsdifflib
1
From: Nir Soffer <nirsof@gmail.com>
1
From: Nir Soffer <nirsof@gmail.com>
2
2
3
Quoting cache mode is not needed, and most tests use unquoted values.
3
Quoting cache mode is not needed, and most tests use unquoted values.
4
Unify all test to use the same style.
4
Unify all test to use the same style.
5
5
6
Message-id: 20190827173432.7656-1-nsoffer@redhat.com
6
Message-id: 20190827173432.7656-1-nsoffer@redhat.com
7
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
7
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
8
Signed-off-by: Max Reitz <mreitz@redhat.com>
8
Signed-off-by: Max Reitz <mreitz@redhat.com>
9
---
9
---
10
tests/qemu-iotests/026 | 4 ++--
10
tests/qemu-iotests/026 | 4 ++--
11
tests/qemu-iotests/039 | 4 ++--
11
tests/qemu-iotests/039 | 4 ++--
12
tests/qemu-iotests/052 | 2 +-
12
tests/qemu-iotests/052 | 2 +-
13
tests/qemu-iotests/091 | 4 ++--
13
tests/qemu-iotests/091 | 4 ++--
14
4 files changed, 7 insertions(+), 7 deletions(-)
14
4 files changed, 7 insertions(+), 7 deletions(-)
15
15
16
diff --git a/tests/qemu-iotests/026 b/tests/qemu-iotests/026
16
diff --git a/tests/qemu-iotests/026 b/tests/qemu-iotests/026
17
index XXXXXXX..XXXXXXX 100755
17
index XXXXXXX..XXXXXXX 100755
18
--- a/tests/qemu-iotests/026
18
--- a/tests/qemu-iotests/026
19
+++ b/tests/qemu-iotests/026
19
+++ b/tests/qemu-iotests/026
20
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
20
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
21
# Currently only qcow2 supports rebasing
21
# Currently only qcow2 supports rebasing
22
_supported_fmt qcow2
22
_supported_fmt qcow2
23
_supported_proto file
23
_supported_proto file
24
-_default_cache_mode "writethrough"
24
-_default_cache_mode "writethrough"
25
-_supported_cache_modes "writethrough" "none"
25
-_supported_cache_modes "writethrough" "none"
26
+_default_cache_mode writethrough
26
+_default_cache_mode writethrough
27
+_supported_cache_modes writethrough none
27
+_supported_cache_modes writethrough none
28
# The refcount table tests expect a certain minimum width for refcount entries
28
# The refcount table tests expect a certain minimum width for refcount entries
29
# (so that the refcount table actually needs to grow); that minimum is 16 bits,
29
# (so that the refcount table actually needs to grow); that minimum is 16 bits,
30
# being the default refcount entry width.
30
# being the default refcount entry width.
31
diff --git a/tests/qemu-iotests/039 b/tests/qemu-iotests/039
31
diff --git a/tests/qemu-iotests/039 b/tests/qemu-iotests/039
32
index XXXXXXX..XXXXXXX 100755
32
index XXXXXXX..XXXXXXX 100755
33
--- a/tests/qemu-iotests/039
33
--- a/tests/qemu-iotests/039
34
+++ b/tests/qemu-iotests/039
34
+++ b/tests/qemu-iotests/039
35
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
35
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
36
_supported_fmt qcow2
36
_supported_fmt qcow2
37
_supported_proto file
37
_supported_proto file
38
_supported_os Linux
38
_supported_os Linux
39
-_default_cache_mode "writethrough"
39
-_default_cache_mode "writethrough"
40
-_supported_cache_modes "writethrough"
40
-_supported_cache_modes "writethrough"
41
+_default_cache_mode writethrough
41
+_default_cache_mode writethrough
42
+_supported_cache_modes writethrough
42
+_supported_cache_modes writethrough
43
43
44
size=128M
44
size=128M
45
45
46
diff --git a/tests/qemu-iotests/052 b/tests/qemu-iotests/052
46
diff --git a/tests/qemu-iotests/052 b/tests/qemu-iotests/052
47
index XXXXXXX..XXXXXXX 100755
47
index XXXXXXX..XXXXXXX 100755
48
--- a/tests/qemu-iotests/052
48
--- a/tests/qemu-iotests/052
49
+++ b/tests/qemu-iotests/052
49
+++ b/tests/qemu-iotests/052
50
@@ -XXX,XX +XXX,XX @@ _supported_fmt generic
50
@@ -XXX,XX +XXX,XX @@ _supported_fmt generic
51
_supported_proto file
51
_supported_proto file
52
52
53
# Don't do O_DIRECT on tmpfs
53
# Don't do O_DIRECT on tmpfs
54
-_supported_cache_modes "writeback" "writethrough" "unsafe"
54
-_supported_cache_modes "writeback" "writethrough" "unsafe"
55
+_supported_cache_modes writeback writethrough unsafe
55
+_supported_cache_modes writeback writethrough unsafe
56
56
57
size=128M
57
size=128M
58
_make_test_img $size
58
_make_test_img $size
59
diff --git a/tests/qemu-iotests/091 b/tests/qemu-iotests/091
59
diff --git a/tests/qemu-iotests/091 b/tests/qemu-iotests/091
60
index XXXXXXX..XXXXXXX 100755
60
index XXXXXXX..XXXXXXX 100755
61
--- a/tests/qemu-iotests/091
61
--- a/tests/qemu-iotests/091
62
+++ b/tests/qemu-iotests/091
62
+++ b/tests/qemu-iotests/091
63
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
63
@@ -XXX,XX +XXX,XX @@ trap "_cleanup; exit \$status" 0 1 2 3 15
64
_supported_fmt qcow2
64
_supported_fmt qcow2
65
_supported_proto file
65
_supported_proto file
66
_supported_os Linux
66
_supported_os Linux
67
-_default_cache_mode "none"
67
-_default_cache_mode "none"
68
-_supported_cache_modes "writethrough" "none" "writeback"
68
-_supported_cache_modes "writethrough" "none" "writeback"
69
+_default_cache_mode none
69
+_default_cache_mode none
70
+_supported_cache_modes writethrough none writeback
70
+_supported_cache_modes writethrough none writeback
71
71
72
size=1G
72
size=1G
73
73
74
--
74
--
75
2.21.0
75
2.21.0
76
76
77
77
diff view generated by jsdifflib