1
The following changes since commit 346ed3151f1c43e72c40cb55b392a1d4cface62c:
1
The following changes since commit 9548cbeffffd4253e38570d29b8cff0bf77c998f:
2
2
3
Merge remote-tracking branch 'remotes/awilliam/tags/vfio-update-20200206.0' into staging (2020-02-07 11:52:15 +0000)
3
iotests/copy-before-write: specify required_fmts (2022-07-12 13:21:02 +0530)
4
4
5
are available in the Git repository at:
5
are available in the Git repository at:
6
6
7
https://github.com/stefanha/qemu.git tags/block-pull-request
7
https://gitlab.com/hreitz/qemu.git tags/pull-block-2022-07-12
8
8
9
for you to fetch changes up to 11a18c84db4a71497d3d40769688a01b6f64b2ad:
9
for you to fetch changes up to 85c4bf8aa6c93c24876e8870ae7cf8ab2e5a96cf:
10
10
11
hw/core: Allow setting 'virtio-blk-device.scsi' property on OSX host (2020-02-07 16:49:39 +0000)
11
vl: Unlink absolute PID file path (2022-07-12 14:31:15 +0200)
12
12
13
----------------------------------------------------------------
13
----------------------------------------------------------------
14
Pull request
14
Block patches:
15
- Refactoring for non-coroutine variants of bdrv/blk_co_* functions:
16
Auto-generate more of them with the block coroutine wrapper generator
17
script
18
- iotest fixes
19
- Both for the storage daemon and the system emulator: Fix PID file
20
handling when daemonizing (store the absolute path and delete that on
21
exit, which is necessary because daemonizing will change the working
22
directory to /)
15
23
16
----------------------------------------------------------------
24
----------------------------------------------------------------
25
Alberto Faria (28):
26
block: Add a 'flags' param to bdrv_{pread,pwrite,pwrite_sync}()
27
block: Change bdrv_{pread,pwrite,pwrite_sync}() param order
28
block: Make bdrv_{pread,pwrite}() return 0 on success
29
crypto: Make block callbacks return 0 on success
30
block: Make bdrv_co_pwrite() take a const buffer
31
block: Make 'bytes' param of bdrv_co_{pread,pwrite,preadv,pwritev}()
32
an int64_t
33
block: Implement bdrv_{pread,pwrite,pwrite_zeroes}() using
34
generated_co_wrapper
35
block: Add bdrv_co_pwrite_sync()
36
block: Use bdrv_co_pwrite_sync() when caller is coroutine_fn
37
block/qcow2: Use bdrv_pwrite_sync() in qcow2_mark_dirty()
38
block: Make blk_{pread,pwrite}() return 0 on success
39
block: Add a 'flags' param to blk_pread()
40
block: Change blk_{pread,pwrite}() param order
41
block: Make 'bytes' param of blk_{pread,pwrite}() an int64_t
42
block: Make blk_co_pwrite() take a const buffer
43
block: Implement blk_{pread,pwrite}() using generated_co_wrapper
44
block: Add blk_{preadv,pwritev}()
45
block: Add blk_[co_]preadv_part()
46
block: Export blk_pwritev_part() in block-backend-io.h
47
block: Change blk_pwrite_compressed() param order
48
block: Add blk_co_pwrite_compressed()
49
block: Implement blk_pwrite_zeroes() using generated_co_wrapper
50
block: Implement blk_pdiscard() using generated_co_wrapper
51
block: Implement blk_flush() using generated_co_wrapper
52
block: Add blk_co_ioctl()
53
block: Add blk_co_truncate()
54
block: Reorganize some declarations in block-backend-io.h
55
block: Remove remaining unused symbols in coroutines.h
17
56
18
Philippe Mathieu-Daudé (1):
57
Hanna Reitz (5):
19
hw/core: Allow setting 'virtio-blk-device.scsi' property on OSX host
58
qsd: Do not use error_report() before monitor_init
59
iotests/297: Have mypy ignore unused ignores
60
qsd: Unlink absolute PID file path
61
vl: Conditionally register PID file unlink notifier
62
vl: Unlink absolute PID file path
20
63
21
Vladimir Sementsov-Ogievskiy (1):
64
John Snow (2):
22
block: fix crash on zero-length unaligned write and read
65
tests/qemu-iotests: hotfix for 307, 223 output
66
tests/qemu-iotests: skip 108 when FUSE is not loaded
23
67
24
block/io.c | 28 +++++++++++++++++++++++++++-
68
block/coroutines.h | 44 --------
25
hw/core/machine.c | 3 ++-
69
include/block/block-io.h | 22 ++--
26
2 files changed, 29 insertions(+), 2 deletions(-)
70
include/block/block_int-io.h | 4 +-
71
include/crypto/block.h | 32 +++---
72
include/sysemu/block-backend-io.h | 97 ++++++++++-------
73
block.c | 10 +-
74
block/blklogwrites.c | 6 +-
75
block/block-backend.c | 150 +++++++++++---------------
76
block/bochs.c | 10 +-
77
block/cloop.c | 12 +--
78
block/commit.c | 4 +-
79
block/crypto.c | 58 +++++-----
80
block/dmg.c | 36 +++----
81
block/export/fuse.c | 4 +-
82
block/io.c | 55 +---------
83
block/parallels-ext.c | 6 +-
84
block/parallels.c | 14 +--
85
block/qcow.c | 55 +++++-----
86
block/qcow2-bitmap.c | 14 +--
87
block/qcow2-cache.c | 9 +-
88
block/qcow2-cluster.c | 19 ++--
89
block/qcow2-refcount.c | 58 +++++-----
90
block/qcow2-snapshot.c | 53 +++++-----
91
block/qcow2.c | 84 +++++++--------
92
block/qed.c | 21 ++--
93
block/vdi.c | 20 ++--
94
block/vhdx-log.c | 23 ++--
95
block/vhdx.c | 56 +++++-----
96
block/vmdk.c | 80 +++++++-------
97
block/vpc.c | 35 +++---
98
block/vvfat.c | 11 +-
99
crypto/block-luks.c | 8 +-
100
crypto/block.c | 6 +-
101
hw/arm/allwinner-h3.c | 2 +-
102
hw/arm/aspeed.c | 2 +-
103
hw/block/block.c | 2 +-
104
hw/block/fdc.c | 20 ++--
105
hw/block/hd-geometry.c | 2 +-
106
hw/block/m25p80.c | 2 +-
107
hw/block/nand.c | 47 ++++----
108
hw/block/onenand.c | 32 +++---
109
hw/block/pflash_cfi01.c | 4 +-
110
hw/block/pflash_cfi02.c | 4 +-
111
hw/ide/atapi.c | 4 +-
112
hw/misc/mac_via.c | 6 +-
113
hw/misc/sifive_u_otp.c | 14 +--
114
hw/nvram/eeprom_at24c.c | 8 +-
115
hw/nvram/spapr_nvram.c | 16 +--
116
hw/nvram/xlnx-bbram.c | 4 +-
117
hw/nvram/xlnx-efuse.c | 4 +-
118
hw/ppc/pnv_pnor.c | 6 +-
119
hw/sd/sd.c | 4 +-
120
migration/block.c | 8 +-
121
nbd/server.c | 8 +-
122
qemu-img.c | 41 +++----
123
qemu-io-cmds.c | 20 ++--
124
softmmu/vl.c | 42 ++++++--
125
storage-daemon/qemu-storage-daemon.c | 17 ++-
126
tests/unit/test-block-iothread.c | 153 ++++++++++++++++++++++++---
127
tests/unit/test-crypto-block.c | 38 +++----
128
block/meson.build | 1 +
129
tests/qemu-iotests/108 | 5 +
130
tests/qemu-iotests/223.out | 4 +-
131
tests/qemu-iotests/307.out | 4 +-
132
tests/qemu-iotests/mypy.ini | 2 +-
133
65 files changed, 856 insertions(+), 786 deletions(-)
27
134
28
--
135
--
29
2.24.1
136
2.35.3
30
31
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
For consistency with other I/O functions, and in preparation to
4
implement them using generated_co_wrapper.
5
6
Callers were updated using this Coccinelle script:
7
8
@@ expression child, offset, buf, bytes; @@
9
- bdrv_pread(child, offset, buf, bytes)
10
+ bdrv_pread(child, offset, buf, bytes, 0)
11
12
@@ expression child, offset, buf, bytes; @@
13
- bdrv_pwrite(child, offset, buf, bytes)
14
+ bdrv_pwrite(child, offset, buf, bytes, 0)
15
16
@@ expression child, offset, buf, bytes; @@
17
- bdrv_pwrite_sync(child, offset, buf, bytes)
18
+ bdrv_pwrite_sync(child, offset, buf, bytes, 0)
19
20
Resulting overly-long lines were then fixed by hand.
21
22
Signed-off-by: Alberto Faria <afaria@redhat.com>
23
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
24
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
25
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
26
Message-Id: <20220609152744.3891847-2-afaria@redhat.com>
27
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
28
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
29
---
30
include/block/block-io.h | 7 ++--
31
block/blklogwrites.c | 4 +--
32
block/bochs.c | 6 ++--
33
block/cloop.c | 10 +++---
34
block/crypto.c | 4 +--
35
block/dmg.c | 24 +++++++-------
36
block/io.c | 13 ++++----
37
block/parallels-ext.c | 4 +--
38
block/parallels.c | 12 +++----
39
block/qcow.c | 27 ++++++++-------
40
block/qcow2-bitmap.c | 14 ++++----
41
block/qcow2-cache.c | 7 ++--
42
block/qcow2-cluster.c | 21 ++++++------
43
block/qcow2-refcount.c | 42 +++++++++++------------
44
block/qcow2-snapshot.c | 39 +++++++++++-----------
45
block/qcow2.c | 44 ++++++++++++------------
46
block/qed.c | 8 ++---
47
block/vdi.c | 10 +++---
48
block/vhdx-log.c | 19 +++++------
49
block/vhdx.c | 32 ++++++++++--------
50
block/vmdk.c | 57 ++++++++++++++------------------
51
block/vpc.c | 19 ++++++-----
52
block/vvfat.c | 7 ++--
53
tests/unit/test-block-iothread.c | 8 ++---
54
24 files changed, 219 insertions(+), 219 deletions(-)
55
56
diff --git a/include/block/block-io.h b/include/block/block-io.h
57
index XXXXXXX..XXXXXXX 100644
58
--- a/include/block/block-io.h
59
+++ b/include/block/block-io.h
60
@@ -XXX,XX +XXX,XX @@
61
int bdrv_pwrite_zeroes(BdrvChild *child, int64_t offset,
62
int64_t bytes, BdrvRequestFlags flags);
63
int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags);
64
-int bdrv_pread(BdrvChild *child, int64_t offset, void *buf, int64_t bytes);
65
+int bdrv_pread(BdrvChild *child, int64_t offset, void *buf, int64_t bytes,
66
+ BdrvRequestFlags flags);
67
int bdrv_pwrite(BdrvChild *child, int64_t offset, const void *buf,
68
- int64_t bytes);
69
+ int64_t bytes, BdrvRequestFlags flags);
70
int bdrv_pwrite_sync(BdrvChild *child, int64_t offset,
71
- const void *buf, int64_t bytes);
72
+ const void *buf, int64_t bytes, BdrvRequestFlags flags);
73
/*
74
* Efficiently zero a region of the disk image. Note that this is a regular
75
* I/O request like read or write and should have a reasonable size. This
76
diff --git a/block/blklogwrites.c b/block/blklogwrites.c
77
index XXXXXXX..XXXXXXX 100644
78
--- a/block/blklogwrites.c
79
+++ b/block/blklogwrites.c
80
@@ -XXX,XX +XXX,XX @@ static uint64_t blk_log_writes_find_cur_log_sector(BdrvChild *log,
81
82
while (cur_idx < nr_entries) {
83
int read_ret = bdrv_pread(log, cur_sector << sector_bits, &cur_entry,
84
- sizeof(cur_entry));
85
+ sizeof(cur_entry), 0);
86
if (read_ret < 0) {
87
error_setg_errno(errp, -read_ret,
88
"Failed to read log entry %"PRIu64, cur_idx);
89
@@ -XXX,XX +XXX,XX @@ static int blk_log_writes_open(BlockDriverState *bs, QDict *options, int flags,
90
log_sb.nr_entries = cpu_to_le64(0);
91
log_sb.sectorsize = cpu_to_le32(BDRV_SECTOR_SIZE);
92
} else {
93
- ret = bdrv_pread(s->log_file, 0, &log_sb, sizeof(log_sb));
94
+ ret = bdrv_pread(s->log_file, 0, &log_sb, sizeof(log_sb), 0);
95
if (ret < 0) {
96
error_setg_errno(errp, -ret, "Could not read log superblock");
97
goto fail_log;
98
diff --git a/block/bochs.c b/block/bochs.c
99
index XXXXXXX..XXXXXXX 100644
100
--- a/block/bochs.c
101
+++ b/block/bochs.c
102
@@ -XXX,XX +XXX,XX @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags,
103
return -EINVAL;
104
}
105
106
- ret = bdrv_pread(bs->file, 0, &bochs, sizeof(bochs));
107
+ ret = bdrv_pread(bs->file, 0, &bochs, sizeof(bochs), 0);
108
if (ret < 0) {
109
return ret;
110
}
111
@@ -XXX,XX +XXX,XX @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags,
112
}
113
114
ret = bdrv_pread(bs->file, le32_to_cpu(bochs.header), s->catalog_bitmap,
115
- s->catalog_size * 4);
116
+ s->catalog_size * 4, 0);
117
if (ret < 0) {
118
goto fail;
119
}
120
@@ -XXX,XX +XXX,XX @@ static int64_t seek_to_sector(BlockDriverState *bs, int64_t sector_num)
121
122
/* read in bitmap for current extent */
123
ret = bdrv_pread(bs->file, bitmap_offset + (extent_offset / 8),
124
- &bitmap_entry, 1);
125
+ &bitmap_entry, 1, 0);
126
if (ret < 0) {
127
return ret;
128
}
129
diff --git a/block/cloop.c b/block/cloop.c
130
index XXXXXXX..XXXXXXX 100644
131
--- a/block/cloop.c
132
+++ b/block/cloop.c
133
@@ -XXX,XX +XXX,XX @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags,
134
}
135
136
/* read header */
137
- ret = bdrv_pread(bs->file, 128, &s->block_size, 4);
138
+ ret = bdrv_pread(bs->file, 128, &s->block_size, 4, 0);
139
if (ret < 0) {
140
return ret;
141
}
142
@@ -XXX,XX +XXX,XX @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags,
143
return -EINVAL;
144
}
145
146
- ret = bdrv_pread(bs->file, 128 + 4, &s->n_blocks, 4);
147
+ ret = bdrv_pread(bs->file, 128 + 4, &s->n_blocks, 4, 0);
148
if (ret < 0) {
149
return ret;
150
}
151
@@ -XXX,XX +XXX,XX @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags,
152
return -ENOMEM;
153
}
154
155
- ret = bdrv_pread(bs->file, 128 + 4 + 4, s->offsets, offsets_size);
156
+ ret = bdrv_pread(bs->file, 128 + 4 + 4, s->offsets, offsets_size, 0);
157
if (ret < 0) {
158
goto fail;
159
}
160
@@ -XXX,XX +XXX,XX @@ static inline int cloop_read_block(BlockDriverState *bs, int block_num)
161
int ret;
162
uint32_t bytes = s->offsets[block_num + 1] - s->offsets[block_num];
163
164
- ret = bdrv_pread(bs->file, s->offsets[block_num],
165
- s->compressed_block, bytes);
166
+ ret = bdrv_pread(bs->file, s->offsets[block_num], s->compressed_block,
167
+ bytes, 0);
168
if (ret != bytes) {
169
return -1;
170
}
171
diff --git a/block/crypto.c b/block/crypto.c
172
index XXXXXXX..XXXXXXX 100644
173
--- a/block/crypto.c
174
+++ b/block/crypto.c
175
@@ -XXX,XX +XXX,XX @@ static ssize_t block_crypto_read_func(QCryptoBlock *block,
176
BlockDriverState *bs = opaque;
177
ssize_t ret;
178
179
- ret = bdrv_pread(bs->file, offset, buf, buflen);
180
+ ret = bdrv_pread(bs->file, offset, buf, buflen, 0);
181
if (ret < 0) {
182
error_setg_errno(errp, -ret, "Could not read encryption header");
183
return ret;
184
@@ -XXX,XX +XXX,XX @@ static ssize_t block_crypto_write_func(QCryptoBlock *block,
185
BlockDriverState *bs = opaque;
186
ssize_t ret;
187
188
- ret = bdrv_pwrite(bs->file, offset, buf, buflen);
189
+ ret = bdrv_pwrite(bs->file, offset, buf, buflen, 0);
190
if (ret < 0) {
191
error_setg_errno(errp, -ret, "Could not write encryption header");
192
return ret;
193
diff --git a/block/dmg.c b/block/dmg.c
194
index XXXXXXX..XXXXXXX 100644
195
--- a/block/dmg.c
196
+++ b/block/dmg.c
197
@@ -XXX,XX +XXX,XX @@ static int read_uint64(BlockDriverState *bs, int64_t offset, uint64_t *result)
198
uint64_t buffer;
199
int ret;
200
201
- ret = bdrv_pread(bs->file, offset, &buffer, 8);
202
+ ret = bdrv_pread(bs->file, offset, &buffer, 8, 0);
203
if (ret < 0) {
204
return ret;
205
}
206
@@ -XXX,XX +XXX,XX @@ static int read_uint32(BlockDriverState *bs, int64_t offset, uint32_t *result)
207
uint32_t buffer;
208
int ret;
209
210
- ret = bdrv_pread(bs->file, offset, &buffer, 4);
211
+ ret = bdrv_pread(bs->file, offset, &buffer, 4, 0);
212
if (ret < 0) {
213
return ret;
214
}
215
@@ -XXX,XX +XXX,XX @@ static int64_t dmg_find_koly_offset(BdrvChild *file, Error **errp)
216
offset = length - 511 - 512;
217
}
218
length = length < 515 ? length : 515;
219
- ret = bdrv_pread(file, offset, buffer, length);
220
+ ret = bdrv_pread(file, offset, buffer, length, 0);
221
if (ret < 0) {
222
error_setg_errno(errp, -ret, "Failed while reading UDIF trailer");
223
return ret;
224
@@ -XXX,XX +XXX,XX @@ static int dmg_read_resource_fork(BlockDriverState *bs, DmgHeaderState *ds,
225
offset += 4;
226
227
buffer = g_realloc(buffer, count);
228
- ret = bdrv_pread(bs->file, offset, buffer, count);
229
+ ret = bdrv_pread(bs->file, offset, buffer, count, 0);
230
if (ret < 0) {
231
goto fail;
232
}
233
@@ -XXX,XX +XXX,XX @@ static int dmg_read_plist_xml(BlockDriverState *bs, DmgHeaderState *ds,
234
235
buffer = g_malloc(info_length + 1);
236
buffer[info_length] = '\0';
237
- ret = bdrv_pread(bs->file, info_begin, buffer, info_length);
238
+ ret = bdrv_pread(bs->file, info_begin, buffer, info_length, 0);
239
if (ret != info_length) {
240
ret = -EINVAL;
241
goto fail;
242
@@ -XXX,XX +XXX,XX @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
243
case UDZO: { /* zlib compressed */
244
/* we need to buffer, because only the chunk as whole can be
245
* inflated. */
246
- ret = bdrv_pread(bs->file, s->offsets[chunk],
247
- s->compressed_chunk, s->lengths[chunk]);
248
+ ret = bdrv_pread(bs->file, s->offsets[chunk], s->compressed_chunk,
249
+ s->lengths[chunk], 0);
250
if (ret != s->lengths[chunk]) {
251
return -1;
252
}
253
@@ -XXX,XX +XXX,XX @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
254
}
255
/* we need to buffer, because only the chunk as whole can be
256
* inflated. */
257
- ret = bdrv_pread(bs->file, s->offsets[chunk],
258
- s->compressed_chunk, s->lengths[chunk]);
259
+ ret = bdrv_pread(bs->file, s->offsets[chunk], s->compressed_chunk,
260
+ s->lengths[chunk], 0);
261
if (ret != s->lengths[chunk]) {
262
return -1;
263
}
264
@@ -XXX,XX +XXX,XX @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
265
}
266
/* we need to buffer, because only the chunk as whole can be
267
* inflated. */
268
- ret = bdrv_pread(bs->file, s->offsets[chunk],
269
- s->compressed_chunk, s->lengths[chunk]);
270
+ ret = bdrv_pread(bs->file, s->offsets[chunk], s->compressed_chunk,
271
+ s->lengths[chunk], 0);
272
if (ret != s->lengths[chunk]) {
273
return -1;
274
}
275
@@ -XXX,XX +XXX,XX @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
276
break;
277
case UDRW: /* copy */
278
ret = bdrv_pread(bs->file, s->offsets[chunk],
279
- s->uncompressed_chunk, s->lengths[chunk]);
280
+ s->uncompressed_chunk, s->lengths[chunk], 0);
281
if (ret != s->lengths[chunk]) {
282
return -1;
283
}
284
diff --git a/block/io.c b/block/io.c
285
index XXXXXXX..XXXXXXX 100644
286
--- a/block/io.c
287
+++ b/block/io.c
288
@@ -XXX,XX +XXX,XX @@ int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags)
289
}
290
291
/* See bdrv_pwrite() for the return codes */
292
-int bdrv_pread(BdrvChild *child, int64_t offset, void *buf, int64_t bytes)
293
+int bdrv_pread(BdrvChild *child, int64_t offset, void *buf, int64_t bytes,
294
+ BdrvRequestFlags flags)
295
{
296
int ret;
297
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
298
@@ -XXX,XX +XXX,XX @@ int bdrv_pread(BdrvChild *child, int64_t offset, void *buf, int64_t bytes)
299
return -EINVAL;
300
}
301
302
- ret = bdrv_preadv(child, offset, bytes, &qiov, 0);
303
+ ret = bdrv_preadv(child, offset, bytes, &qiov, flags);
304
305
return ret < 0 ? ret : bytes;
306
}
307
@@ -XXX,XX +XXX,XX @@ int bdrv_pread(BdrvChild *child, int64_t offset, void *buf, int64_t bytes)
308
-EACCES Trying to write a read-only device
309
*/
310
int bdrv_pwrite(BdrvChild *child, int64_t offset, const void *buf,
311
- int64_t bytes)
312
+ int64_t bytes, BdrvRequestFlags flags)
313
{
314
int ret;
315
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
316
@@ -XXX,XX +XXX,XX @@ int bdrv_pwrite(BdrvChild *child, int64_t offset, const void *buf,
317
return -EINVAL;
318
}
319
320
- ret = bdrv_pwritev(child, offset, bytes, &qiov, 0);
321
+ ret = bdrv_pwritev(child, offset, bytes, &qiov, flags);
322
323
return ret < 0 ? ret : bytes;
324
}
325
@@ -XXX,XX +XXX,XX @@ int bdrv_pwrite(BdrvChild *child, int64_t offset, const void *buf,
326
* Returns 0 on success, -errno in error cases.
327
*/
328
int bdrv_pwrite_sync(BdrvChild *child, int64_t offset,
329
- const void *buf, int64_t count)
330
+ const void *buf, int64_t count, BdrvRequestFlags flags)
331
{
332
int ret;
333
IO_CODE();
334
335
- ret = bdrv_pwrite(child, offset, buf, count);
336
+ ret = bdrv_pwrite(child, offset, buf, count, flags);
337
if (ret < 0) {
338
return ret;
339
}
340
diff --git a/block/parallels-ext.c b/block/parallels-ext.c
341
index XXXXXXX..XXXXXXX 100644
342
--- a/block/parallels-ext.c
343
+++ b/block/parallels-ext.c
344
@@ -XXX,XX +XXX,XX @@ static int parallels_load_bitmap_data(BlockDriverState *bs,
345
bdrv_dirty_bitmap_deserialize_ones(bitmap, offset, count, false);
346
} else {
347
ret = bdrv_pread(bs->file, entry << BDRV_SECTOR_BITS, buf,
348
- s->cluster_size);
349
+ s->cluster_size, 0);
350
if (ret < 0) {
351
error_setg_errno(errp, -ret,
352
"Failed to read bitmap data cluster");
353
@@ -XXX,XX +XXX,XX @@ int parallels_read_format_extension(BlockDriverState *bs,
354
355
assert(ext_off > 0);
356
357
- ret = bdrv_pread(bs->file, ext_off, ext_cluster, s->cluster_size);
358
+ ret = bdrv_pread(bs->file, ext_off, ext_cluster, s->cluster_size, 0);
359
if (ret < 0) {
360
error_setg_errno(errp, -ret, "Failed to read Format Extension cluster");
361
goto out;
362
diff --git a/block/parallels.c b/block/parallels.c
363
index XXXXXXX..XXXXXXX 100644
364
--- a/block/parallels.c
365
+++ b/block/parallels.c
366
@@ -XXX,XX +XXX,XX @@ static coroutine_fn int parallels_co_flush_to_os(BlockDriverState *bs)
367
if (off + to_write > s->header_size) {
368
to_write = s->header_size - off;
369
}
370
- ret = bdrv_pwrite(bs->file, off, (uint8_t *)s->header + off,
371
- to_write);
372
+ ret = bdrv_pwrite(bs->file, off, (uint8_t *)s->header + off, to_write,
373
+ 0);
374
if (ret < 0) {
375
qemu_co_mutex_unlock(&s->lock);
376
return ret;
377
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn parallels_co_check(BlockDriverState *bs,
378
379
ret = 0;
380
if (flush_bat) {
381
- ret = bdrv_pwrite_sync(bs->file, 0, s->header, s->header_size);
382
+ ret = bdrv_pwrite_sync(bs->file, 0, s->header, s->header_size, 0);
383
if (ret < 0) {
384
res->check_errors++;
385
goto out;
386
@@ -XXX,XX +XXX,XX @@ static int parallels_update_header(BlockDriverState *bs)
387
if (size > s->header_size) {
388
size = s->header_size;
389
}
390
- return bdrv_pwrite_sync(bs->file, 0, s->header, size);
391
+ return bdrv_pwrite_sync(bs->file, 0, s->header, size, 0);
392
}
393
394
static int parallels_open(BlockDriverState *bs, QDict *options, int flags,
395
@@ -XXX,XX +XXX,XX @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags,
396
return -EINVAL;
397
}
398
399
- ret = bdrv_pread(bs->file, 0, &ph, sizeof(ph));
400
+ ret = bdrv_pread(bs->file, 0, &ph, sizeof(ph), 0);
401
if (ret < 0) {
402
goto fail;
403
}
404
@@ -XXX,XX +XXX,XX @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags,
405
s->header_size = size;
406
}
407
408
- ret = bdrv_pread(bs->file, 0, s->header, s->header_size);
409
+ ret = bdrv_pread(bs->file, 0, s->header, s->header_size, 0);
410
if (ret < 0) {
411
goto fail;
412
}
413
diff --git a/block/qcow.c b/block/qcow.c
414
index XXXXXXX..XXXXXXX 100644
415
--- a/block/qcow.c
416
+++ b/block/qcow.c
417
@@ -XXX,XX +XXX,XX @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
418
goto fail;
419
}
420
421
- ret = bdrv_pread(bs->file, 0, &header, sizeof(header));
422
+ ret = bdrv_pread(bs->file, 0, &header, sizeof(header), 0);
423
if (ret < 0) {
424
goto fail;
425
}
426
@@ -XXX,XX +XXX,XX @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
427
}
428
429
ret = bdrv_pread(bs->file, s->l1_table_offset, s->l1_table,
430
- s->l1_size * sizeof(uint64_t));
431
+ s->l1_size * sizeof(uint64_t), 0);
432
if (ret < 0) {
433
goto fail;
434
}
435
@@ -XXX,XX +XXX,XX @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
436
goto fail;
437
}
438
ret = bdrv_pread(bs->file, header.backing_file_offset,
439
- bs->auto_backing_file, len);
440
+ bs->auto_backing_file, len, 0);
441
if (ret < 0) {
442
goto fail;
443
}
444
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
445
BLKDBG_EVENT(bs->file, BLKDBG_L1_UPDATE);
446
ret = bdrv_pwrite_sync(bs->file,
447
s->l1_table_offset + l1_index * sizeof(tmp),
448
- &tmp, sizeof(tmp));
449
+ &tmp, sizeof(tmp), 0);
450
if (ret < 0) {
451
return ret;
452
}
453
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
454
if (new_l2_table) {
455
memset(l2_table, 0, s->l2_size * sizeof(uint64_t));
456
ret = bdrv_pwrite_sync(bs->file, l2_offset, l2_table,
457
- s->l2_size * sizeof(uint64_t));
458
+ s->l2_size * sizeof(uint64_t), 0);
459
if (ret < 0) {
460
return ret;
461
}
462
} else {
463
ret = bdrv_pread(bs->file, l2_offset, l2_table,
464
- s->l2_size * sizeof(uint64_t));
465
+ s->l2_size * sizeof(uint64_t), 0);
466
if (ret < 0) {
467
return ret;
468
}
469
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
470
/* write the cluster content */
471
BLKDBG_EVENT(bs->file, BLKDBG_WRITE_AIO);
472
ret = bdrv_pwrite(bs->file, cluster_offset, s->cluster_cache,
473
- s->cluster_size);
474
+ s->cluster_size, 0);
475
if (ret < 0) {
476
return ret;
477
}
478
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
479
return -EIO;
480
}
481
BLKDBG_EVENT(bs->file, BLKDBG_WRITE_AIO);
482
- ret = bdrv_pwrite(bs->file,
483
- cluster_offset + i,
484
+ ret = bdrv_pwrite(bs->file, cluster_offset + i,
485
s->cluster_data,
486
- BDRV_SECTOR_SIZE);
487
+ BDRV_SECTOR_SIZE, 0);
488
if (ret < 0) {
489
return ret;
490
}
491
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
492
BLKDBG_EVENT(bs->file, BLKDBG_L2_UPDATE);
493
}
494
ret = bdrv_pwrite_sync(bs->file, l2_offset + l2_index * sizeof(tmp),
495
- &tmp, sizeof(tmp));
496
+ &tmp, sizeof(tmp), 0);
497
if (ret < 0) {
498
return ret;
499
}
500
@@ -XXX,XX +XXX,XX @@ static int decompress_cluster(BlockDriverState *bs, uint64_t cluster_offset)
501
csize = cluster_offset >> (63 - s->cluster_bits);
502
csize &= (s->cluster_size - 1);
503
BLKDBG_EVENT(bs->file, BLKDBG_READ_COMPRESSED);
504
- ret = bdrv_pread(bs->file, coffset, s->cluster_data, csize);
505
+ ret = bdrv_pread(bs->file, coffset, s->cluster_data, csize, 0);
506
if (ret != csize)
507
return -1;
508
if (decompress_buffer(s->cluster_cache, s->cluster_size,
509
@@ -XXX,XX +XXX,XX @@ static int qcow_make_empty(BlockDriverState *bs)
510
int ret;
511
512
memset(s->l1_table, 0, l1_length);
513
- if (bdrv_pwrite_sync(bs->file, s->l1_table_offset, s->l1_table,
514
- l1_length) < 0)
515
+ if (bdrv_pwrite_sync(bs->file, s->l1_table_offset, s->l1_table, l1_length,
516
+ 0) < 0)
517
return -1;
518
ret = bdrv_truncate(bs->file, s->l1_table_offset + l1_length, false,
519
PREALLOC_MODE_OFF, 0, NULL);
520
diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c
521
index XXXXXXX..XXXXXXX 100644
522
--- a/block/qcow2-bitmap.c
523
+++ b/block/qcow2-bitmap.c
524
@@ -XXX,XX +XXX,XX @@ static int bitmap_table_load(BlockDriverState *bs, Qcow2BitmapTable *tb,
525
}
526
527
assert(tb->size <= BME_MAX_TABLE_SIZE);
528
- ret = bdrv_pread(bs->file, tb->offset,
529
- table, tb->size * BME_TABLE_ENTRY_SIZE);
530
+ ret = bdrv_pread(bs->file, tb->offset, table,
531
+ tb->size * BME_TABLE_ENTRY_SIZE, 0);
532
if (ret < 0) {
533
goto fail;
534
}
535
@@ -XXX,XX +XXX,XX @@ static int load_bitmap_data(BlockDriverState *bs,
536
* already cleared */
537
}
538
} else {
539
- ret = bdrv_pread(bs->file, data_offset, buf, s->cluster_size);
540
+ ret = bdrv_pread(bs->file, data_offset, buf, s->cluster_size, 0);
541
if (ret < 0) {
542
goto finish;
543
}
544
@@ -XXX,XX +XXX,XX @@ static Qcow2BitmapList *bitmap_list_load(BlockDriverState *bs, uint64_t offset,
545
}
546
dir_end = dir + size;
547
548
- ret = bdrv_pread(bs->file, offset, dir, size);
549
+ ret = bdrv_pread(bs->file, offset, dir, size, 0);
550
if (ret < 0) {
551
error_setg_errno(errp, -ret, "Failed to read bitmap directory");
552
goto fail;
553
@@ -XXX,XX +XXX,XX @@ static int bitmap_list_store(BlockDriverState *bs, Qcow2BitmapList *bm_list,
554
goto fail;
555
}
556
557
- ret = bdrv_pwrite(bs->file, dir_offset, dir, dir_size);
558
+ ret = bdrv_pwrite(bs->file, dir_offset, dir, dir_size, 0);
559
if (ret < 0) {
560
goto fail;
561
}
562
@@ -XXX,XX +XXX,XX @@ static uint64_t *store_bitmap_data(BlockDriverState *bs,
563
goto fail;
564
}
565
566
- ret = bdrv_pwrite(bs->file, off, buf, s->cluster_size);
567
+ ret = bdrv_pwrite(bs->file, off, buf, s->cluster_size, 0);
568
if (ret < 0) {
569
error_setg_errno(errp, -ret, "Failed to write bitmap '%s' to file",
570
bm_name);
571
@@ -XXX,XX +XXX,XX @@ static int store_bitmap(BlockDriverState *bs, Qcow2Bitmap *bm, Error **errp)
572
}
573
574
bitmap_table_to_be(tb, tb_size);
575
- ret = bdrv_pwrite(bs->file, tb_offset, tb, tb_size * sizeof(tb[0]));
576
+ ret = bdrv_pwrite(bs->file, tb_offset, tb, tb_size * sizeof(tb[0]), 0);
577
if (ret < 0) {
578
error_setg_errno(errp, -ret, "Failed to write bitmap '%s' to file",
579
bm_name);
580
diff --git a/block/qcow2-cache.c b/block/qcow2-cache.c
581
index XXXXXXX..XXXXXXX 100644
582
--- a/block/qcow2-cache.c
583
+++ b/block/qcow2-cache.c
584
@@ -XXX,XX +XXX,XX @@ static int qcow2_cache_entry_flush(BlockDriverState *bs, Qcow2Cache *c, int i)
585
}
586
587
ret = bdrv_pwrite(bs->file, c->entries[i].offset,
588
- qcow2_cache_get_table_addr(c, i), c->table_size);
589
+ qcow2_cache_get_table_addr(c, i), c->table_size, 0);
590
if (ret < 0) {
591
return ret;
592
}
593
@@ -XXX,XX +XXX,XX @@ static int qcow2_cache_do_get(BlockDriverState *bs, Qcow2Cache *c,
594
BLKDBG_EVENT(bs->file, BLKDBG_L2_LOAD);
595
}
596
597
- ret = bdrv_pread(bs->file, offset,
598
- qcow2_cache_get_table_addr(c, i),
599
- c->table_size);
600
+ ret = bdrv_pread(bs->file, offset, qcow2_cache_get_table_addr(c, i),
601
+ c->table_size, 0);
602
if (ret < 0) {
603
return ret;
604
}
605
diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
606
index XXXXXXX..XXXXXXX 100644
607
--- a/block/qcow2-cluster.c
608
+++ b/block/qcow2-cluster.c
609
@@ -XXX,XX +XXX,XX @@ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size,
610
BLKDBG_EVENT(bs->file, BLKDBG_L1_GROW_WRITE_TABLE);
611
for(i = 0; i < s->l1_size; i++)
612
new_l1_table[i] = cpu_to_be64(new_l1_table[i]);
613
- ret = bdrv_pwrite_sync(bs->file, new_l1_table_offset,
614
- new_l1_table, new_l1_size2);
615
+ ret = bdrv_pwrite_sync(bs->file, new_l1_table_offset, new_l1_table,
616
+ new_l1_size2, 0);
617
if (ret < 0)
618
goto fail;
619
for(i = 0; i < s->l1_size; i++)
620
@@ -XXX,XX +XXX,XX @@ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size,
621
BLKDBG_EVENT(bs->file, BLKDBG_L1_GROW_ACTIVATE_TABLE);
622
stl_be_p(data, new_l1_size);
623
stq_be_p(data + 4, new_l1_table_offset);
624
- ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, l1_size),
625
- data, sizeof(data));
626
+ ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, l1_size), data,
627
+ sizeof(data), 0);
628
if (ret < 0) {
629
goto fail;
630
}
631
@@ -XXX,XX +XXX,XX @@ int qcow2_write_l1_entry(BlockDriverState *bs, int l1_index)
632
BLKDBG_EVENT(bs->file, BLKDBG_L1_UPDATE);
633
ret = bdrv_pwrite_sync(bs->file,
634
s->l1_table_offset + L1E_SIZE * l1_start_index,
635
- buf, bufsize);
636
+ buf, bufsize, 0);
637
if (ret < 0) {
638
return ret;
639
}
640
@@ -XXX,XX +XXX,XX @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table,
641
(void **)&l2_slice);
642
} else {
643
/* load inactive L2 tables from disk */
644
- ret = bdrv_pread(bs->file, slice_offset, l2_slice, slice_size2);
645
+ ret = bdrv_pread(bs->file, slice_offset, l2_slice,
646
+ slice_size2, 0);
647
}
648
if (ret < 0) {
649
goto fail;
650
@@ -XXX,XX +XXX,XX @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table,
651
goto fail;
652
}
653
654
- ret = bdrv_pwrite(bs->file, slice_offset,
655
- l2_slice, slice_size2);
656
+ ret = bdrv_pwrite(bs->file, slice_offset, l2_slice,
657
+ slice_size2, 0);
658
if (ret < 0) {
659
goto fail;
660
}
661
@@ -XXX,XX +XXX,XX @@ int qcow2_expand_zero_clusters(BlockDriverState *bs,
662
663
l1_table = new_l1_table;
664
665
- ret = bdrv_pread(bs->file, s->snapshots[i].l1_table_offset,
666
- l1_table, l1_size2);
667
+ ret = bdrv_pread(bs->file, s->snapshots[i].l1_table_offset, l1_table,
668
+ l1_size2, 0);
669
if (ret < 0) {
670
goto fail;
671
}
672
diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
673
index XXXXXXX..XXXXXXX 100644
674
--- a/block/qcow2-refcount.c
675
+++ b/block/qcow2-refcount.c
676
@@ -XXX,XX +XXX,XX @@ int qcow2_refcount_init(BlockDriverState *bs)
677
}
678
BLKDBG_EVENT(bs->file, BLKDBG_REFTABLE_LOAD);
679
ret = bdrv_pread(bs->file, s->refcount_table_offset,
680
- s->refcount_table, refcount_table_size2);
681
+ s->refcount_table, refcount_table_size2, 0);
682
if (ret < 0) {
683
goto fail;
684
}
685
@@ -XXX,XX +XXX,XX @@ static int alloc_refcount_block(BlockDriverState *bs,
686
BLKDBG_EVENT(bs->file, BLKDBG_REFBLOCK_ALLOC_HOOKUP);
687
ret = bdrv_pwrite_sync(bs->file, s->refcount_table_offset +
688
refcount_table_index * REFTABLE_ENTRY_SIZE,
689
- &data64, sizeof(data64));
690
+ &data64, sizeof(data64), 0);
691
if (ret < 0) {
692
goto fail;
693
}
694
@@ -XXX,XX +XXX,XX @@ int64_t qcow2_refcount_area(BlockDriverState *bs, uint64_t start_offset,
695
696
BLKDBG_EVENT(bs->file, BLKDBG_REFBLOCK_ALLOC_WRITE_TABLE);
697
ret = bdrv_pwrite_sync(bs->file, table_offset, new_table,
698
- table_size * REFTABLE_ENTRY_SIZE);
699
+ table_size * REFTABLE_ENTRY_SIZE, 0);
700
if (ret < 0) {
701
goto fail;
702
}
703
@@ -XXX,XX +XXX,XX @@ int64_t qcow2_refcount_area(BlockDriverState *bs, uint64_t start_offset,
704
data.d32 = cpu_to_be32(table_clusters);
705
BLKDBG_EVENT(bs->file, BLKDBG_REFBLOCK_ALLOC_SWITCH_TABLE);
706
ret = bdrv_pwrite_sync(bs->file,
707
- offsetof(QCowHeader, refcount_table_offset),
708
- &data, sizeof(data));
709
+ offsetof(QCowHeader, refcount_table_offset), &data,
710
+ sizeof(data), 0);
711
if (ret < 0) {
712
goto fail;
713
}
714
@@ -XXX,XX +XXX,XX @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs,
715
}
716
l1_allocated = true;
717
718
- ret = bdrv_pread(bs->file, l1_table_offset, l1_table, l1_size2);
719
+ ret = bdrv_pread(bs->file, l1_table_offset, l1_table, l1_size2, 0);
720
if (ret < 0) {
721
goto fail;
722
}
723
@@ -XXX,XX +XXX,XX @@ fail:
724
cpu_to_be64s(&l1_table[i]);
725
}
726
727
- ret = bdrv_pwrite_sync(bs->file, l1_table_offset,
728
- l1_table, l1_size2);
729
+ ret = bdrv_pwrite_sync(bs->file, l1_table_offset, l1_table, l1_size2,
730
+ 0);
731
732
for (i = 0; i < l1_size; i++) {
733
be64_to_cpus(&l1_table[i]);
734
@@ -XXX,XX +XXX,XX @@ static int fix_l2_entry_by_zero(BlockDriverState *bs, BdrvCheckResult *res,
735
}
736
737
ret = bdrv_pwrite_sync(bs->file, l2e_offset, &l2_table[idx],
738
- l2_entry_size(s));
739
+ l2_entry_size(s), 0);
740
if (ret < 0) {
741
fprintf(stderr, "ERROR: Failed to overwrite L2 "
742
"table entry: %s\n", strerror(-ret));
743
@@ -XXX,XX +XXX,XX @@ static int check_refcounts_l2(BlockDriverState *bs, BdrvCheckResult *res,
744
bool metadata_overlap;
745
746
/* Read L2 table from disk */
747
- ret = bdrv_pread(bs->file, l2_offset, l2_table, l2_size_bytes);
748
+ ret = bdrv_pread(bs->file, l2_offset, l2_table, l2_size_bytes, 0);
749
if (ret < 0) {
750
fprintf(stderr, "ERROR: I/O error in check_refcounts_l2\n");
751
res->check_errors++;
752
@@ -XXX,XX +XXX,XX @@ static int check_refcounts_l1(BlockDriverState *bs,
753
}
754
755
/* Read L1 table entries from disk */
756
- ret = bdrv_pread(bs->file, l1_table_offset, l1_table, l1_size_bytes);
757
+ ret = bdrv_pread(bs->file, l1_table_offset, l1_table, l1_size_bytes, 0);
758
if (ret < 0) {
759
fprintf(stderr, "ERROR: I/O error in check_refcounts_l1\n");
760
res->check_errors++;
761
@@ -XXX,XX +XXX,XX @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res,
762
}
763
764
ret = bdrv_pread(bs->file, l2_offset, l2_table,
765
- s->l2_size * l2_entry_size(s));
766
+ s->l2_size * l2_entry_size(s), 0);
767
if (ret < 0) {
768
fprintf(stderr, "ERROR: Could not read L2 table: %s\n",
769
strerror(-ret));
770
@@ -XXX,XX +XXX,XX @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res,
771
goto fail;
772
}
773
774
- ret = bdrv_pwrite(bs->file, l2_offset, l2_table,
775
- s->cluster_size);
776
+ ret = bdrv_pwrite(bs->file, l2_offset, l2_table, s->cluster_size,
777
+ 0);
778
if (ret < 0) {
779
fprintf(stderr, "ERROR: Could not write L2 table: %s\n",
780
strerror(-ret));
781
@@ -XXX,XX +XXX,XX @@ static int rebuild_refcounts_write_refblocks(
782
refblock_index * s->cluster_size);
783
784
ret = bdrv_pwrite(bs->file, refblock_offset, on_disk_refblock,
785
- s->cluster_size);
786
+ s->cluster_size, 0);
787
if (ret < 0) {
788
error_setg_errno(errp, -ret, "ERROR writing refblock");
789
return ret;
790
@@ -XXX,XX +XXX,XX @@ static int rebuild_refcount_structure(BlockDriverState *bs,
791
792
assert(reftable_length < INT_MAX);
793
ret = bdrv_pwrite(bs->file, reftable_offset, on_disk_reftable,
794
- reftable_length);
795
+ reftable_length, 0);
796
if (ret < 0) {
797
error_setg_errno(errp, -ret, "ERROR writing reftable");
798
goto fail;
799
@@ -XXX,XX +XXX,XX @@ static int rebuild_refcount_structure(BlockDriverState *bs,
800
ret = bdrv_pwrite_sync(bs->file,
801
offsetof(QCowHeader, refcount_table_offset),
802
&reftable_offset_and_clusters,
803
- sizeof(reftable_offset_and_clusters));
804
+ sizeof(reftable_offset_and_clusters), 0);
805
if (ret < 0) {
806
error_setg_errno(errp, -ret, "ERROR setting reftable");
807
goto fail;
808
@@ -XXX,XX +XXX,XX @@ int qcow2_check_metadata_overlap(BlockDriverState *bs, int ign, int64_t offset,
809
return -ENOMEM;
810
}
811
812
- ret = bdrv_pread(bs->file, l1_ofs, l1, l1_sz2);
813
+ ret = bdrv_pread(bs->file, l1_ofs, l1, l1_sz2, 0);
814
if (ret < 0) {
815
g_free(l1);
816
return ret;
817
@@ -XXX,XX +XXX,XX @@ static int flush_refblock(BlockDriverState *bs, uint64_t **reftable,
818
return ret;
819
}
820
821
- ret = bdrv_pwrite(bs->file, offset, refblock, s->cluster_size);
822
+ ret = bdrv_pwrite(bs->file, offset, refblock, s->cluster_size, 0);
823
if (ret < 0) {
824
error_setg_errno(errp, -ret, "Failed to write refblock");
825
return ret;
826
@@ -XXX,XX +XXX,XX @@ int qcow2_change_refcount_order(BlockDriverState *bs, int refcount_order,
827
}
828
829
ret = bdrv_pwrite(bs->file, new_reftable_offset, new_reftable,
830
- new_reftable_size * REFTABLE_ENTRY_SIZE);
831
+ new_reftable_size * REFTABLE_ENTRY_SIZE, 0);
832
833
for (i = 0; i < new_reftable_size; i++) {
834
be64_to_cpus(&new_reftable[i]);
835
@@ -XXX,XX +XXX,XX @@ int qcow2_shrink_reftable(BlockDriverState *bs)
836
}
837
838
ret = bdrv_pwrite_sync(bs->file, s->refcount_table_offset, reftable_tmp,
839
- s->refcount_table_size * REFTABLE_ENTRY_SIZE);
840
+ s->refcount_table_size * REFTABLE_ENTRY_SIZE, 0);
841
/*
842
* If the write in the reftable failed the image may contain a partially
843
* overwritten reftable. In this case it would be better to clear the
844
diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
845
index XXXXXXX..XXXXXXX 100644
846
--- a/block/qcow2-snapshot.c
847
+++ b/block/qcow2-snapshot.c
848
@@ -XXX,XX +XXX,XX @@ static int qcow2_do_read_snapshots(BlockDriverState *bs, bool repair,
849
850
/* Read statically sized part of the snapshot header */
851
offset = ROUND_UP(offset, 8);
852
- ret = bdrv_pread(bs->file, offset, &h, sizeof(h));
853
+ ret = bdrv_pread(bs->file, offset, &h, sizeof(h), 0);
854
if (ret < 0) {
855
error_setg_errno(errp, -ret, "Failed to read snapshot table");
856
goto fail;
857
@@ -XXX,XX +XXX,XX @@ static int qcow2_do_read_snapshots(BlockDriverState *bs, bool repair,
858
859
/* Read known extra data */
860
ret = bdrv_pread(bs->file, offset, &extra,
861
- MIN(sizeof(extra), sn->extra_data_size));
862
+ MIN(sizeof(extra), sn->extra_data_size), 0);
863
if (ret < 0) {
864
error_setg_errno(errp, -ret, "Failed to read snapshot table");
865
goto fail;
866
@@ -XXX,XX +XXX,XX @@ static int qcow2_do_read_snapshots(BlockDriverState *bs, bool repair,
867
unknown_extra_data_size = sn->extra_data_size - sizeof(extra);
868
sn->unknown_extra_data = g_malloc(unknown_extra_data_size);
869
ret = bdrv_pread(bs->file, offset, sn->unknown_extra_data,
870
- unknown_extra_data_size);
871
+ unknown_extra_data_size, 0);
872
if (ret < 0) {
873
error_setg_errno(errp, -ret,
874
"Failed to read snapshot table");
875
@@ -XXX,XX +XXX,XX @@ static int qcow2_do_read_snapshots(BlockDriverState *bs, bool repair,
876
877
/* Read snapshot ID */
878
sn->id_str = g_malloc(id_str_size + 1);
879
- ret = bdrv_pread(bs->file, offset, sn->id_str, id_str_size);
880
+ ret = bdrv_pread(bs->file, offset, sn->id_str, id_str_size, 0);
881
if (ret < 0) {
882
error_setg_errno(errp, -ret, "Failed to read snapshot table");
883
goto fail;
884
@@ -XXX,XX +XXX,XX @@ static int qcow2_do_read_snapshots(BlockDriverState *bs, bool repair,
885
886
/* Read snapshot name */
887
sn->name = g_malloc(name_size + 1);
888
- ret = bdrv_pread(bs->file, offset, sn->name, name_size);
889
+ ret = bdrv_pread(bs->file, offset, sn->name, name_size, 0);
890
if (ret < 0) {
891
error_setg_errno(errp, -ret, "Failed to read snapshot table");
892
goto fail;
893
@@ -XXX,XX +XXX,XX @@ int qcow2_write_snapshots(BlockDriverState *bs)
894
h.name_size = cpu_to_be16(name_size);
895
offset = ROUND_UP(offset, 8);
896
897
- ret = bdrv_pwrite(bs->file, offset, &h, sizeof(h));
898
+ ret = bdrv_pwrite(bs->file, offset, &h, sizeof(h), 0);
899
if (ret < 0) {
900
goto fail;
901
}
902
offset += sizeof(h);
903
904
- ret = bdrv_pwrite(bs->file, offset, &extra, sizeof(extra));
905
+ ret = bdrv_pwrite(bs->file, offset, &extra, sizeof(extra), 0);
906
if (ret < 0) {
907
goto fail;
908
}
909
@@ -XXX,XX +XXX,XX @@ int qcow2_write_snapshots(BlockDriverState *bs)
910
assert(sn->unknown_extra_data);
911
912
ret = bdrv_pwrite(bs->file, offset, sn->unknown_extra_data,
913
- unknown_extra_data_size);
914
+ unknown_extra_data_size, 0);
915
if (ret < 0) {
916
goto fail;
917
}
918
offset += unknown_extra_data_size;
919
}
920
921
- ret = bdrv_pwrite(bs->file, offset, sn->id_str, id_str_size);
922
+ ret = bdrv_pwrite(bs->file, offset, sn->id_str, id_str_size, 0);
923
if (ret < 0) {
924
goto fail;
925
}
926
offset += id_str_size;
927
928
- ret = bdrv_pwrite(bs->file, offset, sn->name, name_size);
929
+ ret = bdrv_pwrite(bs->file, offset, sn->name, name_size, 0);
930
if (ret < 0) {
931
goto fail;
932
}
933
@@ -XXX,XX +XXX,XX @@ int qcow2_write_snapshots(BlockDriverState *bs)
934
header_data.snapshots_offset = cpu_to_be64(snapshots_offset);
935
936
ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, nb_snapshots),
937
- &header_data, sizeof(header_data));
938
+ &header_data, sizeof(header_data), 0);
939
if (ret < 0) {
940
goto fail;
941
}
942
@@ -XXX,XX +XXX,XX @@ int coroutine_fn qcow2_check_read_snapshot_table(BlockDriverState *bs,
943
944
/* qcow2_do_open() discards this information in check mode */
945
ret = bdrv_pread(bs->file, offsetof(QCowHeader, nb_snapshots),
946
- &snapshot_table_pointer, sizeof(snapshot_table_pointer));
947
+ &snapshot_table_pointer, sizeof(snapshot_table_pointer),
948
+ 0);
949
if (ret < 0) {
950
result->check_errors++;
951
fprintf(stderr, "ERROR failed to read the snapshot table pointer from "
952
@@ -XXX,XX +XXX,XX @@ int coroutine_fn qcow2_check_read_snapshot_table(BlockDriverState *bs,
953
snapshot_table_pointer.nb_snapshots = cpu_to_be32(s->nb_snapshots);
954
ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, nb_snapshots),
955
&snapshot_table_pointer.nb_snapshots,
956
- sizeof(snapshot_table_pointer.nb_snapshots));
957
+ sizeof(snapshot_table_pointer.nb_snapshots), 0);
958
if (ret < 0) {
959
result->check_errors++;
960
fprintf(stderr, "ERROR failed to update the snapshot count in the "
961
@@ -XXX,XX +XXX,XX @@ int qcow2_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info)
962
}
963
964
ret = bdrv_pwrite(bs->file, sn->l1_table_offset, l1_table,
965
- s->l1_size * L1E_SIZE);
966
+ s->l1_size * L1E_SIZE, 0);
967
if (ret < 0) {
968
goto fail;
969
}
970
@@ -XXX,XX +XXX,XX @@ int qcow2_snapshot_goto(BlockDriverState *bs, const char *snapshot_id)
971
goto fail;
972
}
973
974
- ret = bdrv_pread(bs->file, sn->l1_table_offset,
975
- sn_l1_table, sn_l1_bytes);
976
+ ret = bdrv_pread(bs->file, sn->l1_table_offset, sn_l1_table, sn_l1_bytes,
977
+ 0);
978
if (ret < 0) {
979
goto fail;
980
}
981
@@ -XXX,XX +XXX,XX @@ int qcow2_snapshot_goto(BlockDriverState *bs, const char *snapshot_id)
982
}
983
984
ret = bdrv_pwrite_sync(bs->file, s->l1_table_offset, sn_l1_table,
985
- cur_l1_bytes);
986
+ cur_l1_bytes, 0);
987
if (ret < 0) {
988
goto fail;
989
}
990
@@ -XXX,XX +XXX,XX @@ int qcow2_snapshot_load_tmp(BlockDriverState *bs,
991
return -ENOMEM;
992
}
993
994
- ret = bdrv_pread(bs->file, sn->l1_table_offset,
995
- new_l1_table, new_l1_bytes);
996
+ ret = bdrv_pread(bs->file, sn->l1_table_offset, new_l1_table,
997
+ new_l1_bytes, 0);
998
if (ret < 0) {
999
error_setg(errp, "Failed to read l1 table for snapshot");
1000
qemu_vfree(new_l1_table);
1001
diff --git a/block/qcow2.c b/block/qcow2.c
1002
index XXXXXXX..XXXXXXX 100644
1003
--- a/block/qcow2.c
1004
+++ b/block/qcow2.c
1005
@@ -XXX,XX +XXX,XX @@ static ssize_t qcow2_crypto_hdr_read_func(QCryptoBlock *block, size_t offset,
1006
return -1;
1007
}
1008
1009
- ret = bdrv_pread(bs->file,
1010
- s->crypto_header.offset + offset, buf, buflen);
1011
+ ret = bdrv_pread(bs->file, s->crypto_header.offset + offset, buf, buflen,
1012
+ 0);
1013
if (ret < 0) {
1014
error_setg_errno(errp, -ret, "Could not read encryption header");
1015
return -1;
1016
@@ -XXX,XX +XXX,XX @@ static ssize_t qcow2_crypto_hdr_write_func(QCryptoBlock *block, size_t offset,
1017
return -1;
1018
}
1019
1020
- ret = bdrv_pwrite(bs->file,
1021
- s->crypto_header.offset + offset, buf, buflen);
1022
+ ret = bdrv_pwrite(bs->file, s->crypto_header.offset + offset, buf, buflen,
1023
+ 0);
1024
if (ret < 0) {
1025
error_setg_errno(errp, -ret, "Could not read encryption header");
1026
return -1;
1027
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1028
printf("attempting to read extended header in offset %lu\n", offset);
1029
#endif
1030
1031
- ret = bdrv_pread(bs->file, offset, &ext, sizeof(ext));
1032
+ ret = bdrv_pread(bs->file, offset, &ext, sizeof(ext), 0);
1033
if (ret < 0) {
1034
error_setg_errno(errp, -ret, "qcow2_read_extension: ERROR: "
1035
"pread fail from offset %" PRIu64, offset);
1036
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1037
sizeof(bs->backing_format));
1038
return 2;
1039
}
1040
- ret = bdrv_pread(bs->file, offset, bs->backing_format, ext.len);
1041
+ ret = bdrv_pread(bs->file, offset, bs->backing_format, ext.len, 0);
1042
if (ret < 0) {
1043
error_setg_errno(errp, -ret, "ERROR: ext_backing_format: "
1044
"Could not read format name");
1045
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1046
case QCOW2_EXT_MAGIC_FEATURE_TABLE:
1047
if (p_feature_table != NULL) {
1048
void *feature_table = g_malloc0(ext.len + 2 * sizeof(Qcow2Feature));
1049
- ret = bdrv_pread(bs->file, offset , feature_table, ext.len);
1050
+ ret = bdrv_pread(bs->file, offset, feature_table, ext.len, 0);
1051
if (ret < 0) {
1052
error_setg_errno(errp, -ret, "ERROR: ext_feature_table: "
1053
"Could not read table");
1054
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1055
return -EINVAL;
1056
}
1057
1058
- ret = bdrv_pread(bs->file, offset, &s->crypto_header, ext.len);
1059
+ ret = bdrv_pread(bs->file, offset, &s->crypto_header, ext.len, 0);
1060
if (ret < 0) {
1061
error_setg_errno(errp, -ret,
1062
"Unable to read CRYPTO header extension");
1063
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1064
break;
1065
}
1066
1067
- ret = bdrv_pread(bs->file, offset, &bitmaps_ext, ext.len);
1068
+ ret = bdrv_pread(bs->file, offset, &bitmaps_ext, ext.len, 0);
1069
if (ret < 0) {
1070
error_setg_errno(errp, -ret, "bitmaps_ext: "
1071
"Could not read ext header");
1072
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1073
case QCOW2_EXT_MAGIC_DATA_FILE:
1074
{
1075
s->image_data_file = g_malloc0(ext.len + 1);
1076
- ret = bdrv_pread(bs->file, offset, s->image_data_file, ext.len);
1077
+ ret = bdrv_pread(bs->file, offset, s->image_data_file, ext.len, 0);
1078
if (ret < 0) {
1079
error_setg_errno(errp, -ret,
1080
"ERROR: Could not read data file name");
1081
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1082
uext->len = ext.len;
1083
QLIST_INSERT_HEAD(&s->unknown_header_ext, uext, next);
1084
1085
- ret = bdrv_pread(bs->file, offset , uext->data, uext->len);
1086
+ ret = bdrv_pread(bs->file, offset, uext->data, uext->len, 0);
1087
if (ret < 0) {
1088
error_setg_errno(errp, -ret, "ERROR: unknown extension: "
1089
"Could not read data");
1090
@@ -XXX,XX +XXX,XX @@ int qcow2_mark_dirty(BlockDriverState *bs)
1091
1092
val = cpu_to_be64(s->incompatible_features | QCOW2_INCOMPAT_DIRTY);
1093
ret = bdrv_pwrite(bs->file, offsetof(QCowHeader, incompatible_features),
1094
- &val, sizeof(val));
1095
+ &val, sizeof(val), 0);
1096
if (ret < 0) {
1097
return ret;
1098
}
1099
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow2_do_open(BlockDriverState *bs, QDict *options,
1100
uint64_t l1_vm_state_index;
1101
bool update_header = false;
1102
1103
- ret = bdrv_pread(bs->file, 0, &header, sizeof(header));
1104
+ ret = bdrv_pread(bs->file, 0, &header, sizeof(header), 0);
1105
if (ret < 0) {
1106
error_setg_errno(errp, -ret, "Could not read qcow2 header");
1107
goto fail;
1108
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow2_do_open(BlockDriverState *bs, QDict *options,
1109
s->unknown_header_fields_size = header.header_length - sizeof(header);
1110
s->unknown_header_fields = g_malloc(s->unknown_header_fields_size);
1111
ret = bdrv_pread(bs->file, sizeof(header), s->unknown_header_fields,
1112
- s->unknown_header_fields_size);
1113
+ s->unknown_header_fields_size, 0);
1114
if (ret < 0) {
1115
error_setg_errno(errp, -ret, "Could not read unknown qcow2 header "
1116
"fields");
1117
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow2_do_open(BlockDriverState *bs, QDict *options,
1118
goto fail;
1119
}
1120
ret = bdrv_pread(bs->file, s->l1_table_offset, s->l1_table,
1121
- s->l1_size * L1E_SIZE);
1122
+ s->l1_size * L1E_SIZE, 0);
1123
if (ret < 0) {
1124
error_setg_errno(errp, -ret, "Could not read L1 table");
1125
goto fail;
1126
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow2_do_open(BlockDriverState *bs, QDict *options,
1127
goto fail;
1128
}
1129
ret = bdrv_pread(bs->file, header.backing_file_offset,
1130
- bs->auto_backing_file, len);
1131
+ bs->auto_backing_file, len, 0);
1132
if (ret < 0) {
1133
error_setg_errno(errp, -ret, "Could not read backing file name");
1134
goto fail;
1135
@@ -XXX,XX +XXX,XX @@ int qcow2_update_header(BlockDriverState *bs)
1136
}
1137
1138
/* Write the new header */
1139
- ret = bdrv_pwrite(bs->file, 0, header, s->cluster_size);
1140
+ ret = bdrv_pwrite(bs->file, 0, header, s->cluster_size, 0);
1141
if (ret < 0) {
1142
goto fail;
1143
}
1144
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow2_co_truncate(BlockDriverState *bs, int64_t offset,
1145
1146
/* write updated header.size */
1147
offset = cpu_to_be64(offset);
1148
- ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, size),
1149
- &offset, sizeof(offset));
1150
+ ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, size), &offset,
1151
+ sizeof(offset), 0);
1152
if (ret < 0) {
1153
error_setg_errno(errp, -ret, "Failed to update the image size");
1154
goto fail;
1155
@@ -XXX,XX +XXX,XX @@ static int make_completely_empty(BlockDriverState *bs)
1156
l1_ofs_rt_ofs_cls.reftable_offset = cpu_to_be64(s->cluster_size);
1157
l1_ofs_rt_ofs_cls.reftable_clusters = cpu_to_be32(1);
1158
ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, l1_table_offset),
1159
- &l1_ofs_rt_ofs_cls, sizeof(l1_ofs_rt_ofs_cls));
1160
+ &l1_ofs_rt_ofs_cls, sizeof(l1_ofs_rt_ofs_cls), 0);
1161
if (ret < 0) {
1162
goto fail_broken_refcounts;
1163
}
1164
@@ -XXX,XX +XXX,XX @@ static int make_completely_empty(BlockDriverState *bs)
1165
1166
/* Enter the first refblock into the reftable */
1167
rt_entry = cpu_to_be64(2 * s->cluster_size);
1168
- ret = bdrv_pwrite_sync(bs->file, s->cluster_size,
1169
- &rt_entry, sizeof(rt_entry));
1170
+ ret = bdrv_pwrite_sync(bs->file, s->cluster_size, &rt_entry,
1171
+ sizeof(rt_entry), 0);
1172
if (ret < 0) {
1173
goto fail_broken_refcounts;
1174
}
1175
diff --git a/block/qed.c b/block/qed.c
1176
index XXXXXXX..XXXXXXX 100644
1177
--- a/block/qed.c
1178
+++ b/block/qed.c
1179
@@ -XXX,XX +XXX,XX @@ int qed_write_header_sync(BDRVQEDState *s)
1180
int ret;
1181
1182
qed_header_cpu_to_le(&s->header, &le);
1183
- ret = bdrv_pwrite(s->bs->file, 0, &le, sizeof(le));
1184
+ ret = bdrv_pwrite(s->bs->file, 0, &le, sizeof(le), 0);
1185
if (ret != sizeof(le)) {
1186
return ret;
1187
}
1188
@@ -XXX,XX +XXX,XX @@ static int qed_read_string(BdrvChild *file, uint64_t offset, size_t n,
1189
if (n >= buflen) {
1190
return -EINVAL;
1191
}
1192
- ret = bdrv_pread(file, offset, buf, n);
1193
+ ret = bdrv_pread(file, offset, buf, n, 0);
1194
if (ret < 0) {
1195
return ret;
1196
}
1197
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn bdrv_qed_do_open(BlockDriverState *bs, QDict *options,
1198
int64_t file_size;
1199
int ret;
1200
1201
- ret = bdrv_pread(bs->file, 0, &le_header, sizeof(le_header));
1202
+ ret = bdrv_pread(bs->file, 0, &le_header, sizeof(le_header), 0);
1203
if (ret < 0) {
1204
error_setg(errp, "Failed to read QED header");
1205
return ret;
1206
@@ -XXX,XX +XXX,XX @@ static int bdrv_qed_change_backing_file(BlockDriverState *bs,
1207
}
1208
1209
/* Write new header */
1210
- ret = bdrv_pwrite_sync(bs->file, 0, buffer, buffer_len);
1211
+ ret = bdrv_pwrite_sync(bs->file, 0, buffer, buffer_len, 0);
1212
g_free(buffer);
1213
if (ret == 0) {
1214
memcpy(&s->header, &new_header, sizeof(new_header));
1215
diff --git a/block/vdi.c b/block/vdi.c
1216
index XXXXXXX..XXXXXXX 100644
1217
--- a/block/vdi.c
1218
+++ b/block/vdi.c
1219
@@ -XXX,XX +XXX,XX @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags,
1220
1221
logout("\n");
1222
1223
- ret = bdrv_pread(bs->file, 0, &header, sizeof(header));
1224
+ ret = bdrv_pread(bs->file, 0, &header, sizeof(header), 0);
1225
if (ret < 0) {
1226
goto fail;
1227
}
1228
@@ -XXX,XX +XXX,XX @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags,
1229
}
1230
1231
ret = bdrv_pread(bs->file, header.offset_bmap, s->bmap,
1232
- bmap_size * SECTOR_SIZE);
1233
+ bmap_size * SECTOR_SIZE, 0);
1234
if (ret < 0) {
1235
goto fail_free_bmap;
1236
}
1237
@@ -XXX,XX +XXX,XX @@ vdi_co_pwritev(BlockDriverState *bs, int64_t offset, int64_t bytes,
1238
* so this full-cluster write does not overlap a partial write
1239
* of the same cluster, issued from the "else" branch.
1240
*/
1241
- ret = bdrv_pwrite(bs->file, data_offset, block, s->block_size);
1242
+ ret = bdrv_pwrite(bs->file, data_offset, block, s->block_size, 0);
1243
qemu_co_rwlock_unlock(&s->bmap_lock);
1244
} else {
1245
nonallocating_write:
1246
@@ -XXX,XX +XXX,XX @@ nonallocating_write:
1247
assert(VDI_IS_ALLOCATED(bmap_first));
1248
*header = s->header;
1249
vdi_header_to_le(header);
1250
- ret = bdrv_pwrite(bs->file, 0, header, sizeof(*header));
1251
+ ret = bdrv_pwrite(bs->file, 0, header, sizeof(*header), 0);
1252
g_free(header);
1253
1254
if (ret < 0) {
1255
@@ -XXX,XX +XXX,XX @@ nonallocating_write:
1256
logout("will write %u block map sectors starting from entry %u\n",
1257
n_sectors, bmap_first);
1258
ret = bdrv_pwrite(bs->file, offset * SECTOR_SIZE, base,
1259
- n_sectors * SECTOR_SIZE);
1260
+ n_sectors * SECTOR_SIZE, 0);
1261
}
1262
1263
return ret < 0 ? ret : 0;
1264
diff --git a/block/vhdx-log.c b/block/vhdx-log.c
1265
index XXXXXXX..XXXXXXX 100644
1266
--- a/block/vhdx-log.c
1267
+++ b/block/vhdx-log.c
1268
@@ -XXX,XX +XXX,XX @@ static int vhdx_log_peek_hdr(BlockDriverState *bs, VHDXLogEntries *log,
1269
1270
offset = log->offset + read;
1271
1272
- ret = bdrv_pread(bs->file, offset, hdr, sizeof(VHDXLogEntryHeader));
1273
+ ret = bdrv_pread(bs->file, offset, hdr, sizeof(VHDXLogEntryHeader), 0);
1274
if (ret < 0) {
1275
goto exit;
1276
}
1277
@@ -XXX,XX +XXX,XX @@ static int vhdx_log_read_sectors(BlockDriverState *bs, VHDXLogEntries *log,
1278
}
1279
offset = log->offset + read;
1280
1281
- ret = bdrv_pread(bs->file, offset, buffer, VHDX_LOG_SECTOR_SIZE);
1282
+ ret = bdrv_pread(bs->file, offset, buffer, VHDX_LOG_SECTOR_SIZE, 0);
1283
if (ret < 0) {
1284
goto exit;
1285
}
1286
@@ -XXX,XX +XXX,XX @@ static int vhdx_log_write_sectors(BlockDriverState *bs, VHDXLogEntries *log,
1287
/* full */
1288
break;
1289
}
1290
- ret = bdrv_pwrite(bs->file, offset, buffer_tmp,
1291
- VHDX_LOG_SECTOR_SIZE);
1292
+ ret = bdrv_pwrite(bs->file, offset, buffer_tmp, VHDX_LOG_SECTOR_SIZE,
1293
+ 0);
1294
if (ret < 0) {
1295
goto exit;
1296
}
1297
@@ -XXX,XX +XXX,XX @@ static int vhdx_log_flush_desc(BlockDriverState *bs, VHDXLogDescriptor *desc,
1298
/* count is only > 1 if we are writing zeroes */
1299
for (i = 0; i < count; i++) {
1300
ret = bdrv_pwrite_sync(bs->file, file_offset, buffer,
1301
- VHDX_LOG_SECTOR_SIZE);
1302
+ VHDX_LOG_SECTOR_SIZE, 0);
1303
if (ret < 0) {
1304
goto exit;
1305
}
1306
@@ -XXX,XX +XXX,XX @@ static int vhdx_log_write(BlockDriverState *bs, BDRVVHDXState *s,
1307
if (i == 0 && leading_length) {
1308
/* partial sector at the front of the buffer */
1309
ret = bdrv_pread(bs->file, file_offset, merged_sector,
1310
- VHDX_LOG_SECTOR_SIZE);
1311
+ VHDX_LOG_SECTOR_SIZE, 0);
1312
if (ret < 0) {
1313
goto exit;
1314
}
1315
@@ -XXX,XX +XXX,XX @@ static int vhdx_log_write(BlockDriverState *bs, BDRVVHDXState *s,
1316
sector_write = merged_sector;
1317
} else if (i == sectors - 1 && trailing_length) {
1318
/* partial sector at the end of the buffer */
1319
- ret = bdrv_pread(bs->file,
1320
- file_offset,
1321
- merged_sector + trailing_length,
1322
- VHDX_LOG_SECTOR_SIZE - trailing_length);
1323
+ ret = bdrv_pread(bs->file, file_offset,
1324
+ merged_sector + trailing_length,
1325
+ VHDX_LOG_SECTOR_SIZE - trailing_length, 0);
1326
if (ret < 0) {
1327
goto exit;
1328
}
1329
diff --git a/block/vhdx.c b/block/vhdx.c
1330
index XXXXXXX..XXXXXXX 100644
1331
--- a/block/vhdx.c
1332
+++ b/block/vhdx.c
1333
@@ -XXX,XX +XXX,XX @@ static int vhdx_write_header(BdrvChild *file, VHDXHeader *hdr,
1334
buffer = qemu_blockalign(bs_file, VHDX_HEADER_SIZE);
1335
if (read) {
1336
/* if true, we can't assume the extra reserved bytes are 0 */
1337
- ret = bdrv_pread(file, offset, buffer, VHDX_HEADER_SIZE);
1338
+ ret = bdrv_pread(file, offset, buffer, VHDX_HEADER_SIZE, 0);
1339
if (ret < 0) {
1340
goto exit;
1341
}
1342
@@ -XXX,XX +XXX,XX @@ static int vhdx_write_header(BdrvChild *file, VHDXHeader *hdr,
1343
vhdx_header_le_export(hdr, header_le);
1344
vhdx_update_checksum(buffer, VHDX_HEADER_SIZE,
1345
offsetof(VHDXHeader, checksum));
1346
- ret = bdrv_pwrite_sync(file, offset, header_le, sizeof(VHDXHeader));
1347
+ ret = bdrv_pwrite_sync(file, offset, header_le, sizeof(VHDXHeader), 0);
1348
1349
exit:
1350
qemu_vfree(buffer);
1351
@@ -XXX,XX +XXX,XX @@ static void vhdx_parse_header(BlockDriverState *bs, BDRVVHDXState *s,
1352
/* We have to read the whole VHDX_HEADER_SIZE instead of
1353
* sizeof(VHDXHeader), because the checksum is over the whole
1354
* region */
1355
- ret = bdrv_pread(bs->file, VHDX_HEADER1_OFFSET, buffer,
1356
- VHDX_HEADER_SIZE);
1357
+ ret = bdrv_pread(bs->file, VHDX_HEADER1_OFFSET, buffer, VHDX_HEADER_SIZE,
1358
+ 0);
1359
if (ret < 0) {
1360
goto fail;
1361
}
1362
@@ -XXX,XX +XXX,XX @@ static void vhdx_parse_header(BlockDriverState *bs, BDRVVHDXState *s,
1363
}
1364
}
1365
1366
- ret = bdrv_pread(bs->file, VHDX_HEADER2_OFFSET, buffer,
1367
- VHDX_HEADER_SIZE);
1368
+ ret = bdrv_pread(bs->file, VHDX_HEADER2_OFFSET, buffer, VHDX_HEADER_SIZE,
1369
+ 0);
1370
if (ret < 0) {
1371
goto fail;
1372
}
1373
@@ -XXX,XX +XXX,XX @@ static int vhdx_open_region_tables(BlockDriverState *bs, BDRVVHDXState *s)
1374
buffer = qemu_blockalign(bs, VHDX_HEADER_BLOCK_SIZE);
1375
1376
ret = bdrv_pread(bs->file, VHDX_REGION_TABLE_OFFSET, buffer,
1377
- VHDX_HEADER_BLOCK_SIZE);
1378
+ VHDX_HEADER_BLOCK_SIZE, 0);
1379
if (ret < 0) {
1380
goto fail;
1381
}
1382
@@ -XXX,XX +XXX,XX @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s)
1383
buffer = qemu_blockalign(bs, VHDX_METADATA_TABLE_MAX_SIZE);
1384
1385
ret = bdrv_pread(bs->file, s->metadata_rt.file_offset, buffer,
1386
- VHDX_METADATA_TABLE_MAX_SIZE);
1387
+ VHDX_METADATA_TABLE_MAX_SIZE, 0);
1388
if (ret < 0) {
1389
goto exit;
1390
}
1391
@@ -XXX,XX +XXX,XX @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s)
1392
s->metadata_entries.file_parameters_entry.offset
1393
+ s->metadata_rt.file_offset,
1394
&s->params,
1395
- sizeof(s->params));
1396
+ sizeof(s->params),
1397
+ 0);
1398
1399
if (ret < 0) {
1400
goto exit;
1401
@@ -XXX,XX +XXX,XX @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s)
1402
s->metadata_entries.virtual_disk_size_entry.offset
1403
+ s->metadata_rt.file_offset,
1404
&s->virtual_disk_size,
1405
- sizeof(uint64_t));
1406
+ sizeof(uint64_t),
1407
+ 0);
1408
if (ret < 0) {
1409
goto exit;
1410
}
1411
@@ -XXX,XX +XXX,XX @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s)
1412
s->metadata_entries.logical_sector_size_entry.offset
1413
+ s->metadata_rt.file_offset,
1414
&s->logical_sector_size,
1415
- sizeof(uint32_t));
1416
+ sizeof(uint32_t),
1417
+ 0);
1418
if (ret < 0) {
1419
goto exit;
1420
}
1421
@@ -XXX,XX +XXX,XX @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s)
1422
s->metadata_entries.phys_sector_size_entry.offset
1423
+ s->metadata_rt.file_offset,
1424
&s->physical_sector_size,
1425
- sizeof(uint32_t));
1426
+ sizeof(uint32_t),
1427
+ 0);
1428
if (ret < 0) {
1429
goto exit;
1430
}
1431
@@ -XXX,XX +XXX,XX @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags,
1432
QLIST_INIT(&s->regions);
1433
1434
/* validate the file signature */
1435
- ret = bdrv_pread(bs->file, 0, &signature, sizeof(uint64_t));
1436
+ ret = bdrv_pread(bs->file, 0, &signature, sizeof(uint64_t), 0);
1437
if (ret < 0) {
1438
goto fail;
1439
}
1440
@@ -XXX,XX +XXX,XX @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags,
1441
goto fail;
1442
}
1443
1444
- ret = bdrv_pread(bs->file, s->bat_offset, s->bat, s->bat_rt.length);
1445
+ ret = bdrv_pread(bs->file, s->bat_offset, s->bat, s->bat_rt.length, 0);
1446
if (ret < 0) {
1447
goto fail;
1448
}
1449
diff --git a/block/vmdk.c b/block/vmdk.c
1450
index XXXXXXX..XXXXXXX 100644
1451
--- a/block/vmdk.c
1452
+++ b/block/vmdk.c
1453
@@ -XXX,XX +XXX,XX @@ static int vmdk_read_cid(BlockDriverState *bs, int parent, uint32_t *pcid)
1454
int ret;
1455
1456
desc = g_malloc0(DESC_SIZE);
1457
- ret = bdrv_pread(bs->file, s->desc_offset, desc, DESC_SIZE);
1458
+ ret = bdrv_pread(bs->file, s->desc_offset, desc, DESC_SIZE, 0);
1459
if (ret < 0) {
1460
goto out;
1461
}
1462
@@ -XXX,XX +XXX,XX @@ static int vmdk_write_cid(BlockDriverState *bs, uint32_t cid)
1463
1464
desc = g_malloc0(DESC_SIZE);
1465
tmp_desc = g_malloc0(DESC_SIZE);
1466
- ret = bdrv_pread(bs->file, s->desc_offset, desc, DESC_SIZE);
1467
+ ret = bdrv_pread(bs->file, s->desc_offset, desc, DESC_SIZE, 0);
1468
if (ret < 0) {
1469
goto out;
1470
}
1471
@@ -XXX,XX +XXX,XX @@ static int vmdk_write_cid(BlockDriverState *bs, uint32_t cid)
1472
pstrcat(desc, DESC_SIZE, tmp_desc);
1473
}
1474
1475
- ret = bdrv_pwrite_sync(bs->file, s->desc_offset, desc, DESC_SIZE);
1476
+ ret = bdrv_pwrite_sync(bs->file, s->desc_offset, desc, DESC_SIZE, 0);
1477
1478
out:
1479
g_free(desc);
1480
@@ -XXX,XX +XXX,XX @@ static int vmdk_parent_open(BlockDriverState *bs)
1481
int ret;
1482
1483
desc = g_malloc0(DESC_SIZE + 1);
1484
- ret = bdrv_pread(bs->file, s->desc_offset, desc, DESC_SIZE);
1485
+ ret = bdrv_pread(bs->file, s->desc_offset, desc, DESC_SIZE, 0);
1486
if (ret < 0) {
1487
goto out;
1488
}
1489
@@ -XXX,XX +XXX,XX @@ static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent,
1490
return -ENOMEM;
1491
}
1492
1493
- ret = bdrv_pread(extent->file,
1494
- extent->l1_table_offset,
1495
- extent->l1_table,
1496
- l1_size);
1497
+ ret = bdrv_pread(extent->file, extent->l1_table_offset, extent->l1_table,
1498
+ l1_size, 0);
1499
if (ret < 0) {
1500
bdrv_refresh_filename(extent->file->bs);
1501
error_setg_errno(errp, -ret,
1502
@@ -XXX,XX +XXX,XX @@ static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent,
1503
ret = -ENOMEM;
1504
goto fail_l1;
1505
}
1506
- ret = bdrv_pread(extent->file,
1507
- extent->l1_backup_table_offset,
1508
- extent->l1_backup_table,
1509
- l1_size);
1510
+ ret = bdrv_pread(extent->file, extent->l1_backup_table_offset,
1511
+ extent->l1_backup_table, l1_size, 0);
1512
if (ret < 0) {
1513
bdrv_refresh_filename(extent->file->bs);
1514
error_setg_errno(errp, -ret,
1515
@@ -XXX,XX +XXX,XX @@ static int vmdk_open_vmfs_sparse(BlockDriverState *bs,
1516
VMDK3Header header;
1517
VmdkExtent *extent = NULL;
1518
1519
- ret = bdrv_pread(file, sizeof(magic), &header, sizeof(header));
1520
+ ret = bdrv_pread(file, sizeof(magic), &header, sizeof(header), 0);
1521
if (ret < 0) {
1522
bdrv_refresh_filename(file->bs);
1523
error_setg_errno(errp, -ret,
1524
@@ -XXX,XX +XXX,XX @@ static int vmdk_open_se_sparse(BlockDriverState *bs,
1525
1526
assert(sizeof(const_header) == SECTOR_SIZE);
1527
1528
- ret = bdrv_pread(file, 0, &const_header, sizeof(const_header));
1529
+ ret = bdrv_pread(file, 0, &const_header, sizeof(const_header), 0);
1530
if (ret < 0) {
1531
bdrv_refresh_filename(file->bs);
1532
error_setg_errno(errp, -ret,
1533
@@ -XXX,XX +XXX,XX @@ static int vmdk_open_se_sparse(BlockDriverState *bs,
1534
1535
assert(sizeof(volatile_header) == SECTOR_SIZE);
1536
1537
- ret = bdrv_pread(file,
1538
- const_header.volatile_header_offset * SECTOR_SIZE,
1539
- &volatile_header, sizeof(volatile_header));
1540
+ ret = bdrv_pread(file, const_header.volatile_header_offset * SECTOR_SIZE,
1541
+ &volatile_header, sizeof(volatile_header), 0);
1542
if (ret < 0) {
1543
bdrv_refresh_filename(file->bs);
1544
error_setg_errno(errp, -ret,
1545
@@ -XXX,XX +XXX,XX @@ static char *vmdk_read_desc(BdrvChild *file, uint64_t desc_offset, Error **errp)
1546
size = MIN(size, (1 << 20) - 1); /* avoid unbounded allocation */
1547
buf = g_malloc(size + 1);
1548
1549
- ret = bdrv_pread(file, desc_offset, buf, size);
1550
+ ret = bdrv_pread(file, desc_offset, buf, size, 0);
1551
if (ret < 0) {
1552
error_setg_errno(errp, -ret, "Could not read from file");
1553
g_free(buf);
1554
@@ -XXX,XX +XXX,XX @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
1555
int64_t l1_backup_offset = 0;
1556
bool compressed;
1557
1558
- ret = bdrv_pread(file, sizeof(magic), &header, sizeof(header));
1559
+ ret = bdrv_pread(file, sizeof(magic), &header, sizeof(header), 0);
1560
if (ret < 0) {
1561
bdrv_refresh_filename(file->bs);
1562
error_setg_errno(errp, -ret,
1563
@@ -XXX,XX +XXX,XX @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
1564
} QEMU_PACKED eos_marker;
1565
} QEMU_PACKED footer;
1566
1567
- ret = bdrv_pread(file,
1568
- bs->file->bs->total_sectors * 512 - 1536,
1569
- &footer, sizeof(footer));
1570
+ ret = bdrv_pread(file, bs->file->bs->total_sectors * 512 - 1536,
1571
+ &footer, sizeof(footer), 0);
1572
if (ret < 0) {
1573
error_setg_errno(errp, -ret, "Failed to read footer");
1574
return ret;
1575
@@ -XXX,XX +XXX,XX @@ static int get_whole_cluster(BlockDriverState *bs,
1576
/* qcow2 emits this on bs->file instead of bs->backing */
1577
BLKDBG_EVENT(extent->file, BLKDBG_COW_READ);
1578
ret = bdrv_pread(bs->backing, offset, whole_grain,
1579
- skip_start_bytes);
1580
+ skip_start_bytes, 0);
1581
if (ret < 0) {
1582
ret = VMDK_ERROR;
1583
goto exit;
1584
@@ -XXX,XX +XXX,XX @@ static int get_whole_cluster(BlockDriverState *bs,
1585
}
1586
BLKDBG_EVENT(extent->file, BLKDBG_COW_WRITE);
1587
ret = bdrv_pwrite(extent->file, cluster_offset, whole_grain,
1588
- skip_start_bytes);
1589
+ skip_start_bytes, 0);
1590
if (ret < 0) {
1591
ret = VMDK_ERROR;
1592
goto exit;
1593
@@ -XXX,XX +XXX,XX @@ static int get_whole_cluster(BlockDriverState *bs,
1594
BLKDBG_EVENT(extent->file, BLKDBG_COW_READ);
1595
ret = bdrv_pread(bs->backing, offset + skip_end_bytes,
1596
whole_grain + skip_end_bytes,
1597
- cluster_bytes - skip_end_bytes);
1598
+ cluster_bytes - skip_end_bytes, 0);
1599
if (ret < 0) {
1600
ret = VMDK_ERROR;
1601
goto exit;
1602
@@ -XXX,XX +XXX,XX @@ static int get_whole_cluster(BlockDriverState *bs,
1603
BLKDBG_EVENT(extent->file, BLKDBG_COW_WRITE);
1604
ret = bdrv_pwrite(extent->file, cluster_offset + skip_end_bytes,
1605
whole_grain + skip_end_bytes,
1606
- cluster_bytes - skip_end_bytes);
1607
+ cluster_bytes - skip_end_bytes, 0);
1608
if (ret < 0) {
1609
ret = VMDK_ERROR;
1610
goto exit;
1611
@@ -XXX,XX +XXX,XX @@ static int vmdk_L2update(VmdkExtent *extent, VmdkMetaData *m_data,
1612
if (bdrv_pwrite(extent->file,
1613
((int64_t)m_data->l2_offset * 512)
1614
+ (m_data->l2_index * sizeof(offset)),
1615
- &offset, sizeof(offset)) < 0) {
1616
+ &offset, sizeof(offset), 0) < 0) {
1617
return VMDK_ERROR;
1618
}
1619
/* update backup L2 table */
1620
@@ -XXX,XX +XXX,XX @@ static int vmdk_L2update(VmdkExtent *extent, VmdkMetaData *m_data,
1621
if (bdrv_pwrite(extent->file,
1622
((int64_t)m_data->l2_offset * 512)
1623
+ (m_data->l2_index * sizeof(offset)),
1624
- &offset, sizeof(offset)) < 0) {
1625
+ &offset, sizeof(offset), 0) < 0) {
1626
return VMDK_ERROR;
1627
}
1628
}
1629
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
1630
if (bdrv_pread(extent->file,
1631
(int64_t)l2_offset * 512,
1632
l2_table,
1633
- l2_size_bytes
1634
+ l2_size_bytes,
1635
+ 0
1636
) != l2_size_bytes) {
1637
return VMDK_ERROR;
1638
}
1639
@@ -XXX,XX +XXX,XX @@ static int vmdk_read_extent(VmdkExtent *extent, int64_t cluster_offset,
1640
cluster_buf = g_malloc(buf_bytes);
1641
uncomp_buf = g_malloc(cluster_bytes);
1642
BLKDBG_EVENT(extent->file, BLKDBG_READ_COMPRESSED);
1643
- ret = bdrv_pread(extent->file,
1644
- cluster_offset,
1645
- cluster_buf, buf_bytes);
1646
+ ret = bdrv_pread(extent->file, cluster_offset, cluster_buf, buf_bytes, 0);
1647
if (ret < 0) {
1648
goto out;
1649
}
1650
diff --git a/block/vpc.c b/block/vpc.c
1651
index XXXXXXX..XXXXXXX 100644
1652
--- a/block/vpc.c
1653
+++ b/block/vpc.c
1654
@@ -XXX,XX +XXX,XX @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags,
1655
goto fail;
1656
}
1657
1658
- ret = bdrv_pread(bs->file, 0, &s->footer, sizeof(s->footer));
1659
+ ret = bdrv_pread(bs->file, 0, &s->footer, sizeof(s->footer), 0);
1660
if (ret < 0) {
1661
error_setg(errp, "Unable to read VHD header");
1662
goto fail;
1663
@@ -XXX,XX +XXX,XX @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags,
1664
}
1665
1666
/* If a fixed disk, the footer is found only at the end of the file */
1667
- ret = bdrv_pread(bs->file, offset - sizeof(*footer),
1668
- footer, sizeof(*footer));
1669
+ ret = bdrv_pread(bs->file, offset - sizeof(*footer), footer,
1670
+ sizeof(*footer), 0);
1671
if (ret < 0) {
1672
goto fail;
1673
}
1674
@@ -XXX,XX +XXX,XX @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags,
1675
1676
if (disk_type == VHD_DYNAMIC) {
1677
ret = bdrv_pread(bs->file, be64_to_cpu(footer->data_offset),
1678
- &dyndisk_header, sizeof(dyndisk_header));
1679
+ &dyndisk_header, sizeof(dyndisk_header), 0);
1680
if (ret < 0) {
1681
error_setg(errp, "Error reading dynamic VHD header");
1682
goto fail;
1683
@@ -XXX,XX +XXX,XX @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags,
1684
s->bat_offset = be64_to_cpu(dyndisk_header.table_offset);
1685
1686
ret = bdrv_pread(bs->file, s->bat_offset, s->pagetable,
1687
- pagetable_size);
1688
+ pagetable_size, 0);
1689
if (ret < 0) {
1690
error_setg(errp, "Error reading pagetable");
1691
goto fail;
1692
@@ -XXX,XX +XXX,XX @@ static inline int64_t get_image_offset(BlockDriverState *bs, uint64_t offset,
1693
1694
s->last_bitmap_offset = bitmap_offset;
1695
memset(bitmap, 0xff, s->bitmap_size);
1696
- r = bdrv_pwrite_sync(bs->file, bitmap_offset, bitmap, s->bitmap_size);
1697
+ r = bdrv_pwrite_sync(bs->file, bitmap_offset, bitmap, s->bitmap_size,
1698
+ 0);
1699
if (r < 0) {
1700
*err = r;
1701
return -2;
1702
@@ -XXX,XX +XXX,XX @@ static int rewrite_footer(BlockDriverState *bs)
1703
BDRVVPCState *s = bs->opaque;
1704
int64_t offset = s->free_data_block_offset;
1705
1706
- ret = bdrv_pwrite_sync(bs->file, offset, &s->footer, sizeof(s->footer));
1707
+ ret = bdrv_pwrite_sync(bs->file, offset, &s->footer, sizeof(s->footer), 0);
1708
if (ret < 0)
1709
return ret;
1710
1711
@@ -XXX,XX +XXX,XX @@ static int64_t alloc_block(BlockDriverState *bs, int64_t offset)
1712
/* Initialize the block's bitmap */
1713
memset(bitmap, 0xff, s->bitmap_size);
1714
ret = bdrv_pwrite_sync(bs->file, s->free_data_block_offset, bitmap,
1715
- s->bitmap_size);
1716
+ s->bitmap_size, 0);
1717
if (ret < 0) {
1718
return ret;
1719
}
1720
@@ -XXX,XX +XXX,XX @@ static int64_t alloc_block(BlockDriverState *bs, int64_t offset)
1721
/* Write BAT entry to disk */
1722
bat_offset = s->bat_offset + (4 * index);
1723
bat_value = cpu_to_be32(s->pagetable[index]);
1724
- ret = bdrv_pwrite_sync(bs->file, bat_offset, &bat_value, 4);
1725
+ ret = bdrv_pwrite_sync(bs->file, bat_offset, &bat_value, 4, 0);
1726
if (ret < 0)
1727
goto fail;
1728
1729
diff --git a/block/vvfat.c b/block/vvfat.c
1730
index XXXXXXX..XXXXXXX 100644
1731
--- a/block/vvfat.c
1732
+++ b/block/vvfat.c
1733
@@ -XXX,XX +XXX,XX @@ static int vvfat_read(BlockDriverState *bs, int64_t sector_num,
1734
" allocated\n", sector_num,
1735
n >> BDRV_SECTOR_BITS));
1736
if (bdrv_pread(s->qcow, sector_num * BDRV_SECTOR_SIZE,
1737
- buf + i * 0x200, n) < 0) {
1738
+ buf + i * 0x200, n, 0) < 0) {
1739
return -1;
1740
}
1741
i += (n >> BDRV_SECTOR_BITS) - 1;
1742
@@ -XXX,XX +XXX,XX @@ static uint32_t get_cluster_count_for_direntry(BDRVVVFATState* s,
1743
return -1;
1744
}
1745
res = bdrv_pwrite(s->qcow, offset * BDRV_SECTOR_SIZE,
1746
- s->cluster_buffer, BDRV_SECTOR_SIZE);
1747
+ s->cluster_buffer, BDRV_SECTOR_SIZE,
1748
+ 0);
1749
if (res < 0) {
1750
return -2;
1751
}
1752
@@ -XXX,XX +XXX,XX @@ DLOG(checkpoint());
1753
*/
1754
DLOG(fprintf(stderr, "Write to qcow backend: %d + %d\n", (int)sector_num, nb_sectors));
1755
ret = bdrv_pwrite(s->qcow, sector_num * BDRV_SECTOR_SIZE, buf,
1756
- nb_sectors * BDRV_SECTOR_SIZE);
1757
+ nb_sectors * BDRV_SECTOR_SIZE, 0);
1758
if (ret < 0) {
1759
fprintf(stderr, "Error writing to qcow backend\n");
1760
return ret;
1761
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
1762
index XXXXXXX..XXXXXXX 100644
1763
--- a/tests/unit/test-block-iothread.c
1764
+++ b/tests/unit/test-block-iothread.c
1765
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_pread(BdrvChild *c)
1766
int ret;
1767
1768
/* Success */
1769
- ret = bdrv_pread(c, 0, buf, sizeof(buf));
1770
+ ret = bdrv_pread(c, 0, buf, sizeof(buf), 0);
1771
g_assert_cmpint(ret, ==, 512);
1772
1773
/* Early error: Negative offset */
1774
- ret = bdrv_pread(c, -2, buf, sizeof(buf));
1775
+ ret = bdrv_pread(c, -2, buf, sizeof(buf), 0);
1776
g_assert_cmpint(ret, ==, -EIO);
1777
}
1778
1779
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_pwrite(BdrvChild *c)
1780
int ret;
1781
1782
/* Success */
1783
- ret = bdrv_pwrite(c, 0, buf, sizeof(buf));
1784
+ ret = bdrv_pwrite(c, 0, buf, sizeof(buf), 0);
1785
g_assert_cmpint(ret, ==, 512);
1786
1787
/* Early error: Negative offset */
1788
- ret = bdrv_pwrite(c, -2, buf, sizeof(buf));
1789
+ ret = bdrv_pwrite(c, -2, buf, sizeof(buf), 0);
1790
g_assert_cmpint(ret, ==, -EIO);
1791
}
1792
1793
--
1794
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Swap 'buf' and 'bytes' around for consistency with
4
bdrv_co_{pread,pwrite}(), and in preparation to implement these
5
functions using generated_co_wrapper.
6
7
Callers were updated using this Coccinelle script:
8
9
@@ expression child, offset, buf, bytes, flags; @@
10
- bdrv_pread(child, offset, buf, bytes, flags)
11
+ bdrv_pread(child, offset, bytes, buf, flags)
12
13
@@ expression child, offset, buf, bytes, flags; @@
14
- bdrv_pwrite(child, offset, buf, bytes, flags)
15
+ bdrv_pwrite(child, offset, bytes, buf, flags)
16
17
@@ expression child, offset, buf, bytes, flags; @@
18
- bdrv_pwrite_sync(child, offset, buf, bytes, flags)
19
+ bdrv_pwrite_sync(child, offset, bytes, buf, flags)
20
21
Resulting overly-long lines were then fixed by hand.
22
23
Signed-off-by: Alberto Faria <afaria@redhat.com>
24
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
25
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
26
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
27
Message-Id: <20220609152744.3891847-3-afaria@redhat.com>
28
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
29
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
30
---
31
include/block/block-io.h | 10 +++---
32
block/blklogwrites.c | 6 ++--
33
block/bochs.c | 10 +++---
34
block/cloop.c | 10 +++---
35
block/crypto.c | 4 +--
36
block/dmg.c | 26 +++++++--------
37
block/io.c | 12 +++----
38
block/parallels-ext.c | 6 ++--
39
block/parallels.c | 10 +++---
40
block/qcow.c | 34 +++++++++----------
41
block/qcow2-bitmap.c | 14 ++++----
42
block/qcow2-cache.c | 8 ++---
43
block/qcow2-cluster.c | 22 ++++++-------
44
block/qcow2-refcount.c | 56 +++++++++++++++++---------------
45
block/qcow2-snapshot.c | 48 +++++++++++++--------------
46
block/qcow2.c | 47 ++++++++++++++-------------
47
block/qed.c | 8 ++---
48
block/vdi.c | 14 ++++----
49
block/vhdx-log.c | 18 +++++-----
50
block/vhdx.c | 28 ++++++++--------
51
block/vmdk.c | 50 ++++++++++++++--------------
52
block/vpc.c | 22 ++++++-------
53
block/vvfat.c | 10 +++---
54
tests/unit/test-block-iothread.c | 8 ++---
55
24 files changed, 242 insertions(+), 239 deletions(-)
56
57
diff --git a/include/block/block-io.h b/include/block/block-io.h
58
index XXXXXXX..XXXXXXX 100644
59
--- a/include/block/block-io.h
60
+++ b/include/block/block-io.h
61
@@ -XXX,XX +XXX,XX @@
62
int bdrv_pwrite_zeroes(BdrvChild *child, int64_t offset,
63
int64_t bytes, BdrvRequestFlags flags);
64
int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags);
65
-int bdrv_pread(BdrvChild *child, int64_t offset, void *buf, int64_t bytes,
66
+int bdrv_pread(BdrvChild *child, int64_t offset, int64_t bytes, void *buf,
67
BdrvRequestFlags flags);
68
-int bdrv_pwrite(BdrvChild *child, int64_t offset, const void *buf,
69
- int64_t bytes, BdrvRequestFlags flags);
70
-int bdrv_pwrite_sync(BdrvChild *child, int64_t offset,
71
- const void *buf, int64_t bytes, BdrvRequestFlags flags);
72
+int bdrv_pwrite(BdrvChild *child, int64_t offset, int64_t bytes,
73
+ const void *buf, BdrvRequestFlags flags);
74
+int bdrv_pwrite_sync(BdrvChild *child, int64_t offset, int64_t bytes,
75
+ const void *buf, BdrvRequestFlags flags);
76
/*
77
* Efficiently zero a region of the disk image. Note that this is a regular
78
* I/O request like read or write and should have a reasonable size. This
79
diff --git a/block/blklogwrites.c b/block/blklogwrites.c
80
index XXXXXXX..XXXXXXX 100644
81
--- a/block/blklogwrites.c
82
+++ b/block/blklogwrites.c
83
@@ -XXX,XX +XXX,XX @@ static uint64_t blk_log_writes_find_cur_log_sector(BdrvChild *log,
84
struct log_write_entry cur_entry;
85
86
while (cur_idx < nr_entries) {
87
- int read_ret = bdrv_pread(log, cur_sector << sector_bits, &cur_entry,
88
- sizeof(cur_entry), 0);
89
+ int read_ret = bdrv_pread(log, cur_sector << sector_bits,
90
+ sizeof(cur_entry), &cur_entry, 0);
91
if (read_ret < 0) {
92
error_setg_errno(errp, -read_ret,
93
"Failed to read log entry %"PRIu64, cur_idx);
94
@@ -XXX,XX +XXX,XX @@ static int blk_log_writes_open(BlockDriverState *bs, QDict *options, int flags,
95
log_sb.nr_entries = cpu_to_le64(0);
96
log_sb.sectorsize = cpu_to_le32(BDRV_SECTOR_SIZE);
97
} else {
98
- ret = bdrv_pread(s->log_file, 0, &log_sb, sizeof(log_sb), 0);
99
+ ret = bdrv_pread(s->log_file, 0, sizeof(log_sb), &log_sb, 0);
100
if (ret < 0) {
101
error_setg_errno(errp, -ret, "Could not read log superblock");
102
goto fail_log;
103
diff --git a/block/bochs.c b/block/bochs.c
104
index XXXXXXX..XXXXXXX 100644
105
--- a/block/bochs.c
106
+++ b/block/bochs.c
107
@@ -XXX,XX +XXX,XX @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags,
108
return -EINVAL;
109
}
110
111
- ret = bdrv_pread(bs->file, 0, &bochs, sizeof(bochs), 0);
112
+ ret = bdrv_pread(bs->file, 0, sizeof(bochs), &bochs, 0);
113
if (ret < 0) {
114
return ret;
115
}
116
@@ -XXX,XX +XXX,XX @@ static int bochs_open(BlockDriverState *bs, QDict *options, int flags,
117
return -ENOMEM;
118
}
119
120
- ret = bdrv_pread(bs->file, le32_to_cpu(bochs.header), s->catalog_bitmap,
121
- s->catalog_size * 4, 0);
122
+ ret = bdrv_pread(bs->file, le32_to_cpu(bochs.header), s->catalog_size * 4,
123
+ s->catalog_bitmap, 0);
124
if (ret < 0) {
125
goto fail;
126
}
127
@@ -XXX,XX +XXX,XX @@ static int64_t seek_to_sector(BlockDriverState *bs, int64_t sector_num)
128
(s->extent_blocks + s->bitmap_blocks));
129
130
/* read in bitmap for current extent */
131
- ret = bdrv_pread(bs->file, bitmap_offset + (extent_offset / 8),
132
- &bitmap_entry, 1, 0);
133
+ ret = bdrv_pread(bs->file, bitmap_offset + (extent_offset / 8), 1,
134
+ &bitmap_entry, 0);
135
if (ret < 0) {
136
return ret;
137
}
138
diff --git a/block/cloop.c b/block/cloop.c
139
index XXXXXXX..XXXXXXX 100644
140
--- a/block/cloop.c
141
+++ b/block/cloop.c
142
@@ -XXX,XX +XXX,XX @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags,
143
}
144
145
/* read header */
146
- ret = bdrv_pread(bs->file, 128, &s->block_size, 4, 0);
147
+ ret = bdrv_pread(bs->file, 128, 4, &s->block_size, 0);
148
if (ret < 0) {
149
return ret;
150
}
151
@@ -XXX,XX +XXX,XX @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags,
152
return -EINVAL;
153
}
154
155
- ret = bdrv_pread(bs->file, 128 + 4, &s->n_blocks, 4, 0);
156
+ ret = bdrv_pread(bs->file, 128 + 4, 4, &s->n_blocks, 0);
157
if (ret < 0) {
158
return ret;
159
}
160
@@ -XXX,XX +XXX,XX @@ static int cloop_open(BlockDriverState *bs, QDict *options, int flags,
161
return -ENOMEM;
162
}
163
164
- ret = bdrv_pread(bs->file, 128 + 4 + 4, s->offsets, offsets_size, 0);
165
+ ret = bdrv_pread(bs->file, 128 + 4 + 4, offsets_size, s->offsets, 0);
166
if (ret < 0) {
167
goto fail;
168
}
169
@@ -XXX,XX +XXX,XX @@ static inline int cloop_read_block(BlockDriverState *bs, int block_num)
170
int ret;
171
uint32_t bytes = s->offsets[block_num + 1] - s->offsets[block_num];
172
173
- ret = bdrv_pread(bs->file, s->offsets[block_num], s->compressed_block,
174
- bytes, 0);
175
+ ret = bdrv_pread(bs->file, s->offsets[block_num], bytes,
176
+ s->compressed_block, 0);
177
if (ret != bytes) {
178
return -1;
179
}
180
diff --git a/block/crypto.c b/block/crypto.c
181
index XXXXXXX..XXXXXXX 100644
182
--- a/block/crypto.c
183
+++ b/block/crypto.c
184
@@ -XXX,XX +XXX,XX @@ static ssize_t block_crypto_read_func(QCryptoBlock *block,
185
BlockDriverState *bs = opaque;
186
ssize_t ret;
187
188
- ret = bdrv_pread(bs->file, offset, buf, buflen, 0);
189
+ ret = bdrv_pread(bs->file, offset, buflen, buf, 0);
190
if (ret < 0) {
191
error_setg_errno(errp, -ret, "Could not read encryption header");
192
return ret;
193
@@ -XXX,XX +XXX,XX @@ static ssize_t block_crypto_write_func(QCryptoBlock *block,
194
BlockDriverState *bs = opaque;
195
ssize_t ret;
196
197
- ret = bdrv_pwrite(bs->file, offset, buf, buflen, 0);
198
+ ret = bdrv_pwrite(bs->file, offset, buflen, buf, 0);
199
if (ret < 0) {
200
error_setg_errno(errp, -ret, "Could not write encryption header");
201
return ret;
202
diff --git a/block/dmg.c b/block/dmg.c
203
index XXXXXXX..XXXXXXX 100644
204
--- a/block/dmg.c
205
+++ b/block/dmg.c
206
@@ -XXX,XX +XXX,XX @@ static int read_uint64(BlockDriverState *bs, int64_t offset, uint64_t *result)
207
uint64_t buffer;
208
int ret;
209
210
- ret = bdrv_pread(bs->file, offset, &buffer, 8, 0);
211
+ ret = bdrv_pread(bs->file, offset, 8, &buffer, 0);
212
if (ret < 0) {
213
return ret;
214
}
215
@@ -XXX,XX +XXX,XX @@ static int read_uint32(BlockDriverState *bs, int64_t offset, uint32_t *result)
216
uint32_t buffer;
217
int ret;
218
219
- ret = bdrv_pread(bs->file, offset, &buffer, 4, 0);
220
+ ret = bdrv_pread(bs->file, offset, 4, &buffer, 0);
221
if (ret < 0) {
222
return ret;
223
}
224
@@ -XXX,XX +XXX,XX @@ static int64_t dmg_find_koly_offset(BdrvChild *file, Error **errp)
225
offset = length - 511 - 512;
226
}
227
length = length < 515 ? length : 515;
228
- ret = bdrv_pread(file, offset, buffer, length, 0);
229
+ ret = bdrv_pread(file, offset, length, buffer, 0);
230
if (ret < 0) {
231
error_setg_errno(errp, -ret, "Failed while reading UDIF trailer");
232
return ret;
233
@@ -XXX,XX +XXX,XX @@ static int dmg_read_resource_fork(BlockDriverState *bs, DmgHeaderState *ds,
234
offset += 4;
235
236
buffer = g_realloc(buffer, count);
237
- ret = bdrv_pread(bs->file, offset, buffer, count, 0);
238
+ ret = bdrv_pread(bs->file, offset, count, buffer, 0);
239
if (ret < 0) {
240
goto fail;
241
}
242
@@ -XXX,XX +XXX,XX @@ static int dmg_read_plist_xml(BlockDriverState *bs, DmgHeaderState *ds,
243
244
buffer = g_malloc(info_length + 1);
245
buffer[info_length] = '\0';
246
- ret = bdrv_pread(bs->file, info_begin, buffer, info_length, 0);
247
+ ret = bdrv_pread(bs->file, info_begin, info_length, buffer, 0);
248
if (ret != info_length) {
249
ret = -EINVAL;
250
goto fail;
251
@@ -XXX,XX +XXX,XX @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
252
case UDZO: { /* zlib compressed */
253
/* we need to buffer, because only the chunk as whole can be
254
* inflated. */
255
- ret = bdrv_pread(bs->file, s->offsets[chunk], s->compressed_chunk,
256
- s->lengths[chunk], 0);
257
+ ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
258
+ s->compressed_chunk, 0);
259
if (ret != s->lengths[chunk]) {
260
return -1;
261
}
262
@@ -XXX,XX +XXX,XX @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
263
}
264
/* we need to buffer, because only the chunk as whole can be
265
* inflated. */
266
- ret = bdrv_pread(bs->file, s->offsets[chunk], s->compressed_chunk,
267
- s->lengths[chunk], 0);
268
+ ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
269
+ s->compressed_chunk, 0);
270
if (ret != s->lengths[chunk]) {
271
return -1;
272
}
273
@@ -XXX,XX +XXX,XX @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
274
}
275
/* we need to buffer, because only the chunk as whole can be
276
* inflated. */
277
- ret = bdrv_pread(bs->file, s->offsets[chunk], s->compressed_chunk,
278
- s->lengths[chunk], 0);
279
+ ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
280
+ s->compressed_chunk, 0);
281
if (ret != s->lengths[chunk]) {
282
return -1;
283
}
284
@@ -XXX,XX +XXX,XX @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
285
}
286
break;
287
case UDRW: /* copy */
288
- ret = bdrv_pread(bs->file, s->offsets[chunk],
289
- s->uncompressed_chunk, s->lengths[chunk], 0);
290
+ ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
291
+ s->uncompressed_chunk, 0);
292
if (ret != s->lengths[chunk]) {
293
return -1;
294
}
295
diff --git a/block/io.c b/block/io.c
296
index XXXXXXX..XXXXXXX 100644
297
--- a/block/io.c
298
+++ b/block/io.c
299
@@ -XXX,XX +XXX,XX @@ int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags)
300
}
301
302
/* See bdrv_pwrite() for the return codes */
303
-int bdrv_pread(BdrvChild *child, int64_t offset, void *buf, int64_t bytes,
304
+int bdrv_pread(BdrvChild *child, int64_t offset, int64_t bytes, void *buf,
305
BdrvRequestFlags flags)
306
{
307
int ret;
308
@@ -XXX,XX +XXX,XX @@ int bdrv_pread(BdrvChild *child, int64_t offset, void *buf, int64_t bytes,
309
-EINVAL Invalid offset or number of bytes
310
-EACCES Trying to write a read-only device
311
*/
312
-int bdrv_pwrite(BdrvChild *child, int64_t offset, const void *buf,
313
- int64_t bytes, BdrvRequestFlags flags)
314
+int bdrv_pwrite(BdrvChild *child, int64_t offset, int64_t bytes,
315
+ const void *buf, BdrvRequestFlags flags)
316
{
317
int ret;
318
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
319
@@ -XXX,XX +XXX,XX @@ int bdrv_pwrite(BdrvChild *child, int64_t offset, const void *buf,
320
*
321
* Returns 0 on success, -errno in error cases.
322
*/
323
-int bdrv_pwrite_sync(BdrvChild *child, int64_t offset,
324
- const void *buf, int64_t count, BdrvRequestFlags flags)
325
+int bdrv_pwrite_sync(BdrvChild *child, int64_t offset, int64_t bytes,
326
+ const void *buf, BdrvRequestFlags flags)
327
{
328
int ret;
329
IO_CODE();
330
331
- ret = bdrv_pwrite(child, offset, buf, count, flags);
332
+ ret = bdrv_pwrite(child, offset, bytes, buf, flags);
333
if (ret < 0) {
334
return ret;
335
}
336
diff --git a/block/parallels-ext.c b/block/parallels-ext.c
337
index XXXXXXX..XXXXXXX 100644
338
--- a/block/parallels-ext.c
339
+++ b/block/parallels-ext.c
340
@@ -XXX,XX +XXX,XX @@ static int parallels_load_bitmap_data(BlockDriverState *bs,
341
if (entry == 1) {
342
bdrv_dirty_bitmap_deserialize_ones(bitmap, offset, count, false);
343
} else {
344
- ret = bdrv_pread(bs->file, entry << BDRV_SECTOR_BITS, buf,
345
- s->cluster_size, 0);
346
+ ret = bdrv_pread(bs->file, entry << BDRV_SECTOR_BITS,
347
+ s->cluster_size, buf, 0);
348
if (ret < 0) {
349
error_setg_errno(errp, -ret,
350
"Failed to read bitmap data cluster");
351
@@ -XXX,XX +XXX,XX @@ int parallels_read_format_extension(BlockDriverState *bs,
352
353
assert(ext_off > 0);
354
355
- ret = bdrv_pread(bs->file, ext_off, ext_cluster, s->cluster_size, 0);
356
+ ret = bdrv_pread(bs->file, ext_off, s->cluster_size, ext_cluster, 0);
357
if (ret < 0) {
358
error_setg_errno(errp, -ret, "Failed to read Format Extension cluster");
359
goto out;
360
diff --git a/block/parallels.c b/block/parallels.c
361
index XXXXXXX..XXXXXXX 100644
362
--- a/block/parallels.c
363
+++ b/block/parallels.c
364
@@ -XXX,XX +XXX,XX @@ static coroutine_fn int parallels_co_flush_to_os(BlockDriverState *bs)
365
if (off + to_write > s->header_size) {
366
to_write = s->header_size - off;
367
}
368
- ret = bdrv_pwrite(bs->file, off, (uint8_t *)s->header + off, to_write,
369
+ ret = bdrv_pwrite(bs->file, off, to_write, (uint8_t *)s->header + off,
370
0);
371
if (ret < 0) {
372
qemu_co_mutex_unlock(&s->lock);
373
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn parallels_co_check(BlockDriverState *bs,
374
375
ret = 0;
376
if (flush_bat) {
377
- ret = bdrv_pwrite_sync(bs->file, 0, s->header, s->header_size, 0);
378
+ ret = bdrv_pwrite_sync(bs->file, 0, s->header_size, s->header, 0);
379
if (ret < 0) {
380
res->check_errors++;
381
goto out;
382
@@ -XXX,XX +XXX,XX @@ static int parallels_update_header(BlockDriverState *bs)
383
if (size > s->header_size) {
384
size = s->header_size;
385
}
386
- return bdrv_pwrite_sync(bs->file, 0, s->header, size, 0);
387
+ return bdrv_pwrite_sync(bs->file, 0, size, s->header, 0);
388
}
389
390
static int parallels_open(BlockDriverState *bs, QDict *options, int flags,
391
@@ -XXX,XX +XXX,XX @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags,
392
return -EINVAL;
393
}
394
395
- ret = bdrv_pread(bs->file, 0, &ph, sizeof(ph), 0);
396
+ ret = bdrv_pread(bs->file, 0, sizeof(ph), &ph, 0);
397
if (ret < 0) {
398
goto fail;
399
}
400
@@ -XXX,XX +XXX,XX @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags,
401
s->header_size = size;
402
}
403
404
- ret = bdrv_pread(bs->file, 0, s->header, s->header_size, 0);
405
+ ret = bdrv_pread(bs->file, 0, s->header_size, s->header, 0);
406
if (ret < 0) {
407
goto fail;
408
}
409
diff --git a/block/qcow.c b/block/qcow.c
410
index XXXXXXX..XXXXXXX 100644
411
--- a/block/qcow.c
412
+++ b/block/qcow.c
413
@@ -XXX,XX +XXX,XX @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
414
goto fail;
415
}
416
417
- ret = bdrv_pread(bs->file, 0, &header, sizeof(header), 0);
418
+ ret = bdrv_pread(bs->file, 0, sizeof(header), &header, 0);
419
if (ret < 0) {
420
goto fail;
421
}
422
@@ -XXX,XX +XXX,XX @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
423
goto fail;
424
}
425
426
- ret = bdrv_pread(bs->file, s->l1_table_offset, s->l1_table,
427
- s->l1_size * sizeof(uint64_t), 0);
428
+ ret = bdrv_pread(bs->file, s->l1_table_offset,
429
+ s->l1_size * sizeof(uint64_t), s->l1_table, 0);
430
if (ret < 0) {
431
goto fail;
432
}
433
@@ -XXX,XX +XXX,XX @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
434
ret = -EINVAL;
435
goto fail;
436
}
437
- ret = bdrv_pread(bs->file, header.backing_file_offset,
438
- bs->auto_backing_file, len, 0);
439
+ ret = bdrv_pread(bs->file, header.backing_file_offset, len,
440
+ bs->auto_backing_file, 0);
441
if (ret < 0) {
442
goto fail;
443
}
444
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
445
BLKDBG_EVENT(bs->file, BLKDBG_L1_UPDATE);
446
ret = bdrv_pwrite_sync(bs->file,
447
s->l1_table_offset + l1_index * sizeof(tmp),
448
- &tmp, sizeof(tmp), 0);
449
+ sizeof(tmp), &tmp, 0);
450
if (ret < 0) {
451
return ret;
452
}
453
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
454
BLKDBG_EVENT(bs->file, BLKDBG_L2_LOAD);
455
if (new_l2_table) {
456
memset(l2_table, 0, s->l2_size * sizeof(uint64_t));
457
- ret = bdrv_pwrite_sync(bs->file, l2_offset, l2_table,
458
- s->l2_size * sizeof(uint64_t), 0);
459
+ ret = bdrv_pwrite_sync(bs->file, l2_offset,
460
+ s->l2_size * sizeof(uint64_t), l2_table, 0);
461
if (ret < 0) {
462
return ret;
463
}
464
} else {
465
- ret = bdrv_pread(bs->file, l2_offset, l2_table,
466
- s->l2_size * sizeof(uint64_t), 0);
467
+ ret = bdrv_pread(bs->file, l2_offset, s->l2_size * sizeof(uint64_t),
468
+ l2_table, 0);
469
if (ret < 0) {
470
return ret;
471
}
472
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
473
cluster_offset = QEMU_ALIGN_UP(cluster_offset, s->cluster_size);
474
/* write the cluster content */
475
BLKDBG_EVENT(bs->file, BLKDBG_WRITE_AIO);
476
- ret = bdrv_pwrite(bs->file, cluster_offset, s->cluster_cache,
477
- s->cluster_size, 0);
478
+ ret = bdrv_pwrite(bs->file, cluster_offset, s->cluster_size,
479
+ s->cluster_cache, 0);
480
if (ret < 0) {
481
return ret;
482
}
483
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
484
}
485
BLKDBG_EVENT(bs->file, BLKDBG_WRITE_AIO);
486
ret = bdrv_pwrite(bs->file, cluster_offset + i,
487
- s->cluster_data,
488
- BDRV_SECTOR_SIZE, 0);
489
+ BDRV_SECTOR_SIZE,
490
+ s->cluster_data, 0);
491
if (ret < 0) {
492
return ret;
493
}
494
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
495
BLKDBG_EVENT(bs->file, BLKDBG_L2_UPDATE);
496
}
497
ret = bdrv_pwrite_sync(bs->file, l2_offset + l2_index * sizeof(tmp),
498
- &tmp, sizeof(tmp), 0);
499
+ sizeof(tmp), &tmp, 0);
500
if (ret < 0) {
501
return ret;
502
}
503
@@ -XXX,XX +XXX,XX @@ static int decompress_cluster(BlockDriverState *bs, uint64_t cluster_offset)
504
csize = cluster_offset >> (63 - s->cluster_bits);
505
csize &= (s->cluster_size - 1);
506
BLKDBG_EVENT(bs->file, BLKDBG_READ_COMPRESSED);
507
- ret = bdrv_pread(bs->file, coffset, s->cluster_data, csize, 0);
508
+ ret = bdrv_pread(bs->file, coffset, csize, s->cluster_data, 0);
509
if (ret != csize)
510
return -1;
511
if (decompress_buffer(s->cluster_cache, s->cluster_size,
512
@@ -XXX,XX +XXX,XX @@ static int qcow_make_empty(BlockDriverState *bs)
513
int ret;
514
515
memset(s->l1_table, 0, l1_length);
516
- if (bdrv_pwrite_sync(bs->file, s->l1_table_offset, s->l1_table, l1_length,
517
+ if (bdrv_pwrite_sync(bs->file, s->l1_table_offset, l1_length, s->l1_table,
518
0) < 0)
519
return -1;
520
ret = bdrv_truncate(bs->file, s->l1_table_offset + l1_length, false,
521
diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c
522
index XXXXXXX..XXXXXXX 100644
523
--- a/block/qcow2-bitmap.c
524
+++ b/block/qcow2-bitmap.c
525
@@ -XXX,XX +XXX,XX @@ static int bitmap_table_load(BlockDriverState *bs, Qcow2BitmapTable *tb,
526
}
527
528
assert(tb->size <= BME_MAX_TABLE_SIZE);
529
- ret = bdrv_pread(bs->file, tb->offset, table,
530
- tb->size * BME_TABLE_ENTRY_SIZE, 0);
531
+ ret = bdrv_pread(bs->file, tb->offset, tb->size * BME_TABLE_ENTRY_SIZE,
532
+ table, 0);
533
if (ret < 0) {
534
goto fail;
535
}
536
@@ -XXX,XX +XXX,XX @@ static int load_bitmap_data(BlockDriverState *bs,
537
* already cleared */
538
}
539
} else {
540
- ret = bdrv_pread(bs->file, data_offset, buf, s->cluster_size, 0);
541
+ ret = bdrv_pread(bs->file, data_offset, s->cluster_size, buf, 0);
542
if (ret < 0) {
543
goto finish;
544
}
545
@@ -XXX,XX +XXX,XX @@ static Qcow2BitmapList *bitmap_list_load(BlockDriverState *bs, uint64_t offset,
546
}
547
dir_end = dir + size;
548
549
- ret = bdrv_pread(bs->file, offset, dir, size, 0);
550
+ ret = bdrv_pread(bs->file, offset, size, dir, 0);
551
if (ret < 0) {
552
error_setg_errno(errp, -ret, "Failed to read bitmap directory");
553
goto fail;
554
@@ -XXX,XX +XXX,XX @@ static int bitmap_list_store(BlockDriverState *bs, Qcow2BitmapList *bm_list,
555
goto fail;
556
}
557
558
- ret = bdrv_pwrite(bs->file, dir_offset, dir, dir_size, 0);
559
+ ret = bdrv_pwrite(bs->file, dir_offset, dir_size, dir, 0);
560
if (ret < 0) {
561
goto fail;
562
}
563
@@ -XXX,XX +XXX,XX @@ static uint64_t *store_bitmap_data(BlockDriverState *bs,
564
goto fail;
565
}
566
567
- ret = bdrv_pwrite(bs->file, off, buf, s->cluster_size, 0);
568
+ ret = bdrv_pwrite(bs->file, off, s->cluster_size, buf, 0);
569
if (ret < 0) {
570
error_setg_errno(errp, -ret, "Failed to write bitmap '%s' to file",
571
bm_name);
572
@@ -XXX,XX +XXX,XX @@ static int store_bitmap(BlockDriverState *bs, Qcow2Bitmap *bm, Error **errp)
573
}
574
575
bitmap_table_to_be(tb, tb_size);
576
- ret = bdrv_pwrite(bs->file, tb_offset, tb, tb_size * sizeof(tb[0]), 0);
577
+ ret = bdrv_pwrite(bs->file, tb_offset, tb_size * sizeof(tb[0]), tb, 0);
578
if (ret < 0) {
579
error_setg_errno(errp, -ret, "Failed to write bitmap '%s' to file",
580
bm_name);
581
diff --git a/block/qcow2-cache.c b/block/qcow2-cache.c
582
index XXXXXXX..XXXXXXX 100644
583
--- a/block/qcow2-cache.c
584
+++ b/block/qcow2-cache.c
585
@@ -XXX,XX +XXX,XX @@ static int qcow2_cache_entry_flush(BlockDriverState *bs, Qcow2Cache *c, int i)
586
BLKDBG_EVENT(bs->file, BLKDBG_L2_UPDATE);
587
}
588
589
- ret = bdrv_pwrite(bs->file, c->entries[i].offset,
590
- qcow2_cache_get_table_addr(c, i), c->table_size, 0);
591
+ ret = bdrv_pwrite(bs->file, c->entries[i].offset, c->table_size,
592
+ qcow2_cache_get_table_addr(c, i), 0);
593
if (ret < 0) {
594
return ret;
595
}
596
@@ -XXX,XX +XXX,XX @@ static int qcow2_cache_do_get(BlockDriverState *bs, Qcow2Cache *c,
597
BLKDBG_EVENT(bs->file, BLKDBG_L2_LOAD);
598
}
599
600
- ret = bdrv_pread(bs->file, offset, qcow2_cache_get_table_addr(c, i),
601
- c->table_size, 0);
602
+ ret = bdrv_pread(bs->file, offset, c->table_size,
603
+ qcow2_cache_get_table_addr(c, i), 0);
604
if (ret < 0) {
605
return ret;
606
}
607
diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
608
index XXXXXXX..XXXXXXX 100644
609
--- a/block/qcow2-cluster.c
610
+++ b/block/qcow2-cluster.c
611
@@ -XXX,XX +XXX,XX @@ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size,
612
BLKDBG_EVENT(bs->file, BLKDBG_L1_GROW_WRITE_TABLE);
613
for(i = 0; i < s->l1_size; i++)
614
new_l1_table[i] = cpu_to_be64(new_l1_table[i]);
615
- ret = bdrv_pwrite_sync(bs->file, new_l1_table_offset, new_l1_table,
616
- new_l1_size2, 0);
617
+ ret = bdrv_pwrite_sync(bs->file, new_l1_table_offset, new_l1_size2,
618
+ new_l1_table, 0);
619
if (ret < 0)
620
goto fail;
621
for(i = 0; i < s->l1_size; i++)
622
@@ -XXX,XX +XXX,XX @@ int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size,
623
BLKDBG_EVENT(bs->file, BLKDBG_L1_GROW_ACTIVATE_TABLE);
624
stl_be_p(data, new_l1_size);
625
stq_be_p(data + 4, new_l1_table_offset);
626
- ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, l1_size), data,
627
- sizeof(data), 0);
628
+ ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, l1_size),
629
+ sizeof(data), data, 0);
630
if (ret < 0) {
631
goto fail;
632
}
633
@@ -XXX,XX +XXX,XX @@ int qcow2_write_l1_entry(BlockDriverState *bs, int l1_index)
634
BLKDBG_EVENT(bs->file, BLKDBG_L1_UPDATE);
635
ret = bdrv_pwrite_sync(bs->file,
636
s->l1_table_offset + L1E_SIZE * l1_start_index,
637
- buf, bufsize, 0);
638
+ bufsize, buf, 0);
639
if (ret < 0) {
640
return ret;
641
}
642
@@ -XXX,XX +XXX,XX @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table,
643
(void **)&l2_slice);
644
} else {
645
/* load inactive L2 tables from disk */
646
- ret = bdrv_pread(bs->file, slice_offset, l2_slice,
647
- slice_size2, 0);
648
+ ret = bdrv_pread(bs->file, slice_offset, slice_size2,
649
+ l2_slice, 0);
650
}
651
if (ret < 0) {
652
goto fail;
653
@@ -XXX,XX +XXX,XX @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table,
654
goto fail;
655
}
656
657
- ret = bdrv_pwrite(bs->file, slice_offset, l2_slice,
658
- slice_size2, 0);
659
+ ret = bdrv_pwrite(bs->file, slice_offset, slice_size2,
660
+ l2_slice, 0);
661
if (ret < 0) {
662
goto fail;
663
}
664
@@ -XXX,XX +XXX,XX @@ int qcow2_expand_zero_clusters(BlockDriverState *bs,
665
666
l1_table = new_l1_table;
667
668
- ret = bdrv_pread(bs->file, s->snapshots[i].l1_table_offset, l1_table,
669
- l1_size2, 0);
670
+ ret = bdrv_pread(bs->file, s->snapshots[i].l1_table_offset, l1_size2,
671
+ l1_table, 0);
672
if (ret < 0) {
673
goto fail;
674
}
675
diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
676
index XXXXXXX..XXXXXXX 100644
677
--- a/block/qcow2-refcount.c
678
+++ b/block/qcow2-refcount.c
679
@@ -XXX,XX +XXX,XX @@ int qcow2_refcount_init(BlockDriverState *bs)
680
}
681
BLKDBG_EVENT(bs->file, BLKDBG_REFTABLE_LOAD);
682
ret = bdrv_pread(bs->file, s->refcount_table_offset,
683
- s->refcount_table, refcount_table_size2, 0);
684
+ refcount_table_size2, s->refcount_table, 0);
685
if (ret < 0) {
686
goto fail;
687
}
688
@@ -XXX,XX +XXX,XX @@ static int alloc_refcount_block(BlockDriverState *bs,
689
BLKDBG_EVENT(bs->file, BLKDBG_REFBLOCK_ALLOC_HOOKUP);
690
ret = bdrv_pwrite_sync(bs->file, s->refcount_table_offset +
691
refcount_table_index * REFTABLE_ENTRY_SIZE,
692
- &data64, sizeof(data64), 0);
693
+ sizeof(data64), &data64, 0);
694
if (ret < 0) {
695
goto fail;
696
}
697
@@ -XXX,XX +XXX,XX @@ int64_t qcow2_refcount_area(BlockDriverState *bs, uint64_t start_offset,
698
}
699
700
BLKDBG_EVENT(bs->file, BLKDBG_REFBLOCK_ALLOC_WRITE_TABLE);
701
- ret = bdrv_pwrite_sync(bs->file, table_offset, new_table,
702
- table_size * REFTABLE_ENTRY_SIZE, 0);
703
+ ret = bdrv_pwrite_sync(bs->file, table_offset,
704
+ table_size * REFTABLE_ENTRY_SIZE, new_table, 0);
705
if (ret < 0) {
706
goto fail;
707
}
708
@@ -XXX,XX +XXX,XX @@ int64_t qcow2_refcount_area(BlockDriverState *bs, uint64_t start_offset,
709
data.d32 = cpu_to_be32(table_clusters);
710
BLKDBG_EVENT(bs->file, BLKDBG_REFBLOCK_ALLOC_SWITCH_TABLE);
711
ret = bdrv_pwrite_sync(bs->file,
712
- offsetof(QCowHeader, refcount_table_offset), &data,
713
- sizeof(data), 0);
714
+ offsetof(QCowHeader, refcount_table_offset),
715
+ sizeof(data), &data, 0);
716
if (ret < 0) {
717
goto fail;
718
}
719
@@ -XXX,XX +XXX,XX @@ int qcow2_update_snapshot_refcount(BlockDriverState *bs,
720
}
721
l1_allocated = true;
722
723
- ret = bdrv_pread(bs->file, l1_table_offset, l1_table, l1_size2, 0);
724
+ ret = bdrv_pread(bs->file, l1_table_offset, l1_size2, l1_table, 0);
725
if (ret < 0) {
726
goto fail;
727
}
728
@@ -XXX,XX +XXX,XX @@ fail:
729
cpu_to_be64s(&l1_table[i]);
730
}
731
732
- ret = bdrv_pwrite_sync(bs->file, l1_table_offset, l1_table, l1_size2,
733
+ ret = bdrv_pwrite_sync(bs->file, l1_table_offset, l1_size2, l1_table,
734
0);
735
736
for (i = 0; i < l1_size; i++) {
737
@@ -XXX,XX +XXX,XX @@ static int fix_l2_entry_by_zero(BlockDriverState *bs, BdrvCheckResult *res,
738
goto fail;
739
}
740
741
- ret = bdrv_pwrite_sync(bs->file, l2e_offset, &l2_table[idx],
742
- l2_entry_size(s), 0);
743
+ ret = bdrv_pwrite_sync(bs->file, l2e_offset, l2_entry_size(s),
744
+ &l2_table[idx], 0);
745
if (ret < 0) {
746
fprintf(stderr, "ERROR: Failed to overwrite L2 "
747
"table entry: %s\n", strerror(-ret));
748
@@ -XXX,XX +XXX,XX @@ static int check_refcounts_l2(BlockDriverState *bs, BdrvCheckResult *res,
749
bool metadata_overlap;
750
751
/* Read L2 table from disk */
752
- ret = bdrv_pread(bs->file, l2_offset, l2_table, l2_size_bytes, 0);
753
+ ret = bdrv_pread(bs->file, l2_offset, l2_size_bytes, l2_table, 0);
754
if (ret < 0) {
755
fprintf(stderr, "ERROR: I/O error in check_refcounts_l2\n");
756
res->check_errors++;
757
@@ -XXX,XX +XXX,XX @@ static int check_refcounts_l1(BlockDriverState *bs,
758
}
759
760
/* Read L1 table entries from disk */
761
- ret = bdrv_pread(bs->file, l1_table_offset, l1_table, l1_size_bytes, 0);
762
+ ret = bdrv_pread(bs->file, l1_table_offset, l1_size_bytes, l1_table, 0);
763
if (ret < 0) {
764
fprintf(stderr, "ERROR: I/O error in check_refcounts_l1\n");
765
res->check_errors++;
766
@@ -XXX,XX +XXX,XX @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res,
767
}
768
}
769
770
- ret = bdrv_pread(bs->file, l2_offset, l2_table,
771
- s->l2_size * l2_entry_size(s), 0);
772
+ ret = bdrv_pread(bs->file, l2_offset, s->l2_size * l2_entry_size(s),
773
+ l2_table, 0);
774
if (ret < 0) {
775
fprintf(stderr, "ERROR: Could not read L2 table: %s\n",
776
strerror(-ret));
777
@@ -XXX,XX +XXX,XX @@ static int check_oflag_copied(BlockDriverState *bs, BdrvCheckResult *res,
778
goto fail;
779
}
780
781
- ret = bdrv_pwrite(bs->file, l2_offset, l2_table, s->cluster_size,
782
+ ret = bdrv_pwrite(bs->file, l2_offset, s->cluster_size, l2_table,
783
0);
784
if (ret < 0) {
785
fprintf(stderr, "ERROR: Could not write L2 table: %s\n",
786
@@ -XXX,XX +XXX,XX @@ static int rebuild_refcounts_write_refblocks(
787
on_disk_refblock = (void *)((char *) *refcount_table +
788
refblock_index * s->cluster_size);
789
790
- ret = bdrv_pwrite(bs->file, refblock_offset, on_disk_refblock,
791
- s->cluster_size, 0);
792
+ ret = bdrv_pwrite(bs->file, refblock_offset, s->cluster_size,
793
+ on_disk_refblock, 0);
794
if (ret < 0) {
795
error_setg_errno(errp, -ret, "ERROR writing refblock");
796
return ret;
797
@@ -XXX,XX +XXX,XX @@ static int rebuild_refcount_structure(BlockDriverState *bs,
798
}
799
800
assert(reftable_length < INT_MAX);
801
- ret = bdrv_pwrite(bs->file, reftable_offset, on_disk_reftable,
802
- reftable_length, 0);
803
+ ret = bdrv_pwrite(bs->file, reftable_offset, reftable_length,
804
+ on_disk_reftable, 0);
805
if (ret < 0) {
806
error_setg_errno(errp, -ret, "ERROR writing reftable");
807
goto fail;
808
@@ -XXX,XX +XXX,XX @@ static int rebuild_refcount_structure(BlockDriverState *bs,
809
cpu_to_be32(reftable_clusters);
810
ret = bdrv_pwrite_sync(bs->file,
811
offsetof(QCowHeader, refcount_table_offset),
812
- &reftable_offset_and_clusters,
813
- sizeof(reftable_offset_and_clusters), 0);
814
+ sizeof(reftable_offset_and_clusters),
815
+ &reftable_offset_and_clusters, 0);
816
if (ret < 0) {
817
error_setg_errno(errp, -ret, "ERROR setting reftable");
818
goto fail;
819
@@ -XXX,XX +XXX,XX @@ int qcow2_check_metadata_overlap(BlockDriverState *bs, int ign, int64_t offset,
820
return -ENOMEM;
821
}
822
823
- ret = bdrv_pread(bs->file, l1_ofs, l1, l1_sz2, 0);
824
+ ret = bdrv_pread(bs->file, l1_ofs, l1_sz2, l1, 0);
825
if (ret < 0) {
826
g_free(l1);
827
return ret;
828
@@ -XXX,XX +XXX,XX @@ static int flush_refblock(BlockDriverState *bs, uint64_t **reftable,
829
return ret;
830
}
831
832
- ret = bdrv_pwrite(bs->file, offset, refblock, s->cluster_size, 0);
833
+ ret = bdrv_pwrite(bs->file, offset, s->cluster_size, refblock, 0);
834
if (ret < 0) {
835
error_setg_errno(errp, -ret, "Failed to write refblock");
836
return ret;
837
@@ -XXX,XX +XXX,XX @@ int qcow2_change_refcount_order(BlockDriverState *bs, int refcount_order,
838
cpu_to_be64s(&new_reftable[i]);
839
}
840
841
- ret = bdrv_pwrite(bs->file, new_reftable_offset, new_reftable,
842
- new_reftable_size * REFTABLE_ENTRY_SIZE, 0);
843
+ ret = bdrv_pwrite(bs->file, new_reftable_offset,
844
+ new_reftable_size * REFTABLE_ENTRY_SIZE, new_reftable,
845
+ 0);
846
847
for (i = 0; i < new_reftable_size; i++) {
848
be64_to_cpus(&new_reftable[i]);
849
@@ -XXX,XX +XXX,XX @@ int qcow2_shrink_reftable(BlockDriverState *bs)
850
reftable_tmp[i] = unused_block ? 0 : cpu_to_be64(s->refcount_table[i]);
851
}
852
853
- ret = bdrv_pwrite_sync(bs->file, s->refcount_table_offset, reftable_tmp,
854
- s->refcount_table_size * REFTABLE_ENTRY_SIZE, 0);
855
+ ret = bdrv_pwrite_sync(bs->file, s->refcount_table_offset,
856
+ s->refcount_table_size * REFTABLE_ENTRY_SIZE,
857
+ reftable_tmp, 0);
858
/*
859
* If the write in the reftable failed the image may contain a partially
860
* overwritten reftable. In this case it would be better to clear the
861
diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
862
index XXXXXXX..XXXXXXX 100644
863
--- a/block/qcow2-snapshot.c
864
+++ b/block/qcow2-snapshot.c
865
@@ -XXX,XX +XXX,XX @@ static int qcow2_do_read_snapshots(BlockDriverState *bs, bool repair,
866
867
/* Read statically sized part of the snapshot header */
868
offset = ROUND_UP(offset, 8);
869
- ret = bdrv_pread(bs->file, offset, &h, sizeof(h), 0);
870
+ ret = bdrv_pread(bs->file, offset, sizeof(h), &h, 0);
871
if (ret < 0) {
872
error_setg_errno(errp, -ret, "Failed to read snapshot table");
873
goto fail;
874
@@ -XXX,XX +XXX,XX @@ static int qcow2_do_read_snapshots(BlockDriverState *bs, bool repair,
875
}
876
877
/* Read known extra data */
878
- ret = bdrv_pread(bs->file, offset, &extra,
879
- MIN(sizeof(extra), sn->extra_data_size), 0);
880
+ ret = bdrv_pread(bs->file, offset,
881
+ MIN(sizeof(extra), sn->extra_data_size), &extra, 0);
882
if (ret < 0) {
883
error_setg_errno(errp, -ret, "Failed to read snapshot table");
884
goto fail;
885
@@ -XXX,XX +XXX,XX @@ static int qcow2_do_read_snapshots(BlockDriverState *bs, bool repair,
886
/* Store unknown extra data */
887
unknown_extra_data_size = sn->extra_data_size - sizeof(extra);
888
sn->unknown_extra_data = g_malloc(unknown_extra_data_size);
889
- ret = bdrv_pread(bs->file, offset, sn->unknown_extra_data,
890
- unknown_extra_data_size, 0);
891
+ ret = bdrv_pread(bs->file, offset, unknown_extra_data_size,
892
+ sn->unknown_extra_data, 0);
893
if (ret < 0) {
894
error_setg_errno(errp, -ret,
895
"Failed to read snapshot table");
896
@@ -XXX,XX +XXX,XX @@ static int qcow2_do_read_snapshots(BlockDriverState *bs, bool repair,
897
898
/* Read snapshot ID */
899
sn->id_str = g_malloc(id_str_size + 1);
900
- ret = bdrv_pread(bs->file, offset, sn->id_str, id_str_size, 0);
901
+ ret = bdrv_pread(bs->file, offset, id_str_size, sn->id_str, 0);
902
if (ret < 0) {
903
error_setg_errno(errp, -ret, "Failed to read snapshot table");
904
goto fail;
905
@@ -XXX,XX +XXX,XX @@ static int qcow2_do_read_snapshots(BlockDriverState *bs, bool repair,
906
907
/* Read snapshot name */
908
sn->name = g_malloc(name_size + 1);
909
- ret = bdrv_pread(bs->file, offset, sn->name, name_size, 0);
910
+ ret = bdrv_pread(bs->file, offset, name_size, sn->name, 0);
911
if (ret < 0) {
912
error_setg_errno(errp, -ret, "Failed to read snapshot table");
913
goto fail;
914
@@ -XXX,XX +XXX,XX @@ int qcow2_write_snapshots(BlockDriverState *bs)
915
h.name_size = cpu_to_be16(name_size);
916
offset = ROUND_UP(offset, 8);
917
918
- ret = bdrv_pwrite(bs->file, offset, &h, sizeof(h), 0);
919
+ ret = bdrv_pwrite(bs->file, offset, sizeof(h), &h, 0);
920
if (ret < 0) {
921
goto fail;
922
}
923
offset += sizeof(h);
924
925
- ret = bdrv_pwrite(bs->file, offset, &extra, sizeof(extra), 0);
926
+ ret = bdrv_pwrite(bs->file, offset, sizeof(extra), &extra, 0);
927
if (ret < 0) {
928
goto fail;
929
}
930
@@ -XXX,XX +XXX,XX @@ int qcow2_write_snapshots(BlockDriverState *bs)
931
assert(unknown_extra_data_size <= BDRV_REQUEST_MAX_BYTES);
932
assert(sn->unknown_extra_data);
933
934
- ret = bdrv_pwrite(bs->file, offset, sn->unknown_extra_data,
935
- unknown_extra_data_size, 0);
936
+ ret = bdrv_pwrite(bs->file, offset, unknown_extra_data_size,
937
+ sn->unknown_extra_data, 0);
938
if (ret < 0) {
939
goto fail;
940
}
941
offset += unknown_extra_data_size;
942
}
943
944
- ret = bdrv_pwrite(bs->file, offset, sn->id_str, id_str_size, 0);
945
+ ret = bdrv_pwrite(bs->file, offset, id_str_size, sn->id_str, 0);
946
if (ret < 0) {
947
goto fail;
948
}
949
offset += id_str_size;
950
951
- ret = bdrv_pwrite(bs->file, offset, sn->name, name_size, 0);
952
+ ret = bdrv_pwrite(bs->file, offset, name_size, sn->name, 0);
953
if (ret < 0) {
954
goto fail;
955
}
956
@@ -XXX,XX +XXX,XX @@ int qcow2_write_snapshots(BlockDriverState *bs)
957
header_data.snapshots_offset = cpu_to_be64(snapshots_offset);
958
959
ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, nb_snapshots),
960
- &header_data, sizeof(header_data), 0);
961
+ sizeof(header_data), &header_data, 0);
962
if (ret < 0) {
963
goto fail;
964
}
965
@@ -XXX,XX +XXX,XX @@ int coroutine_fn qcow2_check_read_snapshot_table(BlockDriverState *bs,
966
967
/* qcow2_do_open() discards this information in check mode */
968
ret = bdrv_pread(bs->file, offsetof(QCowHeader, nb_snapshots),
969
- &snapshot_table_pointer, sizeof(snapshot_table_pointer),
970
+ sizeof(snapshot_table_pointer), &snapshot_table_pointer,
971
0);
972
if (ret < 0) {
973
result->check_errors++;
974
@@ -XXX,XX +XXX,XX @@ int coroutine_fn qcow2_check_read_snapshot_table(BlockDriverState *bs,
975
976
snapshot_table_pointer.nb_snapshots = cpu_to_be32(s->nb_snapshots);
977
ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, nb_snapshots),
978
- &snapshot_table_pointer.nb_snapshots,
979
- sizeof(snapshot_table_pointer.nb_snapshots), 0);
980
+ sizeof(snapshot_table_pointer.nb_snapshots),
981
+ &snapshot_table_pointer.nb_snapshots, 0);
982
if (ret < 0) {
983
result->check_errors++;
984
fprintf(stderr, "ERROR failed to update the snapshot count in the "
985
@@ -XXX,XX +XXX,XX @@ int qcow2_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info)
986
goto fail;
987
}
988
989
- ret = bdrv_pwrite(bs->file, sn->l1_table_offset, l1_table,
990
- s->l1_size * L1E_SIZE, 0);
991
+ ret = bdrv_pwrite(bs->file, sn->l1_table_offset, s->l1_size * L1E_SIZE,
992
+ l1_table, 0);
993
if (ret < 0) {
994
goto fail;
995
}
996
@@ -XXX,XX +XXX,XX @@ int qcow2_snapshot_goto(BlockDriverState *bs, const char *snapshot_id)
997
goto fail;
998
}
999
1000
- ret = bdrv_pread(bs->file, sn->l1_table_offset, sn_l1_table, sn_l1_bytes,
1001
+ ret = bdrv_pread(bs->file, sn->l1_table_offset, sn_l1_bytes, sn_l1_table,
1002
0);
1003
if (ret < 0) {
1004
goto fail;
1005
@@ -XXX,XX +XXX,XX @@ int qcow2_snapshot_goto(BlockDriverState *bs, const char *snapshot_id)
1006
goto fail;
1007
}
1008
1009
- ret = bdrv_pwrite_sync(bs->file, s->l1_table_offset, sn_l1_table,
1010
- cur_l1_bytes, 0);
1011
+ ret = bdrv_pwrite_sync(bs->file, s->l1_table_offset, cur_l1_bytes,
1012
+ sn_l1_table, 0);
1013
if (ret < 0) {
1014
goto fail;
1015
}
1016
@@ -XXX,XX +XXX,XX @@ int qcow2_snapshot_load_tmp(BlockDriverState *bs,
1017
return -ENOMEM;
1018
}
1019
1020
- ret = bdrv_pread(bs->file, sn->l1_table_offset, new_l1_table,
1021
- new_l1_bytes, 0);
1022
+ ret = bdrv_pread(bs->file, sn->l1_table_offset, new_l1_bytes,
1023
+ new_l1_table, 0);
1024
if (ret < 0) {
1025
error_setg(errp, "Failed to read l1 table for snapshot");
1026
qemu_vfree(new_l1_table);
1027
diff --git a/block/qcow2.c b/block/qcow2.c
1028
index XXXXXXX..XXXXXXX 100644
1029
--- a/block/qcow2.c
1030
+++ b/block/qcow2.c
1031
@@ -XXX,XX +XXX,XX @@ static ssize_t qcow2_crypto_hdr_read_func(QCryptoBlock *block, size_t offset,
1032
return -1;
1033
}
1034
1035
- ret = bdrv_pread(bs->file, s->crypto_header.offset + offset, buf, buflen,
1036
+ ret = bdrv_pread(bs->file, s->crypto_header.offset + offset, buflen, buf,
1037
0);
1038
if (ret < 0) {
1039
error_setg_errno(errp, -ret, "Could not read encryption header");
1040
@@ -XXX,XX +XXX,XX @@ static ssize_t qcow2_crypto_hdr_write_func(QCryptoBlock *block, size_t offset,
1041
return -1;
1042
}
1043
1044
- ret = bdrv_pwrite(bs->file, s->crypto_header.offset + offset, buf, buflen,
1045
+ ret = bdrv_pwrite(bs->file, s->crypto_header.offset + offset, buflen, buf,
1046
0);
1047
if (ret < 0) {
1048
error_setg_errno(errp, -ret, "Could not read encryption header");
1049
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1050
printf("attempting to read extended header in offset %lu\n", offset);
1051
#endif
1052
1053
- ret = bdrv_pread(bs->file, offset, &ext, sizeof(ext), 0);
1054
+ ret = bdrv_pread(bs->file, offset, sizeof(ext), &ext, 0);
1055
if (ret < 0) {
1056
error_setg_errno(errp, -ret, "qcow2_read_extension: ERROR: "
1057
"pread fail from offset %" PRIu64, offset);
1058
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1059
sizeof(bs->backing_format));
1060
return 2;
1061
}
1062
- ret = bdrv_pread(bs->file, offset, bs->backing_format, ext.len, 0);
1063
+ ret = bdrv_pread(bs->file, offset, ext.len, bs->backing_format, 0);
1064
if (ret < 0) {
1065
error_setg_errno(errp, -ret, "ERROR: ext_backing_format: "
1066
"Could not read format name");
1067
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1068
case QCOW2_EXT_MAGIC_FEATURE_TABLE:
1069
if (p_feature_table != NULL) {
1070
void *feature_table = g_malloc0(ext.len + 2 * sizeof(Qcow2Feature));
1071
- ret = bdrv_pread(bs->file, offset, feature_table, ext.len, 0);
1072
+ ret = bdrv_pread(bs->file, offset, ext.len, feature_table, 0);
1073
if (ret < 0) {
1074
error_setg_errno(errp, -ret, "ERROR: ext_feature_table: "
1075
"Could not read table");
1076
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1077
return -EINVAL;
1078
}
1079
1080
- ret = bdrv_pread(bs->file, offset, &s->crypto_header, ext.len, 0);
1081
+ ret = bdrv_pread(bs->file, offset, ext.len, &s->crypto_header, 0);
1082
if (ret < 0) {
1083
error_setg_errno(errp, -ret,
1084
"Unable to read CRYPTO header extension");
1085
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1086
break;
1087
}
1088
1089
- ret = bdrv_pread(bs->file, offset, &bitmaps_ext, ext.len, 0);
1090
+ ret = bdrv_pread(bs->file, offset, ext.len, &bitmaps_ext, 0);
1091
if (ret < 0) {
1092
error_setg_errno(errp, -ret, "bitmaps_ext: "
1093
"Could not read ext header");
1094
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1095
case QCOW2_EXT_MAGIC_DATA_FILE:
1096
{
1097
s->image_data_file = g_malloc0(ext.len + 1);
1098
- ret = bdrv_pread(bs->file, offset, s->image_data_file, ext.len, 0);
1099
+ ret = bdrv_pread(bs->file, offset, ext.len, s->image_data_file, 0);
1100
if (ret < 0) {
1101
error_setg_errno(errp, -ret,
1102
"ERROR: Could not read data file name");
1103
@@ -XXX,XX +XXX,XX @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
1104
uext->len = ext.len;
1105
QLIST_INSERT_HEAD(&s->unknown_header_ext, uext, next);
1106
1107
- ret = bdrv_pread(bs->file, offset, uext->data, uext->len, 0);
1108
+ ret = bdrv_pread(bs->file, offset, uext->len, uext->data, 0);
1109
if (ret < 0) {
1110
error_setg_errno(errp, -ret, "ERROR: unknown extension: "
1111
"Could not read data");
1112
@@ -XXX,XX +XXX,XX @@ int qcow2_mark_dirty(BlockDriverState *bs)
1113
1114
val = cpu_to_be64(s->incompatible_features | QCOW2_INCOMPAT_DIRTY);
1115
ret = bdrv_pwrite(bs->file, offsetof(QCowHeader, incompatible_features),
1116
- &val, sizeof(val), 0);
1117
+ sizeof(val), &val, 0);
1118
if (ret < 0) {
1119
return ret;
1120
}
1121
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow2_do_open(BlockDriverState *bs, QDict *options,
1122
uint64_t l1_vm_state_index;
1123
bool update_header = false;
1124
1125
- ret = bdrv_pread(bs->file, 0, &header, sizeof(header), 0);
1126
+ ret = bdrv_pread(bs->file, 0, sizeof(header), &header, 0);
1127
if (ret < 0) {
1128
error_setg_errno(errp, -ret, "Could not read qcow2 header");
1129
goto fail;
1130
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow2_do_open(BlockDriverState *bs, QDict *options,
1131
if (header.header_length > sizeof(header)) {
1132
s->unknown_header_fields_size = header.header_length - sizeof(header);
1133
s->unknown_header_fields = g_malloc(s->unknown_header_fields_size);
1134
- ret = bdrv_pread(bs->file, sizeof(header), s->unknown_header_fields,
1135
- s->unknown_header_fields_size, 0);
1136
+ ret = bdrv_pread(bs->file, sizeof(header),
1137
+ s->unknown_header_fields_size,
1138
+ s->unknown_header_fields, 0);
1139
if (ret < 0) {
1140
error_setg_errno(errp, -ret, "Could not read unknown qcow2 header "
1141
"fields");
1142
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow2_do_open(BlockDriverState *bs, QDict *options,
1143
ret = -ENOMEM;
1144
goto fail;
1145
}
1146
- ret = bdrv_pread(bs->file, s->l1_table_offset, s->l1_table,
1147
- s->l1_size * L1E_SIZE, 0);
1148
+ ret = bdrv_pread(bs->file, s->l1_table_offset, s->l1_size * L1E_SIZE,
1149
+ s->l1_table, 0);
1150
if (ret < 0) {
1151
error_setg_errno(errp, -ret, "Could not read L1 table");
1152
goto fail;
1153
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow2_do_open(BlockDriverState *bs, QDict *options,
1154
ret = -EINVAL;
1155
goto fail;
1156
}
1157
- ret = bdrv_pread(bs->file, header.backing_file_offset,
1158
- bs->auto_backing_file, len, 0);
1159
+ ret = bdrv_pread(bs->file, header.backing_file_offset, len,
1160
+ bs->auto_backing_file, 0);
1161
if (ret < 0) {
1162
error_setg_errno(errp, -ret, "Could not read backing file name");
1163
goto fail;
1164
@@ -XXX,XX +XXX,XX @@ int qcow2_update_header(BlockDriverState *bs)
1165
}
1166
1167
/* Write the new header */
1168
- ret = bdrv_pwrite(bs->file, 0, header, s->cluster_size, 0);
1169
+ ret = bdrv_pwrite(bs->file, 0, s->cluster_size, header, 0);
1170
if (ret < 0) {
1171
goto fail;
1172
}
1173
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow2_co_truncate(BlockDriverState *bs, int64_t offset,
1174
1175
/* write updated header.size */
1176
offset = cpu_to_be64(offset);
1177
- ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, size), &offset,
1178
- sizeof(offset), 0);
1179
+ ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, size),
1180
+ sizeof(offset), &offset, 0);
1181
if (ret < 0) {
1182
error_setg_errno(errp, -ret, "Failed to update the image size");
1183
goto fail;
1184
@@ -XXX,XX +XXX,XX @@ static int make_completely_empty(BlockDriverState *bs)
1185
l1_ofs_rt_ofs_cls.reftable_offset = cpu_to_be64(s->cluster_size);
1186
l1_ofs_rt_ofs_cls.reftable_clusters = cpu_to_be32(1);
1187
ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, l1_table_offset),
1188
- &l1_ofs_rt_ofs_cls, sizeof(l1_ofs_rt_ofs_cls), 0);
1189
+ sizeof(l1_ofs_rt_ofs_cls), &l1_ofs_rt_ofs_cls, 0);
1190
if (ret < 0) {
1191
goto fail_broken_refcounts;
1192
}
1193
@@ -XXX,XX +XXX,XX @@ static int make_completely_empty(BlockDriverState *bs)
1194
1195
/* Enter the first refblock into the reftable */
1196
rt_entry = cpu_to_be64(2 * s->cluster_size);
1197
- ret = bdrv_pwrite_sync(bs->file, s->cluster_size, &rt_entry,
1198
- sizeof(rt_entry), 0);
1199
+ ret = bdrv_pwrite_sync(bs->file, s->cluster_size, sizeof(rt_entry),
1200
+ &rt_entry, 0);
1201
if (ret < 0) {
1202
goto fail_broken_refcounts;
1203
}
1204
diff --git a/block/qed.c b/block/qed.c
1205
index XXXXXXX..XXXXXXX 100644
1206
--- a/block/qed.c
1207
+++ b/block/qed.c
1208
@@ -XXX,XX +XXX,XX @@ int qed_write_header_sync(BDRVQEDState *s)
1209
int ret;
1210
1211
qed_header_cpu_to_le(&s->header, &le);
1212
- ret = bdrv_pwrite(s->bs->file, 0, &le, sizeof(le), 0);
1213
+ ret = bdrv_pwrite(s->bs->file, 0, sizeof(le), &le, 0);
1214
if (ret != sizeof(le)) {
1215
return ret;
1216
}
1217
@@ -XXX,XX +XXX,XX @@ static int qed_read_string(BdrvChild *file, uint64_t offset, size_t n,
1218
if (n >= buflen) {
1219
return -EINVAL;
1220
}
1221
- ret = bdrv_pread(file, offset, buf, n, 0);
1222
+ ret = bdrv_pread(file, offset, n, buf, 0);
1223
if (ret < 0) {
1224
return ret;
1225
}
1226
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn bdrv_qed_do_open(BlockDriverState *bs, QDict *options,
1227
int64_t file_size;
1228
int ret;
1229
1230
- ret = bdrv_pread(bs->file, 0, &le_header, sizeof(le_header), 0);
1231
+ ret = bdrv_pread(bs->file, 0, sizeof(le_header), &le_header, 0);
1232
if (ret < 0) {
1233
error_setg(errp, "Failed to read QED header");
1234
return ret;
1235
@@ -XXX,XX +XXX,XX @@ static int bdrv_qed_change_backing_file(BlockDriverState *bs,
1236
}
1237
1238
/* Write new header */
1239
- ret = bdrv_pwrite_sync(bs->file, 0, buffer, buffer_len, 0);
1240
+ ret = bdrv_pwrite_sync(bs->file, 0, buffer_len, buffer, 0);
1241
g_free(buffer);
1242
if (ret == 0) {
1243
memcpy(&s->header, &new_header, sizeof(new_header));
1244
diff --git a/block/vdi.c b/block/vdi.c
1245
index XXXXXXX..XXXXXXX 100644
1246
--- a/block/vdi.c
1247
+++ b/block/vdi.c
1248
@@ -XXX,XX +XXX,XX @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags,
1249
1250
logout("\n");
1251
1252
- ret = bdrv_pread(bs->file, 0, &header, sizeof(header), 0);
1253
+ ret = bdrv_pread(bs->file, 0, sizeof(header), &header, 0);
1254
if (ret < 0) {
1255
goto fail;
1256
}
1257
@@ -XXX,XX +XXX,XX @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags,
1258
goto fail;
1259
}
1260
1261
- ret = bdrv_pread(bs->file, header.offset_bmap, s->bmap,
1262
- bmap_size * SECTOR_SIZE, 0);
1263
+ ret = bdrv_pread(bs->file, header.offset_bmap, bmap_size * SECTOR_SIZE,
1264
+ s->bmap, 0);
1265
if (ret < 0) {
1266
goto fail_free_bmap;
1267
}
1268
@@ -XXX,XX +XXX,XX @@ vdi_co_pwritev(BlockDriverState *bs, int64_t offset, int64_t bytes,
1269
* so this full-cluster write does not overlap a partial write
1270
* of the same cluster, issued from the "else" branch.
1271
*/
1272
- ret = bdrv_pwrite(bs->file, data_offset, block, s->block_size, 0);
1273
+ ret = bdrv_pwrite(bs->file, data_offset, s->block_size, block, 0);
1274
qemu_co_rwlock_unlock(&s->bmap_lock);
1275
} else {
1276
nonallocating_write:
1277
@@ -XXX,XX +XXX,XX @@ nonallocating_write:
1278
assert(VDI_IS_ALLOCATED(bmap_first));
1279
*header = s->header;
1280
vdi_header_to_le(header);
1281
- ret = bdrv_pwrite(bs->file, 0, header, sizeof(*header), 0);
1282
+ ret = bdrv_pwrite(bs->file, 0, sizeof(*header), header, 0);
1283
g_free(header);
1284
1285
if (ret < 0) {
1286
@@ -XXX,XX +XXX,XX @@ nonallocating_write:
1287
base = ((uint8_t *)&s->bmap[0]) + bmap_first * SECTOR_SIZE;
1288
logout("will write %u block map sectors starting from entry %u\n",
1289
n_sectors, bmap_first);
1290
- ret = bdrv_pwrite(bs->file, offset * SECTOR_SIZE, base,
1291
- n_sectors * SECTOR_SIZE, 0);
1292
+ ret = bdrv_pwrite(bs->file, offset * SECTOR_SIZE,
1293
+ n_sectors * SECTOR_SIZE, base, 0);
1294
}
1295
1296
return ret < 0 ? ret : 0;
1297
diff --git a/block/vhdx-log.c b/block/vhdx-log.c
1298
index XXXXXXX..XXXXXXX 100644
1299
--- a/block/vhdx-log.c
1300
+++ b/block/vhdx-log.c
1301
@@ -XXX,XX +XXX,XX @@ static int vhdx_log_peek_hdr(BlockDriverState *bs, VHDXLogEntries *log,
1302
1303
offset = log->offset + read;
1304
1305
- ret = bdrv_pread(bs->file, offset, hdr, sizeof(VHDXLogEntryHeader), 0);
1306
+ ret = bdrv_pread(bs->file, offset, sizeof(VHDXLogEntryHeader), hdr, 0);
1307
if (ret < 0) {
1308
goto exit;
1309
}
1310
@@ -XXX,XX +XXX,XX @@ static int vhdx_log_read_sectors(BlockDriverState *bs, VHDXLogEntries *log,
1311
}
1312
offset = log->offset + read;
1313
1314
- ret = bdrv_pread(bs->file, offset, buffer, VHDX_LOG_SECTOR_SIZE, 0);
1315
+ ret = bdrv_pread(bs->file, offset, VHDX_LOG_SECTOR_SIZE, buffer, 0);
1316
if (ret < 0) {
1317
goto exit;
1318
}
1319
@@ -XXX,XX +XXX,XX @@ static int vhdx_log_write_sectors(BlockDriverState *bs, VHDXLogEntries *log,
1320
/* full */
1321
break;
1322
}
1323
- ret = bdrv_pwrite(bs->file, offset, buffer_tmp, VHDX_LOG_SECTOR_SIZE,
1324
+ ret = bdrv_pwrite(bs->file, offset, VHDX_LOG_SECTOR_SIZE, buffer_tmp,
1325
0);
1326
if (ret < 0) {
1327
goto exit;
1328
@@ -XXX,XX +XXX,XX @@ static int vhdx_log_flush_desc(BlockDriverState *bs, VHDXLogDescriptor *desc,
1329
1330
/* count is only > 1 if we are writing zeroes */
1331
for (i = 0; i < count; i++) {
1332
- ret = bdrv_pwrite_sync(bs->file, file_offset, buffer,
1333
- VHDX_LOG_SECTOR_SIZE, 0);
1334
+ ret = bdrv_pwrite_sync(bs->file, file_offset, VHDX_LOG_SECTOR_SIZE,
1335
+ buffer, 0);
1336
if (ret < 0) {
1337
goto exit;
1338
}
1339
@@ -XXX,XX +XXX,XX @@ static int vhdx_log_write(BlockDriverState *bs, BDRVVHDXState *s,
1340
1341
if (i == 0 && leading_length) {
1342
/* partial sector at the front of the buffer */
1343
- ret = bdrv_pread(bs->file, file_offset, merged_sector,
1344
- VHDX_LOG_SECTOR_SIZE, 0);
1345
+ ret = bdrv_pread(bs->file, file_offset, VHDX_LOG_SECTOR_SIZE,
1346
+ merged_sector, 0);
1347
if (ret < 0) {
1348
goto exit;
1349
}
1350
@@ -XXX,XX +XXX,XX @@ static int vhdx_log_write(BlockDriverState *bs, BDRVVHDXState *s,
1351
} else if (i == sectors - 1 && trailing_length) {
1352
/* partial sector at the end of the buffer */
1353
ret = bdrv_pread(bs->file, file_offset,
1354
- merged_sector + trailing_length,
1355
- VHDX_LOG_SECTOR_SIZE - trailing_length, 0);
1356
+ VHDX_LOG_SECTOR_SIZE - trailing_length,
1357
+ merged_sector + trailing_length, 0);
1358
if (ret < 0) {
1359
goto exit;
1360
}
1361
diff --git a/block/vhdx.c b/block/vhdx.c
1362
index XXXXXXX..XXXXXXX 100644
1363
--- a/block/vhdx.c
1364
+++ b/block/vhdx.c
1365
@@ -XXX,XX +XXX,XX @@ static int vhdx_write_header(BdrvChild *file, VHDXHeader *hdr,
1366
buffer = qemu_blockalign(bs_file, VHDX_HEADER_SIZE);
1367
if (read) {
1368
/* if true, we can't assume the extra reserved bytes are 0 */
1369
- ret = bdrv_pread(file, offset, buffer, VHDX_HEADER_SIZE, 0);
1370
+ ret = bdrv_pread(file, offset, VHDX_HEADER_SIZE, buffer, 0);
1371
if (ret < 0) {
1372
goto exit;
1373
}
1374
@@ -XXX,XX +XXX,XX @@ static int vhdx_write_header(BdrvChild *file, VHDXHeader *hdr,
1375
vhdx_header_le_export(hdr, header_le);
1376
vhdx_update_checksum(buffer, VHDX_HEADER_SIZE,
1377
offsetof(VHDXHeader, checksum));
1378
- ret = bdrv_pwrite_sync(file, offset, header_le, sizeof(VHDXHeader), 0);
1379
+ ret = bdrv_pwrite_sync(file, offset, sizeof(VHDXHeader), header_le, 0);
1380
1381
exit:
1382
qemu_vfree(buffer);
1383
@@ -XXX,XX +XXX,XX @@ static void vhdx_parse_header(BlockDriverState *bs, BDRVVHDXState *s,
1384
/* We have to read the whole VHDX_HEADER_SIZE instead of
1385
* sizeof(VHDXHeader), because the checksum is over the whole
1386
* region */
1387
- ret = bdrv_pread(bs->file, VHDX_HEADER1_OFFSET, buffer, VHDX_HEADER_SIZE,
1388
+ ret = bdrv_pread(bs->file, VHDX_HEADER1_OFFSET, VHDX_HEADER_SIZE, buffer,
1389
0);
1390
if (ret < 0) {
1391
goto fail;
1392
@@ -XXX,XX +XXX,XX @@ static void vhdx_parse_header(BlockDriverState *bs, BDRVVHDXState *s,
1393
}
1394
}
1395
1396
- ret = bdrv_pread(bs->file, VHDX_HEADER2_OFFSET, buffer, VHDX_HEADER_SIZE,
1397
+ ret = bdrv_pread(bs->file, VHDX_HEADER2_OFFSET, VHDX_HEADER_SIZE, buffer,
1398
0);
1399
if (ret < 0) {
1400
goto fail;
1401
@@ -XXX,XX +XXX,XX @@ static int vhdx_open_region_tables(BlockDriverState *bs, BDRVVHDXState *s)
1402
* whole block */
1403
buffer = qemu_blockalign(bs, VHDX_HEADER_BLOCK_SIZE);
1404
1405
- ret = bdrv_pread(bs->file, VHDX_REGION_TABLE_OFFSET, buffer,
1406
- VHDX_HEADER_BLOCK_SIZE, 0);
1407
+ ret = bdrv_pread(bs->file, VHDX_REGION_TABLE_OFFSET,
1408
+ VHDX_HEADER_BLOCK_SIZE, buffer, 0);
1409
if (ret < 0) {
1410
goto fail;
1411
}
1412
@@ -XXX,XX +XXX,XX @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s)
1413
1414
buffer = qemu_blockalign(bs, VHDX_METADATA_TABLE_MAX_SIZE);
1415
1416
- ret = bdrv_pread(bs->file, s->metadata_rt.file_offset, buffer,
1417
- VHDX_METADATA_TABLE_MAX_SIZE, 0);
1418
+ ret = bdrv_pread(bs->file, s->metadata_rt.file_offset,
1419
+ VHDX_METADATA_TABLE_MAX_SIZE, buffer, 0);
1420
if (ret < 0) {
1421
goto exit;
1422
}
1423
@@ -XXX,XX +XXX,XX @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s)
1424
ret = bdrv_pread(bs->file,
1425
s->metadata_entries.file_parameters_entry.offset
1426
+ s->metadata_rt.file_offset,
1427
- &s->params,
1428
sizeof(s->params),
1429
+ &s->params,
1430
0);
1431
1432
if (ret < 0) {
1433
@@ -XXX,XX +XXX,XX @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s)
1434
ret = bdrv_pread(bs->file,
1435
s->metadata_entries.virtual_disk_size_entry.offset
1436
+ s->metadata_rt.file_offset,
1437
- &s->virtual_disk_size,
1438
sizeof(uint64_t),
1439
+ &s->virtual_disk_size,
1440
0);
1441
if (ret < 0) {
1442
goto exit;
1443
@@ -XXX,XX +XXX,XX @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s)
1444
ret = bdrv_pread(bs->file,
1445
s->metadata_entries.logical_sector_size_entry.offset
1446
+ s->metadata_rt.file_offset,
1447
- &s->logical_sector_size,
1448
sizeof(uint32_t),
1449
+ &s->logical_sector_size,
1450
0);
1451
if (ret < 0) {
1452
goto exit;
1453
@@ -XXX,XX +XXX,XX @@ static int vhdx_parse_metadata(BlockDriverState *bs, BDRVVHDXState *s)
1454
ret = bdrv_pread(bs->file,
1455
s->metadata_entries.phys_sector_size_entry.offset
1456
+ s->metadata_rt.file_offset,
1457
- &s->physical_sector_size,
1458
sizeof(uint32_t),
1459
+ &s->physical_sector_size,
1460
0);
1461
if (ret < 0) {
1462
goto exit;
1463
@@ -XXX,XX +XXX,XX @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags,
1464
QLIST_INIT(&s->regions);
1465
1466
/* validate the file signature */
1467
- ret = bdrv_pread(bs->file, 0, &signature, sizeof(uint64_t), 0);
1468
+ ret = bdrv_pread(bs->file, 0, sizeof(uint64_t), &signature, 0);
1469
if (ret < 0) {
1470
goto fail;
1471
}
1472
@@ -XXX,XX +XXX,XX @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags,
1473
goto fail;
1474
}
1475
1476
- ret = bdrv_pread(bs->file, s->bat_offset, s->bat, s->bat_rt.length, 0);
1477
+ ret = bdrv_pread(bs->file, s->bat_offset, s->bat_rt.length, s->bat, 0);
1478
if (ret < 0) {
1479
goto fail;
1480
}
1481
diff --git a/block/vmdk.c b/block/vmdk.c
1482
index XXXXXXX..XXXXXXX 100644
1483
--- a/block/vmdk.c
1484
+++ b/block/vmdk.c
1485
@@ -XXX,XX +XXX,XX @@ static int vmdk_read_cid(BlockDriverState *bs, int parent, uint32_t *pcid)
1486
int ret;
1487
1488
desc = g_malloc0(DESC_SIZE);
1489
- ret = bdrv_pread(bs->file, s->desc_offset, desc, DESC_SIZE, 0);
1490
+ ret = bdrv_pread(bs->file, s->desc_offset, DESC_SIZE, desc, 0);
1491
if (ret < 0) {
1492
goto out;
1493
}
1494
@@ -XXX,XX +XXX,XX @@ static int vmdk_write_cid(BlockDriverState *bs, uint32_t cid)
1495
1496
desc = g_malloc0(DESC_SIZE);
1497
tmp_desc = g_malloc0(DESC_SIZE);
1498
- ret = bdrv_pread(bs->file, s->desc_offset, desc, DESC_SIZE, 0);
1499
+ ret = bdrv_pread(bs->file, s->desc_offset, DESC_SIZE, desc, 0);
1500
if (ret < 0) {
1501
goto out;
1502
}
1503
@@ -XXX,XX +XXX,XX @@ static int vmdk_write_cid(BlockDriverState *bs, uint32_t cid)
1504
pstrcat(desc, DESC_SIZE, tmp_desc);
1505
}
1506
1507
- ret = bdrv_pwrite_sync(bs->file, s->desc_offset, desc, DESC_SIZE, 0);
1508
+ ret = bdrv_pwrite_sync(bs->file, s->desc_offset, DESC_SIZE, desc, 0);
1509
1510
out:
1511
g_free(desc);
1512
@@ -XXX,XX +XXX,XX @@ static int vmdk_parent_open(BlockDriverState *bs)
1513
int ret;
1514
1515
desc = g_malloc0(DESC_SIZE + 1);
1516
- ret = bdrv_pread(bs->file, s->desc_offset, desc, DESC_SIZE, 0);
1517
+ ret = bdrv_pread(bs->file, s->desc_offset, DESC_SIZE, desc, 0);
1518
if (ret < 0) {
1519
goto out;
1520
}
1521
@@ -XXX,XX +XXX,XX @@ static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent,
1522
return -ENOMEM;
1523
}
1524
1525
- ret = bdrv_pread(extent->file, extent->l1_table_offset, extent->l1_table,
1526
- l1_size, 0);
1527
+ ret = bdrv_pread(extent->file, extent->l1_table_offset, l1_size,
1528
+ extent->l1_table, 0);
1529
if (ret < 0) {
1530
bdrv_refresh_filename(extent->file->bs);
1531
error_setg_errno(errp, -ret,
1532
@@ -XXX,XX +XXX,XX @@ static int vmdk_init_tables(BlockDriverState *bs, VmdkExtent *extent,
1533
goto fail_l1;
1534
}
1535
ret = bdrv_pread(extent->file, extent->l1_backup_table_offset,
1536
- extent->l1_backup_table, l1_size, 0);
1537
+ l1_size, extent->l1_backup_table, 0);
1538
if (ret < 0) {
1539
bdrv_refresh_filename(extent->file->bs);
1540
error_setg_errno(errp, -ret,
1541
@@ -XXX,XX +XXX,XX @@ static int vmdk_open_vmfs_sparse(BlockDriverState *bs,
1542
VMDK3Header header;
1543
VmdkExtent *extent = NULL;
1544
1545
- ret = bdrv_pread(file, sizeof(magic), &header, sizeof(header), 0);
1546
+ ret = bdrv_pread(file, sizeof(magic), sizeof(header), &header, 0);
1547
if (ret < 0) {
1548
bdrv_refresh_filename(file->bs);
1549
error_setg_errno(errp, -ret,
1550
@@ -XXX,XX +XXX,XX @@ static int vmdk_open_se_sparse(BlockDriverState *bs,
1551
1552
assert(sizeof(const_header) == SECTOR_SIZE);
1553
1554
- ret = bdrv_pread(file, 0, &const_header, sizeof(const_header), 0);
1555
+ ret = bdrv_pread(file, 0, sizeof(const_header), &const_header, 0);
1556
if (ret < 0) {
1557
bdrv_refresh_filename(file->bs);
1558
error_setg_errno(errp, -ret,
1559
@@ -XXX,XX +XXX,XX @@ static int vmdk_open_se_sparse(BlockDriverState *bs,
1560
assert(sizeof(volatile_header) == SECTOR_SIZE);
1561
1562
ret = bdrv_pread(file, const_header.volatile_header_offset * SECTOR_SIZE,
1563
- &volatile_header, sizeof(volatile_header), 0);
1564
+ sizeof(volatile_header), &volatile_header, 0);
1565
if (ret < 0) {
1566
bdrv_refresh_filename(file->bs);
1567
error_setg_errno(errp, -ret,
1568
@@ -XXX,XX +XXX,XX @@ static char *vmdk_read_desc(BdrvChild *file, uint64_t desc_offset, Error **errp)
1569
size = MIN(size, (1 << 20) - 1); /* avoid unbounded allocation */
1570
buf = g_malloc(size + 1);
1571
1572
- ret = bdrv_pread(file, desc_offset, buf, size, 0);
1573
+ ret = bdrv_pread(file, desc_offset, size, buf, 0);
1574
if (ret < 0) {
1575
error_setg_errno(errp, -ret, "Could not read from file");
1576
g_free(buf);
1577
@@ -XXX,XX +XXX,XX @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
1578
int64_t l1_backup_offset = 0;
1579
bool compressed;
1580
1581
- ret = bdrv_pread(file, sizeof(magic), &header, sizeof(header), 0);
1582
+ ret = bdrv_pread(file, sizeof(magic), sizeof(header), &header, 0);
1583
if (ret < 0) {
1584
bdrv_refresh_filename(file->bs);
1585
error_setg_errno(errp, -ret,
1586
@@ -XXX,XX +XXX,XX @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
1587
} QEMU_PACKED footer;
1588
1589
ret = bdrv_pread(file, bs->file->bs->total_sectors * 512 - 1536,
1590
- &footer, sizeof(footer), 0);
1591
+ sizeof(footer), &footer, 0);
1592
if (ret < 0) {
1593
error_setg_errno(errp, -ret, "Failed to read footer");
1594
return ret;
1595
@@ -XXX,XX +XXX,XX @@ static int get_whole_cluster(BlockDriverState *bs,
1596
if (copy_from_backing) {
1597
/* qcow2 emits this on bs->file instead of bs->backing */
1598
BLKDBG_EVENT(extent->file, BLKDBG_COW_READ);
1599
- ret = bdrv_pread(bs->backing, offset, whole_grain,
1600
- skip_start_bytes, 0);
1601
+ ret = bdrv_pread(bs->backing, offset, skip_start_bytes,
1602
+ whole_grain, 0);
1603
if (ret < 0) {
1604
ret = VMDK_ERROR;
1605
goto exit;
1606
}
1607
}
1608
BLKDBG_EVENT(extent->file, BLKDBG_COW_WRITE);
1609
- ret = bdrv_pwrite(extent->file, cluster_offset, whole_grain,
1610
- skip_start_bytes, 0);
1611
+ ret = bdrv_pwrite(extent->file, cluster_offset, skip_start_bytes,
1612
+ whole_grain, 0);
1613
if (ret < 0) {
1614
ret = VMDK_ERROR;
1615
goto exit;
1616
@@ -XXX,XX +XXX,XX @@ static int get_whole_cluster(BlockDriverState *bs,
1617
/* qcow2 emits this on bs->file instead of bs->backing */
1618
BLKDBG_EVENT(extent->file, BLKDBG_COW_READ);
1619
ret = bdrv_pread(bs->backing, offset + skip_end_bytes,
1620
- whole_grain + skip_end_bytes,
1621
- cluster_bytes - skip_end_bytes, 0);
1622
+ cluster_bytes - skip_end_bytes,
1623
+ whole_grain + skip_end_bytes, 0);
1624
if (ret < 0) {
1625
ret = VMDK_ERROR;
1626
goto exit;
1627
@@ -XXX,XX +XXX,XX @@ static int get_whole_cluster(BlockDriverState *bs,
1628
}
1629
BLKDBG_EVENT(extent->file, BLKDBG_COW_WRITE);
1630
ret = bdrv_pwrite(extent->file, cluster_offset + skip_end_bytes,
1631
- whole_grain + skip_end_bytes,
1632
- cluster_bytes - skip_end_bytes, 0);
1633
+ cluster_bytes - skip_end_bytes,
1634
+ whole_grain + skip_end_bytes, 0);
1635
if (ret < 0) {
1636
ret = VMDK_ERROR;
1637
goto exit;
1638
@@ -XXX,XX +XXX,XX @@ static int vmdk_L2update(VmdkExtent *extent, VmdkMetaData *m_data,
1639
if (bdrv_pwrite(extent->file,
1640
((int64_t)m_data->l2_offset * 512)
1641
+ (m_data->l2_index * sizeof(offset)),
1642
- &offset, sizeof(offset), 0) < 0) {
1643
+ sizeof(offset), &offset, 0) < 0) {
1644
return VMDK_ERROR;
1645
}
1646
/* update backup L2 table */
1647
@@ -XXX,XX +XXX,XX @@ static int vmdk_L2update(VmdkExtent *extent, VmdkMetaData *m_data,
1648
if (bdrv_pwrite(extent->file,
1649
((int64_t)m_data->l2_offset * 512)
1650
+ (m_data->l2_index * sizeof(offset)),
1651
- &offset, sizeof(offset), 0) < 0) {
1652
+ sizeof(offset), &offset, 0) < 0) {
1653
return VMDK_ERROR;
1654
}
1655
}
1656
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
1657
BLKDBG_EVENT(extent->file, BLKDBG_L2_LOAD);
1658
if (bdrv_pread(extent->file,
1659
(int64_t)l2_offset * 512,
1660
- l2_table,
1661
l2_size_bytes,
1662
+ l2_table,
1663
0
1664
) != l2_size_bytes) {
1665
return VMDK_ERROR;
1666
@@ -XXX,XX +XXX,XX @@ static int vmdk_read_extent(VmdkExtent *extent, int64_t cluster_offset,
1667
cluster_buf = g_malloc(buf_bytes);
1668
uncomp_buf = g_malloc(cluster_bytes);
1669
BLKDBG_EVENT(extent->file, BLKDBG_READ_COMPRESSED);
1670
- ret = bdrv_pread(extent->file, cluster_offset, cluster_buf, buf_bytes, 0);
1671
+ ret = bdrv_pread(extent->file, cluster_offset, buf_bytes, cluster_buf, 0);
1672
if (ret < 0) {
1673
goto out;
1674
}
1675
diff --git a/block/vpc.c b/block/vpc.c
1676
index XXXXXXX..XXXXXXX 100644
1677
--- a/block/vpc.c
1678
+++ b/block/vpc.c
1679
@@ -XXX,XX +XXX,XX @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags,
1680
goto fail;
1681
}
1682
1683
- ret = bdrv_pread(bs->file, 0, &s->footer, sizeof(s->footer), 0);
1684
+ ret = bdrv_pread(bs->file, 0, sizeof(s->footer), &s->footer, 0);
1685
if (ret < 0) {
1686
error_setg(errp, "Unable to read VHD header");
1687
goto fail;
1688
@@ -XXX,XX +XXX,XX @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags,
1689
}
1690
1691
/* If a fixed disk, the footer is found only at the end of the file */
1692
- ret = bdrv_pread(bs->file, offset - sizeof(*footer), footer,
1693
- sizeof(*footer), 0);
1694
+ ret = bdrv_pread(bs->file, offset - sizeof(*footer), sizeof(*footer),
1695
+ footer, 0);
1696
if (ret < 0) {
1697
goto fail;
1698
}
1699
@@ -XXX,XX +XXX,XX @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags,
1700
1701
if (disk_type == VHD_DYNAMIC) {
1702
ret = bdrv_pread(bs->file, be64_to_cpu(footer->data_offset),
1703
- &dyndisk_header, sizeof(dyndisk_header), 0);
1704
+ sizeof(dyndisk_header), &dyndisk_header, 0);
1705
if (ret < 0) {
1706
error_setg(errp, "Error reading dynamic VHD header");
1707
goto fail;
1708
@@ -XXX,XX +XXX,XX @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags,
1709
1710
s->bat_offset = be64_to_cpu(dyndisk_header.table_offset);
1711
1712
- ret = bdrv_pread(bs->file, s->bat_offset, s->pagetable,
1713
- pagetable_size, 0);
1714
+ ret = bdrv_pread(bs->file, s->bat_offset, pagetable_size,
1715
+ s->pagetable, 0);
1716
if (ret < 0) {
1717
error_setg(errp, "Error reading pagetable");
1718
goto fail;
1719
@@ -XXX,XX +XXX,XX @@ static inline int64_t get_image_offset(BlockDriverState *bs, uint64_t offset,
1720
1721
s->last_bitmap_offset = bitmap_offset;
1722
memset(bitmap, 0xff, s->bitmap_size);
1723
- r = bdrv_pwrite_sync(bs->file, bitmap_offset, bitmap, s->bitmap_size,
1724
+ r = bdrv_pwrite_sync(bs->file, bitmap_offset, s->bitmap_size, bitmap,
1725
0);
1726
if (r < 0) {
1727
*err = r;
1728
@@ -XXX,XX +XXX,XX @@ static int rewrite_footer(BlockDriverState *bs)
1729
BDRVVPCState *s = bs->opaque;
1730
int64_t offset = s->free_data_block_offset;
1731
1732
- ret = bdrv_pwrite_sync(bs->file, offset, &s->footer, sizeof(s->footer), 0);
1733
+ ret = bdrv_pwrite_sync(bs->file, offset, sizeof(s->footer), &s->footer, 0);
1734
if (ret < 0)
1735
return ret;
1736
1737
@@ -XXX,XX +XXX,XX @@ static int64_t alloc_block(BlockDriverState *bs, int64_t offset)
1738
1739
/* Initialize the block's bitmap */
1740
memset(bitmap, 0xff, s->bitmap_size);
1741
- ret = bdrv_pwrite_sync(bs->file, s->free_data_block_offset, bitmap,
1742
- s->bitmap_size, 0);
1743
+ ret = bdrv_pwrite_sync(bs->file, s->free_data_block_offset,
1744
+ s->bitmap_size, bitmap, 0);
1745
if (ret < 0) {
1746
return ret;
1747
}
1748
@@ -XXX,XX +XXX,XX @@ static int64_t alloc_block(BlockDriverState *bs, int64_t offset)
1749
/* Write BAT entry to disk */
1750
bat_offset = s->bat_offset + (4 * index);
1751
bat_value = cpu_to_be32(s->pagetable[index]);
1752
- ret = bdrv_pwrite_sync(bs->file, bat_offset, &bat_value, 4, 0);
1753
+ ret = bdrv_pwrite_sync(bs->file, bat_offset, 4, &bat_value, 0);
1754
if (ret < 0)
1755
goto fail;
1756
1757
diff --git a/block/vvfat.c b/block/vvfat.c
1758
index XXXXXXX..XXXXXXX 100644
1759
--- a/block/vvfat.c
1760
+++ b/block/vvfat.c
1761
@@ -XXX,XX +XXX,XX @@ static int vvfat_read(BlockDriverState *bs, int64_t sector_num,
1762
DLOG(fprintf(stderr, "sectors %" PRId64 "+%" PRId64
1763
" allocated\n", sector_num,
1764
n >> BDRV_SECTOR_BITS));
1765
- if (bdrv_pread(s->qcow, sector_num * BDRV_SECTOR_SIZE,
1766
- buf + i * 0x200, n, 0) < 0) {
1767
+ if (bdrv_pread(s->qcow, sector_num * BDRV_SECTOR_SIZE, n,
1768
+ buf + i * 0x200, 0) < 0) {
1769
return -1;
1770
}
1771
i += (n >> BDRV_SECTOR_BITS) - 1;
1772
@@ -XXX,XX +XXX,XX @@ static uint32_t get_cluster_count_for_direntry(BDRVVVFATState* s,
1773
return -1;
1774
}
1775
res = bdrv_pwrite(s->qcow, offset * BDRV_SECTOR_SIZE,
1776
- s->cluster_buffer, BDRV_SECTOR_SIZE,
1777
+ BDRV_SECTOR_SIZE, s->cluster_buffer,
1778
0);
1779
if (res < 0) {
1780
return -2;
1781
@@ -XXX,XX +XXX,XX @@ DLOG(checkpoint());
1782
* Use qcow backend. Commit later.
1783
*/
1784
DLOG(fprintf(stderr, "Write to qcow backend: %d + %d\n", (int)sector_num, nb_sectors));
1785
- ret = bdrv_pwrite(s->qcow, sector_num * BDRV_SECTOR_SIZE, buf,
1786
- nb_sectors * BDRV_SECTOR_SIZE, 0);
1787
+ ret = bdrv_pwrite(s->qcow, sector_num * BDRV_SECTOR_SIZE,
1788
+ nb_sectors * BDRV_SECTOR_SIZE, buf, 0);
1789
if (ret < 0) {
1790
fprintf(stderr, "Error writing to qcow backend\n");
1791
return ret;
1792
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
1793
index XXXXXXX..XXXXXXX 100644
1794
--- a/tests/unit/test-block-iothread.c
1795
+++ b/tests/unit/test-block-iothread.c
1796
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_pread(BdrvChild *c)
1797
int ret;
1798
1799
/* Success */
1800
- ret = bdrv_pread(c, 0, buf, sizeof(buf), 0);
1801
+ ret = bdrv_pread(c, 0, sizeof(buf), buf, 0);
1802
g_assert_cmpint(ret, ==, 512);
1803
1804
/* Early error: Negative offset */
1805
- ret = bdrv_pread(c, -2, buf, sizeof(buf), 0);
1806
+ ret = bdrv_pread(c, -2, sizeof(buf), buf, 0);
1807
g_assert_cmpint(ret, ==, -EIO);
1808
}
1809
1810
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_pwrite(BdrvChild *c)
1811
int ret;
1812
1813
/* Success */
1814
- ret = bdrv_pwrite(c, 0, buf, sizeof(buf), 0);
1815
+ ret = bdrv_pwrite(c, 0, sizeof(buf), buf, 0);
1816
g_assert_cmpint(ret, ==, 512);
1817
1818
/* Early error: Negative offset */
1819
- ret = bdrv_pwrite(c, -2, buf, sizeof(buf), 0);
1820
+ ret = bdrv_pwrite(c, -2, sizeof(buf), buf, 0);
1821
g_assert_cmpint(ret, ==, -EIO);
1822
}
1823
1824
--
1825
2.35.3
diff view generated by jsdifflib
New patch
1
1
From: Alberto Faria <afaria@redhat.com>
2
3
They currently return the value of their 'bytes' parameter on success.
4
5
Make them return 0 instead, for consistency with other I/O functions and
6
in preparation to implement them using generated_co_wrapper. This also
7
makes it clear that short reads/writes are not possible.
8
9
The few callers that rely on the previous behavior are adjusted
10
accordingly by hand.
11
12
Signed-off-by: Alberto Faria <afaria@redhat.com>
13
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
14
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
15
Message-Id: <20220609152744.3891847-4-afaria@redhat.com>
16
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
17
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
18
---
19
block/cloop.c | 2 +-
20
block/crypto.c | 4 ++--
21
block/dmg.c | 10 +++++-----
22
block/io.c | 10 ++--------
23
block/qcow.c | 2 +-
24
block/qcow2.c | 4 ++--
25
block/qed.c | 7 +------
26
block/vdi.c | 2 +-
27
block/vmdk.c | 5 ++---
28
tests/unit/test-block-iothread.c | 4 ++--
29
10 files changed, 19 insertions(+), 31 deletions(-)
30
31
diff --git a/block/cloop.c b/block/cloop.c
32
index XXXXXXX..XXXXXXX 100644
33
--- a/block/cloop.c
34
+++ b/block/cloop.c
35
@@ -XXX,XX +XXX,XX @@ static inline int cloop_read_block(BlockDriverState *bs, int block_num)
36
37
ret = bdrv_pread(bs->file, s->offsets[block_num], bytes,
38
s->compressed_block, 0);
39
- if (ret != bytes) {
40
+ if (ret < 0) {
41
return -1;
42
}
43
44
diff --git a/block/crypto.c b/block/crypto.c
45
index XXXXXXX..XXXXXXX 100644
46
--- a/block/crypto.c
47
+++ b/block/crypto.c
48
@@ -XXX,XX +XXX,XX @@ static ssize_t block_crypto_read_func(QCryptoBlock *block,
49
error_setg_errno(errp, -ret, "Could not read encryption header");
50
return ret;
51
}
52
- return ret;
53
+ return buflen;
54
}
55
56
static ssize_t block_crypto_write_func(QCryptoBlock *block,
57
@@ -XXX,XX +XXX,XX @@ static ssize_t block_crypto_write_func(QCryptoBlock *block,
58
error_setg_errno(errp, -ret, "Could not write encryption header");
59
return ret;
60
}
61
- return ret;
62
+ return buflen;
63
}
64
65
66
diff --git a/block/dmg.c b/block/dmg.c
67
index XXXXXXX..XXXXXXX 100644
68
--- a/block/dmg.c
69
+++ b/block/dmg.c
70
@@ -XXX,XX +XXX,XX @@ static int dmg_read_plist_xml(BlockDriverState *bs, DmgHeaderState *ds,
71
buffer = g_malloc(info_length + 1);
72
buffer[info_length] = '\0';
73
ret = bdrv_pread(bs->file, info_begin, info_length, buffer, 0);
74
- if (ret != info_length) {
75
+ if (ret < 0) {
76
ret = -EINVAL;
77
goto fail;
78
}
79
@@ -XXX,XX +XXX,XX @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
80
* inflated. */
81
ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
82
s->compressed_chunk, 0);
83
- if (ret != s->lengths[chunk]) {
84
+ if (ret < 0) {
85
return -1;
86
}
87
88
@@ -XXX,XX +XXX,XX @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
89
* inflated. */
90
ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
91
s->compressed_chunk, 0);
92
- if (ret != s->lengths[chunk]) {
93
+ if (ret < 0) {
94
return -1;
95
}
96
97
@@ -XXX,XX +XXX,XX @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
98
* inflated. */
99
ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
100
s->compressed_chunk, 0);
101
- if (ret != s->lengths[chunk]) {
102
+ if (ret < 0) {
103
return -1;
104
}
105
106
@@ -XXX,XX +XXX,XX @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
107
case UDRW: /* copy */
108
ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
109
s->uncompressed_chunk, 0);
110
- if (ret != s->lengths[chunk]) {
111
+ if (ret < 0) {
112
return -1;
113
}
114
break;
115
diff --git a/block/io.c b/block/io.c
116
index XXXXXXX..XXXXXXX 100644
117
--- a/block/io.c
118
+++ b/block/io.c
119
@@ -XXX,XX +XXX,XX @@ int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags)
120
int bdrv_pread(BdrvChild *child, int64_t offset, int64_t bytes, void *buf,
121
BdrvRequestFlags flags)
122
{
123
- int ret;
124
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
125
IO_CODE();
126
127
@@ -XXX,XX +XXX,XX @@ int bdrv_pread(BdrvChild *child, int64_t offset, int64_t bytes, void *buf,
128
return -EINVAL;
129
}
130
131
- ret = bdrv_preadv(child, offset, bytes, &qiov, flags);
132
-
133
- return ret < 0 ? ret : bytes;
134
+ return bdrv_preadv(child, offset, bytes, &qiov, flags);
135
}
136
137
/* Return no. of bytes on success or < 0 on error. Important errors are:
138
@@ -XXX,XX +XXX,XX @@ int bdrv_pread(BdrvChild *child, int64_t offset, int64_t bytes, void *buf,
139
int bdrv_pwrite(BdrvChild *child, int64_t offset, int64_t bytes,
140
const void *buf, BdrvRequestFlags flags)
141
{
142
- int ret;
143
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
144
IO_CODE();
145
146
@@ -XXX,XX +XXX,XX @@ int bdrv_pwrite(BdrvChild *child, int64_t offset, int64_t bytes,
147
return -EINVAL;
148
}
149
150
- ret = bdrv_pwritev(child, offset, bytes, &qiov, flags);
151
-
152
- return ret < 0 ? ret : bytes;
153
+ return bdrv_pwritev(child, offset, bytes, &qiov, flags);
154
}
155
156
/*
157
diff --git a/block/qcow.c b/block/qcow.c
158
index XXXXXXX..XXXXXXX 100644
159
--- a/block/qcow.c
160
+++ b/block/qcow.c
161
@@ -XXX,XX +XXX,XX @@ static int decompress_cluster(BlockDriverState *bs, uint64_t cluster_offset)
162
csize &= (s->cluster_size - 1);
163
BLKDBG_EVENT(bs->file, BLKDBG_READ_COMPRESSED);
164
ret = bdrv_pread(bs->file, coffset, csize, s->cluster_data, 0);
165
- if (ret != csize)
166
+ if (ret < 0)
167
return -1;
168
if (decompress_buffer(s->cluster_cache, s->cluster_size,
169
s->cluster_data, csize) < 0) {
170
diff --git a/block/qcow2.c b/block/qcow2.c
171
index XXXXXXX..XXXXXXX 100644
172
--- a/block/qcow2.c
173
+++ b/block/qcow2.c
174
@@ -XXX,XX +XXX,XX @@ static ssize_t qcow2_crypto_hdr_read_func(QCryptoBlock *block, size_t offset,
175
error_setg_errno(errp, -ret, "Could not read encryption header");
176
return -1;
177
}
178
- return ret;
179
+ return buflen;
180
}
181
182
183
@@ -XXX,XX +XXX,XX @@ static ssize_t qcow2_crypto_hdr_write_func(QCryptoBlock *block, size_t offset,
184
error_setg_errno(errp, -ret, "Could not read encryption header");
185
return -1;
186
}
187
- return ret;
188
+ return buflen;
189
}
190
191
static QDict*
192
diff --git a/block/qed.c b/block/qed.c
193
index XXXXXXX..XXXXXXX 100644
194
--- a/block/qed.c
195
+++ b/block/qed.c
196
@@ -XXX,XX +XXX,XX @@ static void qed_header_cpu_to_le(const QEDHeader *cpu, QEDHeader *le)
197
int qed_write_header_sync(BDRVQEDState *s)
198
{
199
QEDHeader le;
200
- int ret;
201
202
qed_header_cpu_to_le(&s->header, &le);
203
- ret = bdrv_pwrite(s->bs->file, 0, sizeof(le), &le, 0);
204
- if (ret != sizeof(le)) {
205
- return ret;
206
- }
207
- return 0;
208
+ return bdrv_pwrite(s->bs->file, 0, sizeof(le), &le, 0);
209
}
210
211
/**
212
diff --git a/block/vdi.c b/block/vdi.c
213
index XXXXXXX..XXXXXXX 100644
214
--- a/block/vdi.c
215
+++ b/block/vdi.c
216
@@ -XXX,XX +XXX,XX @@ nonallocating_write:
217
n_sectors * SECTOR_SIZE, base, 0);
218
}
219
220
- return ret < 0 ? ret : 0;
221
+ return ret;
222
}
223
224
static int coroutine_fn vdi_co_do_create(BlockdevCreateOptions *create_options,
225
diff --git a/block/vmdk.c b/block/vmdk.c
226
index XXXXXXX..XXXXXXX 100644
227
--- a/block/vmdk.c
228
+++ b/block/vmdk.c
229
@@ -XXX,XX +XXX,XX @@ static int vmdk_parent_open(BlockDriverState *bs)
230
if (ret < 0) {
231
goto out;
232
}
233
- ret = 0;
234
235
p_name = strstr(desc, "parentFileNameHint");
236
if (p_name != NULL) {
237
@@ -XXX,XX +XXX,XX @@ static char *vmdk_read_desc(BdrvChild *file, uint64_t desc_offset, Error **errp)
238
g_free(buf);
239
return NULL;
240
}
241
- buf[ret] = 0;
242
+ buf[size] = 0;
243
244
return buf;
245
}
246
@@ -XXX,XX +XXX,XX @@ static int get_cluster_offset(BlockDriverState *bs,
247
l2_size_bytes,
248
l2_table,
249
0
250
- ) != l2_size_bytes) {
251
+ ) < 0) {
252
return VMDK_ERROR;
253
}
254
255
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
256
index XXXXXXX..XXXXXXX 100644
257
--- a/tests/unit/test-block-iothread.c
258
+++ b/tests/unit/test-block-iothread.c
259
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_pread(BdrvChild *c)
260
261
/* Success */
262
ret = bdrv_pread(c, 0, sizeof(buf), buf, 0);
263
- g_assert_cmpint(ret, ==, 512);
264
+ g_assert_cmpint(ret, ==, 0);
265
266
/* Early error: Negative offset */
267
ret = bdrv_pread(c, -2, sizeof(buf), buf, 0);
268
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_pwrite(BdrvChild *c)
269
270
/* Success */
271
ret = bdrv_pwrite(c, 0, sizeof(buf), buf, 0);
272
- g_assert_cmpint(ret, ==, 512);
273
+ g_assert_cmpint(ret, ==, 0);
274
275
/* Early error: Negative offset */
276
ret = bdrv_pwrite(c, -2, sizeof(buf), buf, 0);
277
--
278
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
They currently return the value of their headerlen/buflen parameter on
4
success. Returning 0 instead makes it clear that short reads/writes are
5
not possible.
6
7
Signed-off-by: Alberto Faria <afaria@redhat.com>
8
Reviewed-by: Eric Blake <eblake@redhat.com>
9
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
10
Message-Id: <20220609152744.3891847-5-afaria@redhat.com>
11
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
12
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
13
---
14
include/crypto/block.h | 32 ++++++++++-----------
15
block/crypto.c | 52 +++++++++++++++++-----------------
16
block/qcow2.c | 22 +++++++-------
17
crypto/block-luks.c | 8 +++---
18
crypto/block.c | 6 ++--
19
tests/unit/test-crypto-block.c | 38 ++++++++++++-------------
20
6 files changed, 79 insertions(+), 79 deletions(-)
21
22
diff --git a/include/crypto/block.h b/include/crypto/block.h
23
index XXXXXXX..XXXXXXX 100644
24
--- a/include/crypto/block.h
25
+++ b/include/crypto/block.h
26
@@ -XXX,XX +XXX,XX @@ typedef struct QCryptoBlock QCryptoBlock;
27
/* See also QCryptoBlockFormat, QCryptoBlockCreateOptions
28
* and QCryptoBlockOpenOptions in qapi/crypto.json */
29
30
-typedef ssize_t (*QCryptoBlockReadFunc)(QCryptoBlock *block,
31
- size_t offset,
32
- uint8_t *buf,
33
- size_t buflen,
34
- void *opaque,
35
- Error **errp);
36
+typedef int (*QCryptoBlockReadFunc)(QCryptoBlock *block,
37
+ size_t offset,
38
+ uint8_t *buf,
39
+ size_t buflen,
40
+ void *opaque,
41
+ Error **errp);
42
43
-typedef ssize_t (*QCryptoBlockInitFunc)(QCryptoBlock *block,
44
- size_t headerlen,
45
- void *opaque,
46
- Error **errp);
47
+typedef int (*QCryptoBlockInitFunc)(QCryptoBlock *block,
48
+ size_t headerlen,
49
+ void *opaque,
50
+ Error **errp);
51
52
-typedef ssize_t (*QCryptoBlockWriteFunc)(QCryptoBlock *block,
53
- size_t offset,
54
- const uint8_t *buf,
55
- size_t buflen,
56
- void *opaque,
57
- Error **errp);
58
+typedef int (*QCryptoBlockWriteFunc)(QCryptoBlock *block,
59
+ size_t offset,
60
+ const uint8_t *buf,
61
+ size_t buflen,
62
+ void *opaque,
63
+ Error **errp);
64
65
/**
66
* qcrypto_block_has_format:
67
diff --git a/block/crypto.c b/block/crypto.c
68
index XXXXXXX..XXXXXXX 100644
69
--- a/block/crypto.c
70
+++ b/block/crypto.c
71
@@ -XXX,XX +XXX,XX @@ static int block_crypto_probe_generic(QCryptoBlockFormat format,
72
}
73
74
75
-static ssize_t block_crypto_read_func(QCryptoBlock *block,
76
- size_t offset,
77
- uint8_t *buf,
78
- size_t buflen,
79
- void *opaque,
80
- Error **errp)
81
+static int block_crypto_read_func(QCryptoBlock *block,
82
+ size_t offset,
83
+ uint8_t *buf,
84
+ size_t buflen,
85
+ void *opaque,
86
+ Error **errp)
87
{
88
BlockDriverState *bs = opaque;
89
ssize_t ret;
90
@@ -XXX,XX +XXX,XX @@ static ssize_t block_crypto_read_func(QCryptoBlock *block,
91
error_setg_errno(errp, -ret, "Could not read encryption header");
92
return ret;
93
}
94
- return buflen;
95
+ return 0;
96
}
97
98
-static ssize_t block_crypto_write_func(QCryptoBlock *block,
99
- size_t offset,
100
- const uint8_t *buf,
101
- size_t buflen,
102
- void *opaque,
103
- Error **errp)
104
+static int block_crypto_write_func(QCryptoBlock *block,
105
+ size_t offset,
106
+ const uint8_t *buf,
107
+ size_t buflen,
108
+ void *opaque,
109
+ Error **errp)
110
{
111
BlockDriverState *bs = opaque;
112
ssize_t ret;
113
@@ -XXX,XX +XXX,XX @@ static ssize_t block_crypto_write_func(QCryptoBlock *block,
114
error_setg_errno(errp, -ret, "Could not write encryption header");
115
return ret;
116
}
117
- return buflen;
118
+ return 0;
119
}
120
121
122
@@ -XXX,XX +XXX,XX @@ struct BlockCryptoCreateData {
123
};
124
125
126
-static ssize_t block_crypto_create_write_func(QCryptoBlock *block,
127
- size_t offset,
128
- const uint8_t *buf,
129
- size_t buflen,
130
- void *opaque,
131
- Error **errp)
132
+static int block_crypto_create_write_func(QCryptoBlock *block,
133
+ size_t offset,
134
+ const uint8_t *buf,
135
+ size_t buflen,
136
+ void *opaque,
137
+ Error **errp)
138
{
139
struct BlockCryptoCreateData *data = opaque;
140
ssize_t ret;
141
@@ -XXX,XX +XXX,XX @@ static ssize_t block_crypto_create_write_func(QCryptoBlock *block,
142
error_setg_errno(errp, -ret, "Could not write encryption header");
143
return ret;
144
}
145
- return ret;
146
+ return 0;
147
}
148
149
-static ssize_t block_crypto_create_init_func(QCryptoBlock *block,
150
- size_t headerlen,
151
- void *opaque,
152
- Error **errp)
153
+static int block_crypto_create_init_func(QCryptoBlock *block,
154
+ size_t headerlen,
155
+ void *opaque,
156
+ Error **errp)
157
{
158
struct BlockCryptoCreateData *data = opaque;
159
Error *local_error = NULL;
160
@@ -XXX,XX +XXX,XX @@ static ssize_t block_crypto_create_init_func(QCryptoBlock *block,
161
data->prealloc, 0, &local_error);
162
163
if (ret >= 0) {
164
- return ret;
165
+ return 0;
166
}
167
168
error:
169
diff --git a/block/qcow2.c b/block/qcow2.c
170
index XXXXXXX..XXXXXXX 100644
171
--- a/block/qcow2.c
172
+++ b/block/qcow2.c
173
@@ -XXX,XX +XXX,XX @@ static int qcow2_probe(const uint8_t *buf, int buf_size, const char *filename)
174
}
175
176
177
-static ssize_t qcow2_crypto_hdr_read_func(QCryptoBlock *block, size_t offset,
178
- uint8_t *buf, size_t buflen,
179
- void *opaque, Error **errp)
180
+static int qcow2_crypto_hdr_read_func(QCryptoBlock *block, size_t offset,
181
+ uint8_t *buf, size_t buflen,
182
+ void *opaque, Error **errp)
183
{
184
BlockDriverState *bs = opaque;
185
BDRVQcow2State *s = bs->opaque;
186
@@ -XXX,XX +XXX,XX @@ static ssize_t qcow2_crypto_hdr_read_func(QCryptoBlock *block, size_t offset,
187
error_setg_errno(errp, -ret, "Could not read encryption header");
188
return -1;
189
}
190
- return buflen;
191
+ return 0;
192
}
193
194
195
-static ssize_t qcow2_crypto_hdr_init_func(QCryptoBlock *block, size_t headerlen,
196
- void *opaque, Error **errp)
197
+static int qcow2_crypto_hdr_init_func(QCryptoBlock *block, size_t headerlen,
198
+ void *opaque, Error **errp)
199
{
200
BlockDriverState *bs = opaque;
201
BDRVQcow2State *s = bs->opaque;
202
@@ -XXX,XX +XXX,XX @@ static ssize_t qcow2_crypto_hdr_init_func(QCryptoBlock *block, size_t headerlen,
203
return -1;
204
}
205
206
- return ret;
207
+ return 0;
208
}
209
210
211
-static ssize_t qcow2_crypto_hdr_write_func(QCryptoBlock *block, size_t offset,
212
- const uint8_t *buf, size_t buflen,
213
- void *opaque, Error **errp)
214
+static int qcow2_crypto_hdr_write_func(QCryptoBlock *block, size_t offset,
215
+ const uint8_t *buf, size_t buflen,
216
+ void *opaque, Error **errp)
217
{
218
BlockDriverState *bs = opaque;
219
BDRVQcow2State *s = bs->opaque;
220
@@ -XXX,XX +XXX,XX @@ static ssize_t qcow2_crypto_hdr_write_func(QCryptoBlock *block, size_t offset,
221
error_setg_errno(errp, -ret, "Could not read encryption header");
222
return -1;
223
}
224
- return buflen;
225
+ return 0;
226
}
227
228
static QDict*
229
diff --git a/crypto/block-luks.c b/crypto/block-luks.c
230
index XXXXXXX..XXXXXXX 100644
231
--- a/crypto/block-luks.c
232
+++ b/crypto/block-luks.c
233
@@ -XXX,XX +XXX,XX @@ qcrypto_block_luks_load_header(QCryptoBlock *block,
234
void *opaque,
235
Error **errp)
236
{
237
- ssize_t rv;
238
+ int rv;
239
size_t i;
240
QCryptoBlockLUKS *luks = block->opaque;
241
242
@@ -XXX,XX +XXX,XX @@ qcrypto_block_luks_store_key(QCryptoBlock *block,
243
QCRYPTO_BLOCK_LUKS_SECTOR_SIZE,
244
splitkey, splitkeylen,
245
opaque,
246
- errp) != splitkeylen) {
247
+ errp) < 0) {
248
goto cleanup;
249
}
250
251
@@ -XXX,XX +XXX,XX @@ qcrypto_block_luks_load_key(QCryptoBlock *block,
252
g_autofree uint8_t *splitkey = NULL;
253
size_t splitkeylen;
254
g_autofree uint8_t *possiblekey = NULL;
255
- ssize_t rv;
256
+ int rv;
257
g_autoptr(QCryptoCipher) cipher = NULL;
258
uint8_t keydigest[QCRYPTO_BLOCK_LUKS_DIGEST_LEN];
259
g_autoptr(QCryptoIVGen) ivgen = NULL;
260
@@ -XXX,XX +XXX,XX @@ qcrypto_block_luks_erase_key(QCryptoBlock *block,
261
garbagesplitkey,
262
splitkeylen,
263
opaque,
264
- &local_err) != splitkeylen) {
265
+ &local_err) < 0) {
266
error_propagate(errp, local_err);
267
return -1;
268
}
269
diff --git a/crypto/block.c b/crypto/block.c
270
index XXXXXXX..XXXXXXX 100644
271
--- a/crypto/block.c
272
+++ b/crypto/block.c
273
@@ -XXX,XX +XXX,XX @@ QCryptoBlock *qcrypto_block_create(QCryptoBlockCreateOptions *options,
274
}
275
276
277
-static ssize_t qcrypto_block_headerlen_hdr_init_func(QCryptoBlock *block,
278
+static int qcrypto_block_headerlen_hdr_init_func(QCryptoBlock *block,
279
size_t headerlen, void *opaque, Error **errp)
280
{
281
size_t *headerlenp = opaque;
282
@@ -XXX,XX +XXX,XX @@ static ssize_t qcrypto_block_headerlen_hdr_init_func(QCryptoBlock *block,
283
}
284
285
286
-static ssize_t qcrypto_block_headerlen_hdr_write_func(QCryptoBlock *block,
287
+static int qcrypto_block_headerlen_hdr_write_func(QCryptoBlock *block,
288
size_t offset, const uint8_t *buf, size_t buflen,
289
void *opaque, Error **errp)
290
{
291
/* Discard the bytes, we're not actually writing to an image */
292
- return buflen;
293
+ return 0;
294
}
295
296
297
diff --git a/tests/unit/test-crypto-block.c b/tests/unit/test-crypto-block.c
298
index XXXXXXX..XXXXXXX 100644
299
--- a/tests/unit/test-crypto-block.c
300
+++ b/tests/unit/test-crypto-block.c
301
@@ -XXX,XX +XXX,XX @@ static struct QCryptoBlockTestData {
302
};
303
304
305
-static ssize_t test_block_read_func(QCryptoBlock *block,
306
- size_t offset,
307
- uint8_t *buf,
308
- size_t buflen,
309
- void *opaque,
310
- Error **errp)
311
+static int test_block_read_func(QCryptoBlock *block,
312
+ size_t offset,
313
+ uint8_t *buf,
314
+ size_t buflen,
315
+ void *opaque,
316
+ Error **errp)
317
{
318
Buffer *header = opaque;
319
320
@@ -XXX,XX +XXX,XX @@ static ssize_t test_block_read_func(QCryptoBlock *block,
321
322
memcpy(buf, header->buffer + offset, buflen);
323
324
- return buflen;
325
+ return 0;
326
}
327
328
329
-static ssize_t test_block_init_func(QCryptoBlock *block,
330
- size_t headerlen,
331
- void *opaque,
332
- Error **errp)
333
+static int test_block_init_func(QCryptoBlock *block,
334
+ size_t headerlen,
335
+ void *opaque,
336
+ Error **errp)
337
{
338
Buffer *header = opaque;
339
340
@@ -XXX,XX +XXX,XX @@ static ssize_t test_block_init_func(QCryptoBlock *block,
341
342
buffer_reserve(header, headerlen);
343
344
- return headerlen;
345
+ return 0;
346
}
347
348
349
-static ssize_t test_block_write_func(QCryptoBlock *block,
350
- size_t offset,
351
- const uint8_t *buf,
352
- size_t buflen,
353
- void *opaque,
354
- Error **errp)
355
+static int test_block_write_func(QCryptoBlock *block,
356
+ size_t offset,
357
+ const uint8_t *buf,
358
+ size_t buflen,
359
+ void *opaque,
360
+ Error **errp)
361
{
362
Buffer *header = opaque;
363
364
@@ -XXX,XX +XXX,XX @@ static ssize_t test_block_write_func(QCryptoBlock *block,
365
memcpy(header->buffer + offset, buf, buflen);
366
header->offset = offset + buflen;
367
368
- return buflen;
369
+ return 0;
370
}
371
372
373
--
374
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
It does not mutate the buffer.
4
5
Signed-off-by: Alberto Faria <afaria@redhat.com>
6
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
7
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
8
Message-Id: <20220609152744.3891847-6-afaria@redhat.com>
9
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
10
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
11
---
12
include/block/block_int-io.h | 2 +-
13
1 file changed, 1 insertion(+), 1 deletion(-)
14
15
diff --git a/include/block/block_int-io.h b/include/block/block_int-io.h
16
index XXXXXXX..XXXXXXX 100644
17
--- a/include/block/block_int-io.h
18
+++ b/include/block/block_int-io.h
19
@@ -XXX,XX +XXX,XX @@ static inline int coroutine_fn bdrv_co_pread(BdrvChild *child,
20
}
21
22
static inline int coroutine_fn bdrv_co_pwrite(BdrvChild *child,
23
- int64_t offset, unsigned int bytes, void *buf, BdrvRequestFlags flags)
24
+ int64_t offset, unsigned int bytes, const void *buf, BdrvRequestFlags flags)
25
{
26
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
27
IO_CODE();
28
--
29
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
For consistency with other I/O functions, and in preparation to
4
implement bdrv_{pread,pwrite}() using generated_co_wrapper.
5
6
unsigned int fits in int64_t, so all callers remain correct.
7
8
bdrv_check_request32() is called further down the stack and causes -EIO
9
to be returned if 'bytes' is negative or greater than
10
BDRV_REQUEST_MAX_BYTES, which in turns never exceeds SIZE_MAX.
11
12
Signed-off-by: Alberto Faria <afaria@redhat.com>
13
Message-Id: <20220609152744.3891847-7-afaria@redhat.com>
14
Reviewed-by: Eric Blake <eblake@redhat.com>
15
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
16
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
17
---
18
block/coroutines.h | 4 ++--
19
include/block/block_int-io.h | 4 ++--
20
2 files changed, 4 insertions(+), 4 deletions(-)
21
22
diff --git a/block/coroutines.h b/block/coroutines.h
23
index XXXXXXX..XXXXXXX 100644
24
--- a/block/coroutines.h
25
+++ b/block/coroutines.h
26
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_do_flush(BlockBackend *blk);
27
*/
28
29
int generated_co_wrapper
30
-bdrv_preadv(BdrvChild *child, int64_t offset, unsigned int bytes,
31
+bdrv_preadv(BdrvChild *child, int64_t offset, int64_t bytes,
32
QEMUIOVector *qiov, BdrvRequestFlags flags);
33
34
int generated_co_wrapper
35
-bdrv_pwritev(BdrvChild *child, int64_t offset, unsigned int bytes,
36
+bdrv_pwritev(BdrvChild *child, int64_t offset, int64_t bytes,
37
QEMUIOVector *qiov, BdrvRequestFlags flags);
38
39
int generated_co_wrapper
40
diff --git a/include/block/block_int-io.h b/include/block/block_int-io.h
41
index XXXXXXX..XXXXXXX 100644
42
--- a/include/block/block_int-io.h
43
+++ b/include/block/block_int-io.h
44
@@ -XXX,XX +XXX,XX @@ int coroutine_fn bdrv_co_pwritev_part(BdrvChild *child,
45
QEMUIOVector *qiov, size_t qiov_offset, BdrvRequestFlags flags);
46
47
static inline int coroutine_fn bdrv_co_pread(BdrvChild *child,
48
- int64_t offset, unsigned int bytes, void *buf, BdrvRequestFlags flags)
49
+ int64_t offset, int64_t bytes, void *buf, BdrvRequestFlags flags)
50
{
51
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
52
IO_CODE();
53
@@ -XXX,XX +XXX,XX @@ static inline int coroutine_fn bdrv_co_pread(BdrvChild *child,
54
}
55
56
static inline int coroutine_fn bdrv_co_pwrite(BdrvChild *child,
57
- int64_t offset, unsigned int bytes, const void *buf, BdrvRequestFlags flags)
58
+ int64_t offset, int64_t bytes, const void *buf, BdrvRequestFlags flags)
59
{
60
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
61
IO_CODE();
62
--
63
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
bdrv_{pread,pwrite}() now return -EIO instead of -EINVAL when 'bytes' is
4
negative, making them consistent with bdrv_{preadv,pwritev}() and
5
bdrv_co_{pread,pwrite,preadv,pwritev}().
6
7
bdrv_pwrite_zeroes() now also calls trace_bdrv_co_pwrite_zeroes() and
8
clears the BDRV_REQ_MAY_UNMAP flag when appropriate, which it didn't
9
previously.
10
11
Signed-off-by: Alberto Faria <afaria@redhat.com>
12
Message-Id: <20220609152744.3891847-8-afaria@redhat.com>
13
Reviewed-by: Eric Blake <eblake@redhat.com>
14
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
15
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
16
---
17
include/block/block-io.h | 15 +++++++++------
18
block/io.c | 41 ----------------------------------------
19
2 files changed, 9 insertions(+), 47 deletions(-)
20
21
diff --git a/include/block/block-io.h b/include/block/block-io.h
22
index XXXXXXX..XXXXXXX 100644
23
--- a/include/block/block-io.h
24
+++ b/include/block/block-io.h
25
@@ -XXX,XX +XXX,XX @@
26
* to catch when they are accidentally called by the wrong API.
27
*/
28
29
-int bdrv_pwrite_zeroes(BdrvChild *child, int64_t offset,
30
- int64_t bytes, BdrvRequestFlags flags);
31
+int generated_co_wrapper bdrv_pwrite_zeroes(BdrvChild *child, int64_t offset,
32
+ int64_t bytes,
33
+ BdrvRequestFlags flags);
34
int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags);
35
-int bdrv_pread(BdrvChild *child, int64_t offset, int64_t bytes, void *buf,
36
- BdrvRequestFlags flags);
37
-int bdrv_pwrite(BdrvChild *child, int64_t offset, int64_t bytes,
38
- const void *buf, BdrvRequestFlags flags);
39
+int generated_co_wrapper bdrv_pread(BdrvChild *child, int64_t offset,
40
+ int64_t bytes, void *buf,
41
+ BdrvRequestFlags flags);
42
+int generated_co_wrapper bdrv_pwrite(BdrvChild *child, int64_t offset,
43
+ int64_t bytes, const void *buf,
44
+ BdrvRequestFlags flags);
45
int bdrv_pwrite_sync(BdrvChild *child, int64_t offset, int64_t bytes,
46
const void *buf, BdrvRequestFlags flags);
47
/*
48
diff --git a/block/io.c b/block/io.c
49
index XXXXXXX..XXXXXXX 100644
50
--- a/block/io.c
51
+++ b/block/io.c
52
@@ -XXX,XX +XXX,XX @@ static int bdrv_check_request32(int64_t offset, int64_t bytes,
53
return 0;
54
}
55
56
-int bdrv_pwrite_zeroes(BdrvChild *child, int64_t offset,
57
- int64_t bytes, BdrvRequestFlags flags)
58
-{
59
- IO_CODE();
60
- return bdrv_pwritev(child, offset, bytes, NULL,
61
- BDRV_REQ_ZERO_WRITE | flags);
62
-}
63
-
64
/*
65
* Completely zero out a block device with the help of bdrv_pwrite_zeroes.
66
* The operation is sped up by checking the block status and only writing
67
@@ -XXX,XX +XXX,XX @@ int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags)
68
}
69
}
70
71
-/* See bdrv_pwrite() for the return codes */
72
-int bdrv_pread(BdrvChild *child, int64_t offset, int64_t bytes, void *buf,
73
- BdrvRequestFlags flags)
74
-{
75
- QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
76
- IO_CODE();
77
-
78
- if (bytes < 0) {
79
- return -EINVAL;
80
- }
81
-
82
- return bdrv_preadv(child, offset, bytes, &qiov, flags);
83
-}
84
-
85
-/* Return no. of bytes on success or < 0 on error. Important errors are:
86
- -EIO generic I/O error (may happen for all errors)
87
- -ENOMEDIUM No media inserted.
88
- -EINVAL Invalid offset or number of bytes
89
- -EACCES Trying to write a read-only device
90
-*/
91
-int bdrv_pwrite(BdrvChild *child, int64_t offset, int64_t bytes,
92
- const void *buf, BdrvRequestFlags flags)
93
-{
94
- QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
95
- IO_CODE();
96
-
97
- if (bytes < 0) {
98
- return -EINVAL;
99
- }
100
-
101
- return bdrv_pwritev(child, offset, bytes, &qiov, flags);
102
-}
103
-
104
/*
105
* Writes to the file and ensures that no writes are reordered across this
106
* request (acts as a barrier)
107
--
108
2.35.3
diff view generated by jsdifflib
1
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
1
From: Alberto Faria <afaria@redhat.com>
2
2
3
Commit 7a3f542fbd "block/io: refactor padding" occasionally dropped
3
Also convert bdrv_pwrite_sync() to being implemented using
4
aligning for zero-length request: bdrv_init_padding() blindly return
4
generated_co_wrapper.
5
false if bytes == 0, like there is nothing to align.
6
5
7
This leads the following command to crash:
6
Signed-off-by: Alberto Faria <afaria@redhat.com>
7
Reviewed-by: Eric Blake <eblake@redhat.com>
8
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
9
Message-Id: <20220609152744.3891847-9-afaria@redhat.com>
10
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
11
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
12
---
13
include/block/block-io.h | 8 ++++++--
14
block/io.c | 9 +++++----
15
2 files changed, 11 insertions(+), 6 deletions(-)
8
16
9
./qemu-io --image-opts -c 'write 1 0' \
17
diff --git a/include/block/block-io.h b/include/block/block-io.h
10
driver=blkdebug,align=512,image.driver=null-co,image.size=512
18
index XXXXXXX..XXXXXXX 100644
11
19
--- a/include/block/block-io.h
12
>> qemu-io: block/io.c:1955: bdrv_aligned_pwritev: Assertion
20
+++ b/include/block/block-io.h
13
`(offset & (align - 1)) == 0' failed.
21
@@ -XXX,XX +XXX,XX @@ int generated_co_wrapper bdrv_pread(BdrvChild *child, int64_t offset,
14
>> Aborted (core dumped)
22
int generated_co_wrapper bdrv_pwrite(BdrvChild *child, int64_t offset,
15
23
int64_t bytes, const void *buf,
16
Prior to 7a3f542fbd we does aligning of such zero requests. Instead of
24
BdrvRequestFlags flags);
17
recovering this behavior let's just do nothing on such requests as it
25
-int bdrv_pwrite_sync(BdrvChild *child, int64_t offset, int64_t bytes,
18
is useless.
26
- const void *buf, BdrvRequestFlags flags);
19
27
+int generated_co_wrapper bdrv_pwrite_sync(BdrvChild *child, int64_t offset,
20
Note that driver may have special meaning of zero-length reqeusts, like
28
+ int64_t bytes, const void *buf,
21
qcow2_co_pwritev_compressed_part, so we can't skip any zero-length
29
+ BdrvRequestFlags flags);
22
operation. But for unaligned ones, we can't pass it to driver anyway.
30
+int coroutine_fn bdrv_co_pwrite_sync(BdrvChild *child, int64_t offset,
23
31
+ int64_t bytes, const void *buf,
24
This commit also fixes crash in iotest 80 running with -nocache:
32
+ BdrvRequestFlags flags);
25
33
/*
26
./check -nocache -qcow2 80
34
* Efficiently zero a region of the disk image. Note that this is a regular
27
35
* I/O request like read or write and should have a reasonable size. This
28
which crashes on same assertion due to trying to read empty extra data
29
in qcow2_do_read_snapshots().
30
31
Cc: qemu-stable@nongnu.org # v4.2
32
Fixes: 7a3f542fbd
33
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
34
Reviewed-by: Max Reitz <mreitz@redhat.com>
35
Message-id: 20200206164245.17781-1-vsementsov@virtuozzo.com
36
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
37
---
38
block/io.c | 28 +++++++++++++++++++++++++++-
39
1 file changed, 27 insertions(+), 1 deletion(-)
40
41
diff --git a/block/io.c b/block/io.c
36
diff --git a/block/io.c b/block/io.c
42
index XXXXXXX..XXXXXXX 100644
37
index XXXXXXX..XXXXXXX 100644
43
--- a/block/io.c
38
--- a/block/io.c
44
+++ b/block/io.c
39
+++ b/block/io.c
45
@@ -XXX,XX +XXX,XX @@ static bool bdrv_init_padding(BlockDriverState *bs,
40
@@ -XXX,XX +XXX,XX @@ int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags)
46
pad->tail = align - pad->tail;
41
*
47
}
42
* Returns 0 on success, -errno in error cases.
48
43
*/
49
- if ((!pad->head && !pad->tail) || !bytes) {
44
-int bdrv_pwrite_sync(BdrvChild *child, int64_t offset, int64_t bytes,
50
+ if (!pad->head && !pad->tail) {
45
- const void *buf, BdrvRequestFlags flags)
51
return false;
46
+int coroutine_fn bdrv_co_pwrite_sync(BdrvChild *child, int64_t offset,
52
}
47
+ int64_t bytes, const void *buf,
53
48
+ BdrvRequestFlags flags)
54
+ assert(bytes); /* Nothing good in aligning zero-length requests */
49
{
55
+
50
int ret;
56
sum = pad->head + bytes + pad->tail;
51
IO_CODE();
57
pad->buf_len = (sum > align && pad->head && pad->tail) ? 2 * align : align;
52
58
pad->buf = qemu_blockalign(bs, pad->buf_len);
53
- ret = bdrv_pwrite(child, offset, bytes, buf, flags);
59
@@ -XXX,XX +XXX,XX @@ int coroutine_fn bdrv_co_preadv_part(BdrvChild *child,
54
+ ret = bdrv_co_pwrite(child, offset, bytes, buf, flags);
55
if (ret < 0) {
60
return ret;
56
return ret;
61
}
57
}
62
58
63
+ if (bytes == 0 && !QEMU_IS_ALIGNED(offset, bs->bl.request_alignment)) {
59
- ret = bdrv_flush(child->bs);
64
+ /*
60
+ ret = bdrv_co_flush(child->bs);
65
+ * Aligning zero request is nonsense. Even if driver has special meaning
61
if (ret < 0) {
66
+ * of zero-length (like qcow2_co_pwritev_compressed_part), we can't pass
62
return ret;
67
+ * it to driver due to request_alignment.
68
+ *
69
+ * Still, no reason to return an error if someone do unaligned
70
+ * zero-length read occasionally.
71
+ */
72
+ return 0;
73
+ }
74
+
75
bdrv_inc_in_flight(bs);
76
77
/* Don't do copy-on-read if we read data before write operation */
78
@@ -XXX,XX +XXX,XX @@ int coroutine_fn bdrv_co_pwritev_part(BdrvChild *child,
79
return -ENOTSUP;
80
}
63
}
81
82
+ if (bytes == 0 && !QEMU_IS_ALIGNED(offset, bs->bl.request_alignment)) {
83
+ /*
84
+ * Aligning zero request is nonsense. Even if driver has special meaning
85
+ * of zero-length (like qcow2_co_pwritev_compressed_part), we can't pass
86
+ * it to driver due to request_alignment.
87
+ *
88
+ * Still, no reason to return an error if someone do unaligned
89
+ * zero-length write occasionally.
90
+ */
91
+ return 0;
92
+ }
93
+
94
bdrv_inc_in_flight(bs);
95
/*
96
* Align write if necessary by performing a read-modify-write cycle.
97
--
64
--
98
2.24.1
65
2.35.3
99
100
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Convert uses of bdrv_pwrite_sync() into bdrv_co_pwrite_sync() when the
4
callers are already coroutine_fn.
5
6
Signed-off-by: Alberto Faria <afaria@redhat.com>
7
Reviewed-by: Vladimir Sementsov-Ogievskiy <v.sementsov-og@mail.ru>
8
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
9
Message-Id: <20220609152744.3891847-10-afaria@redhat.com>
10
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
11
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
12
---
13
block/parallels.c | 2 +-
14
block/qcow2-snapshot.c | 6 +++---
15
block/qcow2.c | 4 ++--
16
3 files changed, 6 insertions(+), 6 deletions(-)
17
18
diff --git a/block/parallels.c b/block/parallels.c
19
index XXXXXXX..XXXXXXX 100644
20
--- a/block/parallels.c
21
+++ b/block/parallels.c
22
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn parallels_co_check(BlockDriverState *bs,
23
24
ret = 0;
25
if (flush_bat) {
26
- ret = bdrv_pwrite_sync(bs->file, 0, s->header_size, s->header, 0);
27
+ ret = bdrv_co_pwrite_sync(bs->file, 0, s->header_size, s->header, 0);
28
if (ret < 0) {
29
res->check_errors++;
30
goto out;
31
diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
32
index XXXXXXX..XXXXXXX 100644
33
--- a/block/qcow2-snapshot.c
34
+++ b/block/qcow2-snapshot.c
35
@@ -XXX,XX +XXX,XX @@ int coroutine_fn qcow2_check_read_snapshot_table(BlockDriverState *bs,
36
assert(fix & BDRV_FIX_ERRORS);
37
38
snapshot_table_pointer.nb_snapshots = cpu_to_be32(s->nb_snapshots);
39
- ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, nb_snapshots),
40
- sizeof(snapshot_table_pointer.nb_snapshots),
41
- &snapshot_table_pointer.nb_snapshots, 0);
42
+ ret = bdrv_co_pwrite_sync(bs->file, offsetof(QCowHeader, nb_snapshots),
43
+ sizeof(snapshot_table_pointer.nb_snapshots),
44
+ &snapshot_table_pointer.nb_snapshots, 0);
45
if (ret < 0) {
46
result->check_errors++;
47
fprintf(stderr, "ERROR failed to update the snapshot count in the "
48
diff --git a/block/qcow2.c b/block/qcow2.c
49
index XXXXXXX..XXXXXXX 100644
50
--- a/block/qcow2.c
51
+++ b/block/qcow2.c
52
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow2_co_truncate(BlockDriverState *bs, int64_t offset,
53
54
/* write updated header.size */
55
offset = cpu_to_be64(offset);
56
- ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, size),
57
- sizeof(offset), &offset, 0);
58
+ ret = bdrv_co_pwrite_sync(bs->file, offsetof(QCowHeader, size),
59
+ sizeof(offset), &offset, 0);
60
if (ret < 0) {
61
error_setg_errno(errp, -ret, "Failed to update the image size");
62
goto fail;
63
--
64
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Use bdrv_pwrite_sync() instead of calling bdrv_pwrite() and bdrv_flush()
4
separately.
5
6
Signed-off-by: Alberto Faria <afaria@redhat.com>
7
Reviewed-by: Eric Blake <eblake@redhat.com>
8
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
9
Message-Id: <20220609152744.3891847-11-afaria@redhat.com>
10
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
11
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
12
---
13
block/qcow2.c | 9 +++------
14
1 file changed, 3 insertions(+), 6 deletions(-)
15
16
diff --git a/block/qcow2.c b/block/qcow2.c
17
index XXXXXXX..XXXXXXX 100644
18
--- a/block/qcow2.c
19
+++ b/block/qcow2.c
20
@@ -XXX,XX +XXX,XX @@ int qcow2_mark_dirty(BlockDriverState *bs)
21
}
22
23
val = cpu_to_be64(s->incompatible_features | QCOW2_INCOMPAT_DIRTY);
24
- ret = bdrv_pwrite(bs->file, offsetof(QCowHeader, incompatible_features),
25
- sizeof(val), &val, 0);
26
- if (ret < 0) {
27
- return ret;
28
- }
29
- ret = bdrv_flush(bs->file->bs);
30
+ ret = bdrv_pwrite_sync(bs->file,
31
+ offsetof(QCowHeader, incompatible_features),
32
+ sizeof(val), &val, 0);
33
if (ret < 0) {
34
return ret;
35
}
36
--
37
2.35.3
diff view generated by jsdifflib
New patch
1
From: John Snow <jsnow@redhat.com>
1
2
3
Fixes: 58a6fdcc
4
Signed-off-by: John Snow <jsnow@redhat.com>
5
Tested-by: Daniel P. Berrangé <berrange@redhat.com>
6
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
7
Message-Id: <20220616142659.3184115-2-jsnow@redhat.com>
8
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
9
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
10
---
11
tests/qemu-iotests/223.out | 4 ++--
12
tests/qemu-iotests/307.out | 4 ++--
13
2 files changed, 4 insertions(+), 4 deletions(-)
14
15
diff --git a/tests/qemu-iotests/223.out b/tests/qemu-iotests/223.out
16
index XXXXXXX..XXXXXXX 100644
17
--- a/tests/qemu-iotests/223.out
18
+++ b/tests/qemu-iotests/223.out
19
@@ -XXX,XX +XXX,XX @@ exports available: 3
20
export: 'n2'
21
description: some text
22
size: 4194304
23
- flags: 0xced ( flush fua trim zeroes df cache fast-zero )
24
+ flags: 0xded ( flush fua trim zeroes df multi cache fast-zero )
25
min block: 1
26
opt block: 4096
27
max block: 33554432
28
@@ -XXX,XX +XXX,XX @@ exports available: 3
29
export: 'n2'
30
description: some text
31
size: 4194304
32
- flags: 0xced ( flush fua trim zeroes df cache fast-zero )
33
+ flags: 0xded ( flush fua trim zeroes df multi cache fast-zero )
34
min block: 1
35
opt block: 4096
36
max block: 33554432
37
diff --git a/tests/qemu-iotests/307.out b/tests/qemu-iotests/307.out
38
index XXXXXXX..XXXXXXX 100644
39
--- a/tests/qemu-iotests/307.out
40
+++ b/tests/qemu-iotests/307.out
41
@@ -XXX,XX +XXX,XX @@ exports available: 2
42
export: 'export1'
43
description: This is the writable second export
44
size: 67108864
45
- flags: 0xced ( flush fua trim zeroes df cache fast-zero )
46
+ flags: 0xded ( flush fua trim zeroes df multi cache fast-zero )
47
min block: XXX
48
opt block: XXX
49
max block: XXX
50
@@ -XXX,XX +XXX,XX @@ exports available: 1
51
export: 'export1'
52
description: This is the writable second export
53
size: 67108864
54
- flags: 0xced ( flush fua trim zeroes df cache fast-zero )
55
+ flags: 0xded ( flush fua trim zeroes df multi cache fast-zero )
56
min block: XXX
57
opt block: XXX
58
max block: XXX
59
--
60
2.35.3
61
62
diff view generated by jsdifflib
New patch
1
From: John Snow <jsnow@redhat.com>
1
2
3
In certain container environments we may not have FUSE at all, so skip
4
the test in this circumstance too.
5
6
Signed-off-by: John Snow <jsnow@redhat.com>
7
Message-Id: <20220616142659.3184115-3-jsnow@redhat.com>
8
Reviewed-by: Thomas Huth <thuth@redhat.com>
9
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
10
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
11
---
12
tests/qemu-iotests/108 | 5 +++++
13
1 file changed, 5 insertions(+)
14
15
diff --git a/tests/qemu-iotests/108 b/tests/qemu-iotests/108
16
index XXXXXXX..XXXXXXX 100755
17
--- a/tests/qemu-iotests/108
18
+++ b/tests/qemu-iotests/108
19
@@ -XXX,XX +XXX,XX @@ if sudo -n losetup &>/dev/null; then
20
else
21
loopdev=false
22
23
+ # Check for usable FUSE in the host environment:
24
+ if test ! -c "/dev/fuse"; then
25
+ _notrun 'No passwordless sudo nor usable /dev/fuse'
26
+ fi
27
+
28
# QSD --export fuse will either yield "Parameter 'id' is missing"
29
# or "Invalid parameter 'fuse'", depending on whether there is
30
# FUSE support or not.
31
--
32
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
They currently return the value of their 'bytes' parameter on success.
4
5
Make them return 0 instead, for consistency with other I/O functions and
6
in preparation to implement them using generated_co_wrapper. This also
7
makes it clear that short reads/writes are not possible.
8
9
Signed-off-by: Alberto Faria <afaria@redhat.com>
10
Message-Id: <20220705161527.1054072-2-afaria@redhat.com>
11
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
12
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
13
---
14
block.c | 8 +++++---
15
block/block-backend.c | 7 ++-----
16
block/qcow.c | 6 +++---
17
hw/block/m25p80.c | 2 +-
18
hw/misc/mac_via.c | 4 ++--
19
hw/misc/sifive_u_otp.c | 2 +-
20
hw/nvram/eeprom_at24c.c | 8 ++++----
21
hw/nvram/spapr_nvram.c | 14 +++++++-------
22
hw/ppc/pnv_pnor.c | 2 +-
23
qemu-img.c | 25 +++++++++----------------
24
qemu-io-cmds.c | 18 ++++++++++++------
25
tests/unit/test-block-iothread.c | 4 ++--
26
12 files changed, 49 insertions(+), 51 deletions(-)
27
28
diff --git a/block.c b/block.c
29
index XXXXXXX..XXXXXXX 100644
30
--- a/block.c
31
+++ b/block.c
32
@@ -XXX,XX +XXX,XX @@ static int find_image_format(BlockBackend *file, const char *filename,
33
return ret;
34
}
35
36
- drv = bdrv_probe_all(buf, ret, filename);
37
+ drv = bdrv_probe_all(buf, sizeof(buf), filename);
38
if (!drv) {
39
error_setg(errp, "Could not determine image format: No compatible "
40
"driver found");
41
- ret = -ENOENT;
42
+ *pdrv = NULL;
43
+ return -ENOENT;
44
}
45
+
46
*pdrv = drv;
47
- return ret;
48
+ return 0;
49
}
50
51
/**
52
diff --git a/block/block-backend.c b/block/block-backend.c
53
index XXXXXXX..XXXXXXX 100644
54
--- a/block/block-backend.c
55
+++ b/block/block-backend.c
56
@@ -XXX,XX +XXX,XX @@ int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes)
57
ret = blk_do_preadv(blk, offset, bytes, &qiov, 0);
58
blk_dec_in_flight(blk);
59
60
- return ret < 0 ? ret : bytes;
61
+ return ret;
62
}
63
64
int blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int bytes,
65
BdrvRequestFlags flags)
66
{
67
- int ret;
68
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
69
IO_OR_GS_CODE();
70
71
- ret = blk_pwritev_part(blk, offset, bytes, &qiov, 0, flags);
72
-
73
- return ret < 0 ? ret : bytes;
74
+ return blk_pwritev_part(blk, offset, bytes, &qiov, 0, flags);
75
}
76
77
int64_t blk_getlength(BlockBackend *blk)
78
diff --git a/block/qcow.c b/block/qcow.c
79
index XXXXXXX..XXXXXXX 100644
80
--- a/block/qcow.c
81
+++ b/block/qcow.c
82
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts,
83
84
/* write all the data */
85
ret = blk_pwrite(qcow_blk, 0, &header, sizeof(header), 0);
86
- if (ret != sizeof(header)) {
87
+ if (ret < 0) {
88
goto exit;
89
}
90
91
if (qcow_opts->has_backing_file) {
92
ret = blk_pwrite(qcow_blk, sizeof(header),
93
qcow_opts->backing_file, backing_filename_len, 0);
94
- if (ret != backing_filename_len) {
95
+ if (ret < 0) {
96
goto exit;
97
}
98
}
99
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts,
100
i++) {
101
ret = blk_pwrite(qcow_blk, header_size + BDRV_SECTOR_SIZE * i,
102
tmp, BDRV_SECTOR_SIZE, 0);
103
- if (ret != BDRV_SECTOR_SIZE) {
104
+ if (ret < 0) {
105
g_free(tmp);
106
goto exit;
107
}
108
diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
109
index XXXXXXX..XXXXXXX 100644
110
--- a/hw/block/m25p80.c
111
+++ b/hw/block/m25p80.c
112
@@ -XXX,XX +XXX,XX @@ static void m25p80_realize(SSIPeripheral *ss, Error **errp)
113
trace_m25p80_binding(s);
114
s->storage = blk_blockalign(s->blk, s->size);
115
116
- if (blk_pread(s->blk, 0, s->storage, s->size) != s->size) {
117
+ if (blk_pread(s->blk, 0, s->storage, s->size) < 0) {
118
error_setg(errp, "failed to read the initial flash content");
119
return;
120
}
121
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
122
index XXXXXXX..XXXXXXX 100644
123
--- a/hw/misc/mac_via.c
124
+++ b/hw/misc/mac_via.c
125
@@ -XXX,XX +XXX,XX @@ static void mos6522_q800_via1_realize(DeviceState *dev, Error **errp)
126
return;
127
}
128
129
- len = blk_pread(v1s->blk, 0, v1s->PRAM, sizeof(v1s->PRAM));
130
- if (len != sizeof(v1s->PRAM)) {
131
+ ret = blk_pread(v1s->blk, 0, v1s->PRAM, sizeof(v1s->PRAM));
132
+ if (ret < 0) {
133
error_setg(errp, "can't read PRAM contents");
134
return;
135
}
136
diff --git a/hw/misc/sifive_u_otp.c b/hw/misc/sifive_u_otp.c
137
index XXXXXXX..XXXXXXX 100644
138
--- a/hw/misc/sifive_u_otp.c
139
+++ b/hw/misc/sifive_u_otp.c
140
@@ -XXX,XX +XXX,XX @@ static void sifive_u_otp_realize(DeviceState *dev, Error **errp)
141
return;
142
}
143
144
- if (blk_pread(s->blk, 0, s->fuse, filesize) != filesize) {
145
+ if (blk_pread(s->blk, 0, s->fuse, filesize) < 0) {
146
error_setg(errp, "failed to read the initial flash content");
147
return;
148
}
149
diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c
150
index XXXXXXX..XXXXXXX 100644
151
--- a/hw/nvram/eeprom_at24c.c
152
+++ b/hw/nvram/eeprom_at24c.c
153
@@ -XXX,XX +XXX,XX @@ int at24c_eeprom_event(I2CSlave *s, enum i2c_event event)
154
case I2C_START_RECV:
155
DPRINTK("clear\n");
156
if (ee->blk && ee->changed) {
157
- int len = blk_pwrite(ee->blk, 0, ee->mem, ee->rsize, 0);
158
- if (len != ee->rsize) {
159
+ int ret = blk_pwrite(ee->blk, 0, ee->mem, ee->rsize, 0);
160
+ if (ret < 0) {
161
ERR(TYPE_AT24C_EE
162
" : failed to write backing file\n");
163
}
164
@@ -XXX,XX +XXX,XX @@ void at24c_eeprom_reset(DeviceState *state)
165
memset(ee->mem, 0, ee->rsize);
166
167
if (ee->blk) {
168
- int len = blk_pread(ee->blk, 0, ee->mem, ee->rsize);
169
+ int ret = blk_pread(ee->blk, 0, ee->mem, ee->rsize);
170
171
- if (len != ee->rsize) {
172
+ if (ret < 0) {
173
ERR(TYPE_AT24C_EE
174
" : Failed initial sync with backing file\n");
175
}
176
diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c
177
index XXXXXXX..XXXXXXX 100644
178
--- a/hw/nvram/spapr_nvram.c
179
+++ b/hw/nvram/spapr_nvram.c
180
@@ -XXX,XX +XXX,XX @@ static void rtas_nvram_store(PowerPCCPU *cpu, SpaprMachineState *spapr,
181
{
182
SpaprNvram *nvram = spapr->nvram;
183
hwaddr offset, buffer, len;
184
- int alen;
185
+ int ret;
186
void *membuf;
187
188
if ((nargs != 3) || (nret != 2)) {
189
@@ -XXX,XX +XXX,XX @@ static void rtas_nvram_store(PowerPCCPU *cpu, SpaprMachineState *spapr,
190
191
membuf = cpu_physical_memory_map(buffer, &len, false);
192
193
- alen = len;
194
+ ret = 0;
195
if (nvram->blk) {
196
- alen = blk_pwrite(nvram->blk, offset, membuf, len, 0);
197
+ ret = blk_pwrite(nvram->blk, offset, membuf, len, 0);
198
}
199
200
assert(nvram->buf);
201
@@ -XXX,XX +XXX,XX @@ static void rtas_nvram_store(PowerPCCPU *cpu, SpaprMachineState *spapr,
202
203
cpu_physical_memory_unmap(membuf, len, 0, len);
204
205
- rtas_st(rets, 0, (alen < len) ? RTAS_OUT_HW_ERROR : RTAS_OUT_SUCCESS);
206
- rtas_st(rets, 1, (alen < 0) ? 0 : alen);
207
+ rtas_st(rets, 0, (ret < 0) ? RTAS_OUT_HW_ERROR : RTAS_OUT_SUCCESS);
208
+ rtas_st(rets, 1, (ret < 0) ? 0 : len);
209
}
210
211
static void spapr_nvram_realize(SpaprVioDevice *dev, Error **errp)
212
@@ -XXX,XX +XXX,XX @@ static void spapr_nvram_realize(SpaprVioDevice *dev, Error **errp)
213
}
214
215
if (nvram->blk) {
216
- int alen = blk_pread(nvram->blk, 0, nvram->buf, nvram->size);
217
+ ret = blk_pread(nvram->blk, 0, nvram->buf, nvram->size);
218
219
- if (alen != nvram->size) {
220
+ if (ret < 0) {
221
error_setg(errp, "can't read spapr-nvram contents");
222
return;
223
}
224
diff --git a/hw/ppc/pnv_pnor.c b/hw/ppc/pnv_pnor.c
225
index XXXXXXX..XXXXXXX 100644
226
--- a/hw/ppc/pnv_pnor.c
227
+++ b/hw/ppc/pnv_pnor.c
228
@@ -XXX,XX +XXX,XX @@ static void pnv_pnor_realize(DeviceState *dev, Error **errp)
229
230
s->storage = blk_blockalign(s->blk, s->size);
231
232
- if (blk_pread(s->blk, 0, s->storage, s->size) != s->size) {
233
+ if (blk_pread(s->blk, 0, s->storage, s->size) < 0) {
234
error_setg(errp, "failed to read the initial flash content");
235
return;
236
}
237
diff --git a/qemu-img.c b/qemu-img.c
238
index XXXXXXX..XXXXXXX 100644
239
--- a/qemu-img.c
240
+++ b/qemu-img.c
241
@@ -XXX,XX +XXX,XX @@ static int img_dd(int argc, char **argv)
242
in.buf = g_new(uint8_t, in.bsz);
243
244
for (out_pos = 0; in_pos < size; block_count++) {
245
- int in_ret, out_ret;
246
+ int bytes = (in_pos + in.bsz > size) ? size - in_pos : in.bsz;
247
248
- if (in_pos + in.bsz > size) {
249
- in_ret = blk_pread(blk1, in_pos, in.buf, size - in_pos);
250
- } else {
251
- in_ret = blk_pread(blk1, in_pos, in.buf, in.bsz);
252
- }
253
- if (in_ret < 0) {
254
+ ret = blk_pread(blk1, in_pos, in.buf, bytes);
255
+ if (ret < 0) {
256
error_report("error while reading from input image file: %s",
257
- strerror(-in_ret));
258
- ret = -1;
259
+ strerror(-ret));
260
goto out;
261
}
262
- in_pos += in_ret;
263
+ in_pos += bytes;
264
265
- out_ret = blk_pwrite(blk2, out_pos, in.buf, in_ret, 0);
266
-
267
- if (out_ret < 0) {
268
+ ret = blk_pwrite(blk2, out_pos, in.buf, bytes, 0);
269
+ if (ret < 0) {
270
error_report("error while writing to output image file: %s",
271
- strerror(-out_ret));
272
- ret = -1;
273
+ strerror(-ret));
274
goto out;
275
}
276
- out_pos += out_ret;
277
+ out_pos += bytes;
278
}
279
280
out:
281
diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
282
index XXXXXXX..XXXXXXX 100644
283
--- a/qemu-io-cmds.c
284
+++ b/qemu-io-cmds.c
285
@@ -XXX,XX +XXX,XX @@ fail:
286
static int do_pread(BlockBackend *blk, char *buf, int64_t offset,
287
int64_t bytes, int64_t *total)
288
{
289
+ int ret;
290
+
291
if (bytes > INT_MAX) {
292
return -ERANGE;
293
}
294
295
- *total = blk_pread(blk, offset, (uint8_t *)buf, bytes);
296
- if (*total < 0) {
297
- return *total;
298
+ ret = blk_pread(blk, offset, (uint8_t *)buf, bytes);
299
+ if (ret < 0) {
300
+ return ret;
301
}
302
+ *total = bytes;
303
return 1;
304
}
305
306
static int do_pwrite(BlockBackend *blk, char *buf, int64_t offset,
307
int64_t bytes, int flags, int64_t *total)
308
{
309
+ int ret;
310
+
311
if (bytes > INT_MAX) {
312
return -ERANGE;
313
}
314
315
- *total = blk_pwrite(blk, offset, (uint8_t *)buf, bytes, flags);
316
- if (*total < 0) {
317
- return *total;
318
+ ret = blk_pwrite(blk, offset, (uint8_t *)buf, bytes, flags);
319
+ if (ret < 0) {
320
+ return ret;
321
}
322
+ *total = bytes;
323
return 1;
324
}
325
326
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
327
index XXXXXXX..XXXXXXX 100644
328
--- a/tests/unit/test-block-iothread.c
329
+++ b/tests/unit/test-block-iothread.c
330
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_blk_pread(BlockBackend *blk)
331
332
/* Success */
333
ret = blk_pread(blk, 0, buf, sizeof(buf));
334
- g_assert_cmpint(ret, ==, 512);
335
+ g_assert_cmpint(ret, ==, 0);
336
337
/* Early error: Negative offset */
338
ret = blk_pread(blk, -2, buf, sizeof(buf));
339
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_blk_pwrite(BlockBackend *blk)
340
341
/* Success */
342
ret = blk_pwrite(blk, 0, buf, sizeof(buf), 0);
343
- g_assert_cmpint(ret, ==, 512);
344
+ g_assert_cmpint(ret, ==, 0);
345
346
/* Early error: Negative offset */
347
ret = blk_pwrite(blk, -2, buf, sizeof(buf), 0);
348
--
349
2.35.3
diff view generated by jsdifflib
New patch
1
1
From: Alberto Faria <afaria@redhat.com>
2
3
For consistency with other I/O functions, and in preparation to
4
implement it using generated_co_wrapper.
5
6
Callers were updated using this Coccinelle script:
7
8
@@ expression blk, offset, buf, bytes; @@
9
- blk_pread(blk, offset, buf, bytes)
10
+ blk_pread(blk, offset, buf, bytes, 0)
11
12
It had no effect on hw/block/nand.c, presumably due to the #if, so that
13
file was updated manually.
14
15
Overly-long lines were then fixed by hand.
16
17
Signed-off-by: Alberto Faria <afaria@redhat.com>
18
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
19
Reviewed-by: Greg Kurz <groug@kaod.org>
20
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
21
Message-Id: <20220705161527.1054072-3-afaria@redhat.com>
22
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
23
---
24
include/sysemu/block-backend-io.h | 3 ++-
25
block.c | 2 +-
26
block/block-backend.c | 5 +++--
27
block/commit.c | 2 +-
28
block/export/fuse.c | 2 +-
29
hw/arm/allwinner-h3.c | 2 +-
30
hw/arm/aspeed.c | 2 +-
31
hw/block/block.c | 2 +-
32
hw/block/fdc.c | 6 +++---
33
hw/block/hd-geometry.c | 2 +-
34
hw/block/m25p80.c | 2 +-
35
hw/block/nand.c | 12 ++++++------
36
hw/block/onenand.c | 12 ++++++------
37
hw/ide/atapi.c | 4 ++--
38
hw/misc/mac_via.c | 2 +-
39
hw/misc/sifive_u_otp.c | 4 ++--
40
hw/nvram/eeprom_at24c.c | 2 +-
41
hw/nvram/spapr_nvram.c | 2 +-
42
hw/nvram/xlnx-bbram.c | 2 +-
43
hw/nvram/xlnx-efuse.c | 2 +-
44
hw/ppc/pnv_pnor.c | 2 +-
45
hw/sd/sd.c | 2 +-
46
migration/block.c | 4 ++--
47
nbd/server.c | 4 ++--
48
qemu-img.c | 12 ++++++------
49
qemu-io-cmds.c | 2 +-
50
tests/unit/test-block-iothread.c | 4 ++--
51
27 files changed, 52 insertions(+), 50 deletions(-)
52
53
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
54
index XXXXXXX..XXXXXXX 100644
55
--- a/include/sysemu/block-backend-io.h
56
+++ b/include/sysemu/block-backend-io.h
57
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_copy_range(BlockBackend *blk_in, int64_t off_in,
58
* the "I/O or GS" API.
59
*/
60
61
-int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes);
62
+int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes,
63
+ BdrvRequestFlags flags);
64
int blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int bytes,
65
BdrvRequestFlags flags);
66
int coroutine_fn blk_co_preadv(BlockBackend *blk, int64_t offset,
67
diff --git a/block.c b/block.c
68
index XXXXXXX..XXXXXXX 100644
69
--- a/block.c
70
+++ b/block.c
71
@@ -XXX,XX +XXX,XX @@ static int find_image_format(BlockBackend *file, const char *filename,
72
return ret;
73
}
74
75
- ret = blk_pread(file, 0, buf, sizeof(buf));
76
+ ret = blk_pread(file, 0, buf, sizeof(buf), 0);
77
if (ret < 0) {
78
error_setg_errno(errp, -ret, "Could not read image for determining its "
79
"format");
80
diff --git a/block/block-backend.c b/block/block-backend.c
81
index XXXXXXX..XXXXXXX 100644
82
--- a/block/block-backend.c
83
+++ b/block/block-backend.c
84
@@ -XXX,XX +XXX,XX @@ BlockAIOCB *blk_aio_pwrite_zeroes(BlockBackend *blk, int64_t offset,
85
flags | BDRV_REQ_ZERO_WRITE, cb, opaque);
86
}
87
88
-int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes)
89
+int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes,
90
+ BdrvRequestFlags flags)
91
{
92
int ret;
93
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
94
IO_OR_GS_CODE();
95
96
blk_inc_in_flight(blk);
97
- ret = blk_do_preadv(blk, offset, bytes, &qiov, 0);
98
+ ret = blk_do_preadv(blk, offset, bytes, &qiov, flags);
99
blk_dec_in_flight(blk);
100
101
return ret;
102
diff --git a/block/commit.c b/block/commit.c
103
index XXXXXXX..XXXXXXX 100644
104
--- a/block/commit.c
105
+++ b/block/commit.c
106
@@ -XXX,XX +XXX,XX @@ int bdrv_commit(BlockDriverState *bs)
107
goto ro_cleanup;
108
}
109
if (ret) {
110
- ret = blk_pread(src, offset, buf, n);
111
+ ret = blk_pread(src, offset, buf, n, 0);
112
if (ret < 0) {
113
goto ro_cleanup;
114
}
115
diff --git a/block/export/fuse.c b/block/export/fuse.c
116
index XXXXXXX..XXXXXXX 100644
117
--- a/block/export/fuse.c
118
+++ b/block/export/fuse.c
119
@@ -XXX,XX +XXX,XX @@ static void fuse_read(fuse_req_t req, fuse_ino_t inode,
120
return;
121
}
122
123
- ret = blk_pread(exp->common.blk, offset, buf, size);
124
+ ret = blk_pread(exp->common.blk, offset, buf, size, 0);
125
if (ret >= 0) {
126
fuse_reply_buf(req, buf, size);
127
} else {
128
diff --git a/hw/arm/allwinner-h3.c b/hw/arm/allwinner-h3.c
129
index XXXXXXX..XXXXXXX 100644
130
--- a/hw/arm/allwinner-h3.c
131
+++ b/hw/arm/allwinner-h3.c
132
@@ -XXX,XX +XXX,XX @@ void allwinner_h3_bootrom_setup(AwH3State *s, BlockBackend *blk)
133
const int64_t rom_size = 32 * KiB;
134
g_autofree uint8_t *buffer = g_new0(uint8_t, rom_size);
135
136
- if (blk_pread(blk, 8 * KiB, buffer, rom_size) < 0) {
137
+ if (blk_pread(blk, 8 * KiB, buffer, rom_size, 0) < 0) {
138
error_setg(&error_fatal, "%s: failed to read BlockBackend data",
139
__func__);
140
return;
141
diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
142
index XXXXXXX..XXXXXXX 100644
143
--- a/hw/arm/aspeed.c
144
+++ b/hw/arm/aspeed.c
145
@@ -XXX,XX +XXX,XX @@ static void write_boot_rom(DriveInfo *dinfo, hwaddr addr, size_t rom_size,
146
}
147
148
storage = g_malloc0(rom_size);
149
- if (blk_pread(blk, 0, storage, rom_size) < 0) {
150
+ if (blk_pread(blk, 0, storage, rom_size, 0) < 0) {
151
error_setg(errp, "failed to read the initial flash content");
152
return;
153
}
154
diff --git a/hw/block/block.c b/hw/block/block.c
155
index XXXXXXX..XXXXXXX 100644
156
--- a/hw/block/block.c
157
+++ b/hw/block/block.c
158
@@ -XXX,XX +XXX,XX @@ bool blk_check_size_and_read_all(BlockBackend *blk, void *buf, hwaddr size,
159
* block device and read only on demand.
160
*/
161
assert(size <= BDRV_REQUEST_MAX_BYTES);
162
- ret = blk_pread(blk, 0, buf, size);
163
+ ret = blk_pread(blk, 0, buf, size, 0);
164
if (ret < 0) {
165
error_setg_errno(errp, -ret, "can't read block backend");
166
return false;
167
diff --git a/hw/block/fdc.c b/hw/block/fdc.c
168
index XXXXXXX..XXXXXXX 100644
169
--- a/hw/block/fdc.c
170
+++ b/hw/block/fdc.c
171
@@ -XXX,XX +XXX,XX @@ int fdctrl_transfer_handler(void *opaque, int nchan, int dma_pos, int dma_len)
172
if (fdctrl->data_dir != FD_DIR_WRITE ||
173
len < FD_SECTOR_LEN || rel_pos != 0) {
174
/* READ & SCAN commands and realign to a sector for WRITE */
175
- if (blk_pread(cur_drv->blk, fd_offset(cur_drv),
176
- fdctrl->fifo, BDRV_SECTOR_SIZE) < 0) {
177
+ if (blk_pread(cur_drv->blk, fd_offset(cur_drv), fdctrl->fifo,
178
+ BDRV_SECTOR_SIZE, 0) < 0) {
179
FLOPPY_DPRINTF("Floppy: error getting sector %d\n",
180
fd_sector(cur_drv));
181
/* Sure, image size is too small... */
182
@@ -XXX,XX +XXX,XX @@ static uint32_t fdctrl_read_data(FDCtrl *fdctrl)
183
return 0;
184
}
185
if (blk_pread(cur_drv->blk, fd_offset(cur_drv), fdctrl->fifo,
186
- BDRV_SECTOR_SIZE)
187
+ BDRV_SECTOR_SIZE, 0)
188
< 0) {
189
FLOPPY_DPRINTF("error getting sector %d\n",
190
fd_sector(cur_drv));
191
diff --git a/hw/block/hd-geometry.c b/hw/block/hd-geometry.c
192
index XXXXXXX..XXXXXXX 100644
193
--- a/hw/block/hd-geometry.c
194
+++ b/hw/block/hd-geometry.c
195
@@ -XXX,XX +XXX,XX @@ static int guess_disk_lchs(BlockBackend *blk,
196
197
blk_get_geometry(blk, &nb_sectors);
198
199
- if (blk_pread(blk, 0, buf, BDRV_SECTOR_SIZE) < 0) {
200
+ if (blk_pread(blk, 0, buf, BDRV_SECTOR_SIZE, 0) < 0) {
201
return -1;
202
}
203
/* test msdos magic */
204
diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
205
index XXXXXXX..XXXXXXX 100644
206
--- a/hw/block/m25p80.c
207
+++ b/hw/block/m25p80.c
208
@@ -XXX,XX +XXX,XX @@ static void m25p80_realize(SSIPeripheral *ss, Error **errp)
209
trace_m25p80_binding(s);
210
s->storage = blk_blockalign(s->blk, s->size);
211
212
- if (blk_pread(s->blk, 0, s->storage, s->size) < 0) {
213
+ if (blk_pread(s->blk, 0, s->storage, s->size, 0) < 0) {
214
error_setg(errp, "failed to read the initial flash content");
215
return;
216
}
217
diff --git a/hw/block/nand.c b/hw/block/nand.c
218
index XXXXXXX..XXXXXXX 100644
219
--- a/hw/block/nand.c
220
+++ b/hw/block/nand.c
221
@@ -XXX,XX +XXX,XX @@ static void glue(nand_blk_write_, NAND_PAGE_SIZE)(NANDFlashState *s)
222
off = (s->addr & PAGE_MASK) + s->offset;
223
soff = SECTOR_OFFSET(s->addr);
224
if (blk_pread(s->blk, sector << BDRV_SECTOR_BITS, iobuf,
225
- PAGE_SECTORS << BDRV_SECTOR_BITS) < 0) {
226
+ PAGE_SECTORS << BDRV_SECTOR_BITS, 0) < 0) {
227
printf("%s: read error in sector %" PRIu64 "\n", __func__, sector);
228
return;
229
}
230
@@ -XXX,XX +XXX,XX @@ static void glue(nand_blk_write_, NAND_PAGE_SIZE)(NANDFlashState *s)
231
sector = off >> 9;
232
soff = off & 0x1ff;
233
if (blk_pread(s->blk, sector << BDRV_SECTOR_BITS, iobuf,
234
- (PAGE_SECTORS + 2) << BDRV_SECTOR_BITS) < 0) {
235
+ (PAGE_SECTORS + 2) << BDRV_SECTOR_BITS, 0) < 0) {
236
printf("%s: read error in sector %" PRIu64 "\n", __func__, sector);
237
return;
238
}
239
@@ -XXX,XX +XXX,XX @@ static void glue(nand_blk_erase_, NAND_PAGE_SIZE)(NANDFlashState *s)
240
addr = PAGE_START(addr);
241
page = addr >> 9;
242
if (blk_pread(s->blk, page << BDRV_SECTOR_BITS, iobuf,
243
- BDRV_SECTOR_SIZE) < 0) {
244
+ BDRV_SECTOR_SIZE, 0) < 0) {
245
printf("%s: read error in sector %" PRIu64 "\n", __func__, page);
246
}
247
memset(iobuf + (addr & 0x1ff), 0xff, (~addr & 0x1ff) + 1);
248
@@ -XXX,XX +XXX,XX @@ static void glue(nand_blk_erase_, NAND_PAGE_SIZE)(NANDFlashState *s)
249
250
page = i >> 9;
251
if (blk_pread(s->blk, page << BDRV_SECTOR_BITS, iobuf,
252
- BDRV_SECTOR_SIZE) < 0) {
253
+ BDRV_SECTOR_SIZE, 0) < 0) {
254
printf("%s: read error in sector %" PRIu64 "\n", __func__, page);
255
}
256
memset(iobuf, 0xff, ((addr - 1) & 0x1ff) + 1);
257
@@ -XXX,XX +XXX,XX @@ static void glue(nand_blk_load_, NAND_PAGE_SIZE)(NANDFlashState *s,
258
if (s->blk) {
259
if (s->mem_oob) {
260
if (blk_pread(s->blk, SECTOR(addr) << BDRV_SECTOR_BITS, s->io,
261
- PAGE_SECTORS << BDRV_SECTOR_BITS) < 0) {
262
+ PAGE_SECTORS << BDRV_SECTOR_BITS, 0) < 0) {
263
printf("%s: read error in sector %" PRIu64 "\n",
264
__func__, SECTOR(addr));
265
}
266
@@ -XXX,XX +XXX,XX @@ static void glue(nand_blk_load_, NAND_PAGE_SIZE)(NANDFlashState *s,
267
s->ioaddr = s->io + SECTOR_OFFSET(s->addr) + offset;
268
} else {
269
if (blk_pread(s->blk, PAGE_START(addr), s->io,
270
- (PAGE_SECTORS + 2) << BDRV_SECTOR_BITS) < 0) {
271
+ (PAGE_SECTORS + 2) << BDRV_SECTOR_BITS, 0) < 0) {
272
printf("%s: read error in sector %" PRIu64 "\n",
273
__func__, PAGE_START(addr) >> 9);
274
}
275
diff --git a/hw/block/onenand.c b/hw/block/onenand.c
276
index XXXXXXX..XXXXXXX 100644
277
--- a/hw/block/onenand.c
278
+++ b/hw/block/onenand.c
279
@@ -XXX,XX +XXX,XX @@ static void onenand_reset(OneNANDState *s, int cold)
280
memset(s->blockwp, ONEN_LOCK_LOCKED, s->blocks);
281
282
if (s->blk_cur && blk_pread(s->blk_cur, 0, s->boot[0],
283
- 8 << BDRV_SECTOR_BITS) < 0) {
284
+ 8 << BDRV_SECTOR_BITS, 0) < 0) {
285
hw_error("%s: Loading the BootRAM failed.\n", __func__);
286
}
287
}
288
@@ -XXX,XX +XXX,XX @@ static inline int onenand_load_main(OneNANDState *s, int sec, int secn,
289
assert(UINT32_MAX >> BDRV_SECTOR_BITS > secn);
290
if (s->blk_cur) {
291
return blk_pread(s->blk_cur, sec << BDRV_SECTOR_BITS, dest,
292
- secn << BDRV_SECTOR_BITS) < 0;
293
+ secn << BDRV_SECTOR_BITS, 0) < 0;
294
} else if (sec + secn > s->secs_cur) {
295
return 1;
296
}
297
@@ -XXX,XX +XXX,XX @@ static inline int onenand_prog_main(OneNANDState *s, int sec, int secn,
298
uint8_t *dp = 0;
299
if (s->blk_cur) {
300
dp = g_malloc(size);
301
- if (!dp || blk_pread(s->blk_cur, offset, dp, size) < 0) {
302
+ if (!dp || blk_pread(s->blk_cur, offset, dp, size, 0) < 0) {
303
result = 1;
304
}
305
} else {
306
@@ -XXX,XX +XXX,XX @@ static inline int onenand_load_spare(OneNANDState *s, int sec, int secn,
307
308
if (s->blk_cur) {
309
uint32_t offset = (s->secs_cur + (sec >> 5)) << BDRV_SECTOR_BITS;
310
- if (blk_pread(s->blk_cur, offset, buf, BDRV_SECTOR_SIZE) < 0) {
311
+ if (blk_pread(s->blk_cur, offset, buf, BDRV_SECTOR_SIZE, 0) < 0) {
312
return 1;
313
}
314
memcpy(dest, buf + ((sec & 31) << 4), secn << 4);
315
@@ -XXX,XX +XXX,XX @@ static inline int onenand_prog_spare(OneNANDState *s, int sec, int secn,
316
if (s->blk_cur) {
317
dp = g_malloc(512);
318
if (!dp
319
- || blk_pread(s->blk_cur, offset, dp, BDRV_SECTOR_SIZE) < 0) {
320
+ || blk_pread(s->blk_cur, offset, dp, BDRV_SECTOR_SIZE, 0) < 0) {
321
result = 1;
322
} else {
323
dpp = dp + ((sec & 31) << 4);
324
@@ -XXX,XX +XXX,XX @@ static inline int onenand_erase(OneNANDState *s, int sec, int num)
325
goto fail;
326
}
327
if (blk_pread(s->blk_cur, erasesec << BDRV_SECTOR_BITS, tmpbuf,
328
- BDRV_SECTOR_SIZE) < 0) {
329
+ BDRV_SECTOR_SIZE, 0) < 0) {
330
goto fail;
331
}
332
memcpy(tmpbuf + ((sec & 31) << 4), blankbuf, 1 << 4);
333
diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
334
index XXXXXXX..XXXXXXX 100644
335
--- a/hw/ide/atapi.c
336
+++ b/hw/ide/atapi.c
337
@@ -XXX,XX +XXX,XX @@ cd_read_sector_sync(IDEState *s)
338
switch (s->cd_sector_size) {
339
case 2048:
340
ret = blk_pread(s->blk, (int64_t)s->lba << ATAPI_SECTOR_BITS,
341
- s->io_buffer, ATAPI_SECTOR_SIZE);
342
+ s->io_buffer, ATAPI_SECTOR_SIZE, 0);
343
break;
344
case 2352:
345
ret = blk_pread(s->blk, (int64_t)s->lba << ATAPI_SECTOR_BITS,
346
- s->io_buffer + 16, ATAPI_SECTOR_SIZE);
347
+ s->io_buffer + 16, ATAPI_SECTOR_SIZE, 0);
348
if (ret >= 0) {
349
cd_data_to_raw(s->io_buffer, s->lba);
350
}
351
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
352
index XXXXXXX..XXXXXXX 100644
353
--- a/hw/misc/mac_via.c
354
+++ b/hw/misc/mac_via.c
355
@@ -XXX,XX +XXX,XX @@ static void mos6522_q800_via1_realize(DeviceState *dev, Error **errp)
356
return;
357
}
358
359
- ret = blk_pread(v1s->blk, 0, v1s->PRAM, sizeof(v1s->PRAM));
360
+ ret = blk_pread(v1s->blk, 0, v1s->PRAM, sizeof(v1s->PRAM), 0);
361
if (ret < 0) {
362
error_setg(errp, "can't read PRAM contents");
363
return;
364
diff --git a/hw/misc/sifive_u_otp.c b/hw/misc/sifive_u_otp.c
365
index XXXXXXX..XXXXXXX 100644
366
--- a/hw/misc/sifive_u_otp.c
367
+++ b/hw/misc/sifive_u_otp.c
368
@@ -XXX,XX +XXX,XX @@ static uint64_t sifive_u_otp_read(void *opaque, hwaddr addr, unsigned int size)
369
int32_t buf;
370
371
if (blk_pread(s->blk, s->pa * SIFIVE_U_OTP_FUSE_WORD, &buf,
372
- SIFIVE_U_OTP_FUSE_WORD) < 0) {
373
+ SIFIVE_U_OTP_FUSE_WORD, 0) < 0) {
374
error_report("read error index<%d>", s->pa);
375
return 0xff;
376
}
377
@@ -XXX,XX +XXX,XX @@ static void sifive_u_otp_realize(DeviceState *dev, Error **errp)
378
return;
379
}
380
381
- if (blk_pread(s->blk, 0, s->fuse, filesize) < 0) {
382
+ if (blk_pread(s->blk, 0, s->fuse, filesize, 0) < 0) {
383
error_setg(errp, "failed to read the initial flash content");
384
return;
385
}
386
diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c
387
index XXXXXXX..XXXXXXX 100644
388
--- a/hw/nvram/eeprom_at24c.c
389
+++ b/hw/nvram/eeprom_at24c.c
390
@@ -XXX,XX +XXX,XX @@ void at24c_eeprom_reset(DeviceState *state)
391
memset(ee->mem, 0, ee->rsize);
392
393
if (ee->blk) {
394
- int ret = blk_pread(ee->blk, 0, ee->mem, ee->rsize);
395
+ int ret = blk_pread(ee->blk, 0, ee->mem, ee->rsize, 0);
396
397
if (ret < 0) {
398
ERR(TYPE_AT24C_EE
399
diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c
400
index XXXXXXX..XXXXXXX 100644
401
--- a/hw/nvram/spapr_nvram.c
402
+++ b/hw/nvram/spapr_nvram.c
403
@@ -XXX,XX +XXX,XX @@ static void spapr_nvram_realize(SpaprVioDevice *dev, Error **errp)
404
}
405
406
if (nvram->blk) {
407
- ret = blk_pread(nvram->blk, 0, nvram->buf, nvram->size);
408
+ ret = blk_pread(nvram->blk, 0, nvram->buf, nvram->size, 0);
409
410
if (ret < 0) {
411
error_setg(errp, "can't read spapr-nvram contents");
412
diff --git a/hw/nvram/xlnx-bbram.c b/hw/nvram/xlnx-bbram.c
413
index XXXXXXX..XXXXXXX 100644
414
--- a/hw/nvram/xlnx-bbram.c
415
+++ b/hw/nvram/xlnx-bbram.c
416
@@ -XXX,XX +XXX,XX @@ static void bbram_bdrv_read(XlnxBBRam *s, Error **errp)
417
blk_name(s->blk));
418
}
419
420
- if (blk_pread(s->blk, 0, ram, nr) < 0) {
421
+ if (blk_pread(s->blk, 0, ram, nr, 0) < 0) {
422
error_setg(errp,
423
"%s: Failed to read %u bytes from BBRAM backstore.",
424
blk_name(s->blk), nr);
425
diff --git a/hw/nvram/xlnx-efuse.c b/hw/nvram/xlnx-efuse.c
426
index XXXXXXX..XXXXXXX 100644
427
--- a/hw/nvram/xlnx-efuse.c
428
+++ b/hw/nvram/xlnx-efuse.c
429
@@ -XXX,XX +XXX,XX @@ static int efuse_bdrv_read(XlnxEFuse *s, Error **errp)
430
blk_name(s->blk));
431
}
432
433
- if (blk_pread(s->blk, 0, ram, nr) < 0) {
434
+ if (blk_pread(s->blk, 0, ram, nr, 0) < 0) {
435
error_setg(errp, "%s: Failed to read %u bytes from eFUSE backstore.",
436
blk_name(s->blk), nr);
437
return -1;
438
diff --git a/hw/ppc/pnv_pnor.c b/hw/ppc/pnv_pnor.c
439
index XXXXXXX..XXXXXXX 100644
440
--- a/hw/ppc/pnv_pnor.c
441
+++ b/hw/ppc/pnv_pnor.c
442
@@ -XXX,XX +XXX,XX @@ static void pnv_pnor_realize(DeviceState *dev, Error **errp)
443
444
s->storage = blk_blockalign(s->blk, s->size);
445
446
- if (blk_pread(s->blk, 0, s->storage, s->size) < 0) {
447
+ if (blk_pread(s->blk, 0, s->storage, s->size, 0) < 0) {
448
error_setg(errp, "failed to read the initial flash content");
449
return;
450
}
451
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
452
index XXXXXXX..XXXXXXX 100644
453
--- a/hw/sd/sd.c
454
+++ b/hw/sd/sd.c
455
@@ -XXX,XX +XXX,XX @@ void sd_set_cb(SDState *sd, qemu_irq readonly, qemu_irq insert)
456
static void sd_blk_read(SDState *sd, uint64_t addr, uint32_t len)
457
{
458
trace_sdcard_read_block(addr, len);
459
- if (!sd->blk || blk_pread(sd->blk, addr, sd->data, len) < 0) {
460
+ if (!sd->blk || blk_pread(sd->blk, addr, sd->data, len, 0) < 0) {
461
fprintf(stderr, "sd_blk_read: read error on host side\n");
462
}
463
}
464
diff --git a/migration/block.c b/migration/block.c
465
index XXXXXXX..XXXXXXX 100644
466
--- a/migration/block.c
467
+++ b/migration/block.c
468
@@ -XXX,XX +XXX,XX @@ static int mig_save_device_dirty(QEMUFile *f, BlkMigDevState *bmds,
469
bmds_set_aio_inflight(bmds, sector, nr_sectors, 1);
470
blk_mig_unlock();
471
} else {
472
- ret = blk_pread(bmds->blk, sector * BDRV_SECTOR_SIZE, blk->buf,
473
- nr_sectors * BDRV_SECTOR_SIZE);
474
+ ret = blk_pread(bmds->blk, sector * BDRV_SECTOR_SIZE,
475
+ blk->buf, nr_sectors * BDRV_SECTOR_SIZE, 0);
476
if (ret < 0) {
477
goto error;
478
}
479
diff --git a/nbd/server.c b/nbd/server.c
480
index XXXXXXX..XXXXXXX 100644
481
--- a/nbd/server.c
482
+++ b/nbd/server.c
483
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn nbd_co_send_sparse_read(NBDClient *client,
484
ret = nbd_co_send_iov(client, iov, 1, errp);
485
} else {
486
ret = blk_pread(exp->common.blk, offset + progress,
487
- data + progress, pnum);
488
+ data + progress, pnum, 0);
489
if (ret < 0) {
490
error_setg_errno(errp, -ret, "reading from file failed");
491
break;
492
@@ -XXX,XX +XXX,XX @@ static coroutine_fn int nbd_do_cmd_read(NBDClient *client, NBDRequest *request,
493
data, request->len, errp);
494
}
495
496
- ret = blk_pread(exp->common.blk, request->from, data, request->len);
497
+ ret = blk_pread(exp->common.blk, request->from, data, request->len, 0);
498
if (ret < 0) {
499
return nbd_send_generic_reply(client, request->handle, ret,
500
"reading from file failed", errp);
501
diff --git a/qemu-img.c b/qemu-img.c
502
index XXXXXXX..XXXXXXX 100644
503
--- a/qemu-img.c
504
+++ b/qemu-img.c
505
@@ -XXX,XX +XXX,XX @@ static int check_empty_sectors(BlockBackend *blk, int64_t offset,
506
int ret = 0;
507
int64_t idx;
508
509
- ret = blk_pread(blk, offset, buffer, bytes);
510
+ ret = blk_pread(blk, offset, buffer, bytes, 0);
511
if (ret < 0) {
512
error_report("Error while reading offset %" PRId64 " of %s: %s",
513
offset, filename, strerror(-ret));
514
@@ -XXX,XX +XXX,XX @@ static int img_compare(int argc, char **argv)
515
int64_t pnum;
516
517
chunk = MIN(chunk, IO_BUF_SIZE);
518
- ret = blk_pread(blk1, offset, buf1, chunk);
519
+ ret = blk_pread(blk1, offset, buf1, chunk, 0);
520
if (ret < 0) {
521
error_report("Error while reading offset %" PRId64
522
" of %s: %s",
523
@@ -XXX,XX +XXX,XX @@ static int img_compare(int argc, char **argv)
524
ret = 4;
525
goto out;
526
}
527
- ret = blk_pread(blk2, offset, buf2, chunk);
528
+ ret = blk_pread(blk2, offset, buf2, chunk, 0);
529
if (ret < 0) {
530
error_report("Error while reading offset %" PRId64
531
" of %s: %s",
532
@@ -XXX,XX +XXX,XX @@ static int img_rebase(int argc, char **argv)
533
n = old_backing_size - offset;
534
}
535
536
- ret = blk_pread(blk_old_backing, offset, buf_old, n);
537
+ ret = blk_pread(blk_old_backing, offset, buf_old, n, 0);
538
if (ret < 0) {
539
error_report("error while reading from old backing file");
540
goto out;
541
@@ -XXX,XX +XXX,XX @@ static int img_rebase(int argc, char **argv)
542
n = new_backing_size - offset;
543
}
544
545
- ret = blk_pread(blk_new_backing, offset, buf_new, n);
546
+ ret = blk_pread(blk_new_backing, offset, buf_new, n, 0);
547
if (ret < 0) {
548
error_report("error while reading from new backing file");
549
goto out;
550
@@ -XXX,XX +XXX,XX @@ static int img_dd(int argc, char **argv)
551
for (out_pos = 0; in_pos < size; block_count++) {
552
int bytes = (in_pos + in.bsz > size) ? size - in_pos : in.bsz;
553
554
- ret = blk_pread(blk1, in_pos, in.buf, bytes);
555
+ ret = blk_pread(blk1, in_pos, in.buf, bytes, 0);
556
if (ret < 0) {
557
error_report("error while reading from input image file: %s",
558
strerror(-ret));
559
diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
560
index XXXXXXX..XXXXXXX 100644
561
--- a/qemu-io-cmds.c
562
+++ b/qemu-io-cmds.c
563
@@ -XXX,XX +XXX,XX @@ static int do_pread(BlockBackend *blk, char *buf, int64_t offset,
564
return -ERANGE;
565
}
566
567
- ret = blk_pread(blk, offset, (uint8_t *)buf, bytes);
568
+ ret = blk_pread(blk, offset, (uint8_t *)buf, bytes, 0);
569
if (ret < 0) {
570
return ret;
571
}
572
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
573
index XXXXXXX..XXXXXXX 100644
574
--- a/tests/unit/test-block-iothread.c
575
+++ b/tests/unit/test-block-iothread.c
576
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_blk_pread(BlockBackend *blk)
577
int ret;
578
579
/* Success */
580
- ret = blk_pread(blk, 0, buf, sizeof(buf));
581
+ ret = blk_pread(blk, 0, buf, sizeof(buf), 0);
582
g_assert_cmpint(ret, ==, 0);
583
584
/* Early error: Negative offset */
585
- ret = blk_pread(blk, -2, buf, sizeof(buf));
586
+ ret = blk_pread(blk, -2, buf, sizeof(buf), 0);
587
g_assert_cmpint(ret, ==, -EIO);
588
}
589
590
--
591
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Swap 'buf' and 'bytes' around for consistency with
4
blk_co_{pread,pwrite}(), and in preparation to implement these functions
5
using generated_co_wrapper.
6
7
Callers were updated using this Coccinelle script:
8
9
@@ expression blk, offset, buf, bytes, flags; @@
10
- blk_pread(blk, offset, buf, bytes, flags)
11
+ blk_pread(blk, offset, bytes, buf, flags)
12
13
@@ expression blk, offset, buf, bytes, flags; @@
14
- blk_pwrite(blk, offset, buf, bytes, flags)
15
+ blk_pwrite(blk, offset, bytes, buf, flags)
16
17
It had no effect on hw/block/nand.c, presumably due to the #if, so that
18
file was updated manually.
19
20
Overly-long lines were then fixed by hand.
21
22
Signed-off-by: Alberto Faria <afaria@redhat.com>
23
Reviewed-by: Eric Blake <eblake@redhat.com>
24
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
25
Message-Id: <20220705161527.1054072-4-afaria@redhat.com>
26
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
27
---
28
include/sysemu/block-backend-io.h | 4 +--
29
block.c | 2 +-
30
block/block-backend.c | 4 +--
31
block/commit.c | 4 +--
32
block/crypto.c | 2 +-
33
block/export/fuse.c | 4 +--
34
block/parallels.c | 2 +-
35
block/qcow.c | 8 +++---
36
block/qcow2.c | 4 +--
37
block/qed.c | 8 +++---
38
block/vdi.c | 4 +--
39
block/vhdx.c | 20 ++++++-------
40
block/vmdk.c | 10 +++----
41
block/vpc.c | 12 ++++----
42
hw/arm/allwinner-h3.c | 2 +-
43
hw/arm/aspeed.c | 2 +-
44
hw/block/block.c | 2 +-
45
hw/block/fdc.c | 20 ++++++-------
46
hw/block/hd-geometry.c | 2 +-
47
hw/block/m25p80.c | 2 +-
48
hw/block/nand.c | 47 ++++++++++++++++---------------
49
hw/block/onenand.c | 32 ++++++++++-----------
50
hw/block/pflash_cfi01.c | 4 +--
51
hw/block/pflash_cfi02.c | 4 +--
52
hw/ide/atapi.c | 4 +--
53
hw/misc/mac_via.c | 4 +--
54
hw/misc/sifive_u_otp.c | 14 ++++-----
55
hw/nvram/eeprom_at24c.c | 4 +--
56
hw/nvram/spapr_nvram.c | 6 ++--
57
hw/nvram/xlnx-bbram.c | 4 +--
58
hw/nvram/xlnx-efuse.c | 4 +--
59
hw/ppc/pnv_pnor.c | 6 ++--
60
hw/sd/sd.c | 4 +--
61
migration/block.c | 6 ++--
62
nbd/server.c | 8 +++---
63
qemu-img.c | 18 ++++++------
64
qemu-io-cmds.c | 4 +--
65
tests/unit/test-block-iothread.c | 8 +++---
66
38 files changed, 150 insertions(+), 149 deletions(-)
67
68
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
69
index XXXXXXX..XXXXXXX 100644
70
--- a/include/sysemu/block-backend-io.h
71
+++ b/include/sysemu/block-backend-io.h
72
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_copy_range(BlockBackend *blk_in, int64_t off_in,
73
* the "I/O or GS" API.
74
*/
75
76
-int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes,
77
+int blk_pread(BlockBackend *blk, int64_t offset, int bytes, void *buf,
78
BdrvRequestFlags flags);
79
-int blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int bytes,
80
+int blk_pwrite(BlockBackend *blk, int64_t offset, int bytes, const void *buf,
81
BdrvRequestFlags flags);
82
int coroutine_fn blk_co_preadv(BlockBackend *blk, int64_t offset,
83
int64_t bytes, QEMUIOVector *qiov,
84
diff --git a/block.c b/block.c
85
index XXXXXXX..XXXXXXX 100644
86
--- a/block.c
87
+++ b/block.c
88
@@ -XXX,XX +XXX,XX @@ static int find_image_format(BlockBackend *file, const char *filename,
89
return ret;
90
}
91
92
- ret = blk_pread(file, 0, buf, sizeof(buf), 0);
93
+ ret = blk_pread(file, 0, sizeof(buf), buf, 0);
94
if (ret < 0) {
95
error_setg_errno(errp, -ret, "Could not read image for determining its "
96
"format");
97
diff --git a/block/block-backend.c b/block/block-backend.c
98
index XXXXXXX..XXXXXXX 100644
99
--- a/block/block-backend.c
100
+++ b/block/block-backend.c
101
@@ -XXX,XX +XXX,XX @@ BlockAIOCB *blk_aio_pwrite_zeroes(BlockBackend *blk, int64_t offset,
102
flags | BDRV_REQ_ZERO_WRITE, cb, opaque);
103
}
104
105
-int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes,
106
+int blk_pread(BlockBackend *blk, int64_t offset, int bytes, void *buf,
107
BdrvRequestFlags flags)
108
{
109
int ret;
110
@@ -XXX,XX +XXX,XX @@ int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes,
111
return ret;
112
}
113
114
-int blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int bytes,
115
+int blk_pwrite(BlockBackend *blk, int64_t offset, int bytes, const void *buf,
116
BdrvRequestFlags flags)
117
{
118
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
119
diff --git a/block/commit.c b/block/commit.c
120
index XXXXXXX..XXXXXXX 100644
121
--- a/block/commit.c
122
+++ b/block/commit.c
123
@@ -XXX,XX +XXX,XX @@ int bdrv_commit(BlockDriverState *bs)
124
goto ro_cleanup;
125
}
126
if (ret) {
127
- ret = blk_pread(src, offset, buf, n, 0);
128
+ ret = blk_pread(src, offset, n, buf, 0);
129
if (ret < 0) {
130
goto ro_cleanup;
131
}
132
133
- ret = blk_pwrite(backing, offset, buf, n, 0);
134
+ ret = blk_pwrite(backing, offset, n, buf, 0);
135
if (ret < 0) {
136
goto ro_cleanup;
137
}
138
diff --git a/block/crypto.c b/block/crypto.c
139
index XXXXXXX..XXXXXXX 100644
140
--- a/block/crypto.c
141
+++ b/block/crypto.c
142
@@ -XXX,XX +XXX,XX @@ static int block_crypto_create_write_func(QCryptoBlock *block,
143
struct BlockCryptoCreateData *data = opaque;
144
ssize_t ret;
145
146
- ret = blk_pwrite(data->blk, offset, buf, buflen, 0);
147
+ ret = blk_pwrite(data->blk, offset, buflen, buf, 0);
148
if (ret < 0) {
149
error_setg_errno(errp, -ret, "Could not write encryption header");
150
return ret;
151
diff --git a/block/export/fuse.c b/block/export/fuse.c
152
index XXXXXXX..XXXXXXX 100644
153
--- a/block/export/fuse.c
154
+++ b/block/export/fuse.c
155
@@ -XXX,XX +XXX,XX @@ static void fuse_read(fuse_req_t req, fuse_ino_t inode,
156
return;
157
}
158
159
- ret = blk_pread(exp->common.blk, offset, buf, size, 0);
160
+ ret = blk_pread(exp->common.blk, offset, size, buf, 0);
161
if (ret >= 0) {
162
fuse_reply_buf(req, buf, size);
163
} else {
164
@@ -XXX,XX +XXX,XX @@ static void fuse_write(fuse_req_t req, fuse_ino_t inode, const char *buf,
165
}
166
}
167
168
- ret = blk_pwrite(exp->common.blk, offset, buf, size, 0);
169
+ ret = blk_pwrite(exp->common.blk, offset, size, buf, 0);
170
if (ret >= 0) {
171
fuse_reply_write(req, size);
172
} else {
173
diff --git a/block/parallels.c b/block/parallels.c
174
index XXXXXXX..XXXXXXX 100644
175
--- a/block/parallels.c
176
+++ b/block/parallels.c
177
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn parallels_co_create(BlockdevCreateOptions* opts,
178
memset(tmp, 0, sizeof(tmp));
179
memcpy(tmp, &header, sizeof(header));
180
181
- ret = blk_pwrite(blk, 0, tmp, BDRV_SECTOR_SIZE, 0);
182
+ ret = blk_pwrite(blk, 0, BDRV_SECTOR_SIZE, tmp, 0);
183
if (ret < 0) {
184
goto exit;
185
}
186
diff --git a/block/qcow.c b/block/qcow.c
187
index XXXXXXX..XXXXXXX 100644
188
--- a/block/qcow.c
189
+++ b/block/qcow.c
190
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts,
191
}
192
193
/* write all the data */
194
- ret = blk_pwrite(qcow_blk, 0, &header, sizeof(header), 0);
195
+ ret = blk_pwrite(qcow_blk, 0, sizeof(header), &header, 0);
196
if (ret < 0) {
197
goto exit;
198
}
199
200
if (qcow_opts->has_backing_file) {
201
- ret = blk_pwrite(qcow_blk, sizeof(header),
202
- qcow_opts->backing_file, backing_filename_len, 0);
203
+ ret = blk_pwrite(qcow_blk, sizeof(header), backing_filename_len,
204
+ qcow_opts->backing_file, 0);
205
if (ret < 0) {
206
goto exit;
207
}
208
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts,
209
for (i = 0; i < DIV_ROUND_UP(sizeof(uint64_t) * l1_size, BDRV_SECTOR_SIZE);
210
i++) {
211
ret = blk_pwrite(qcow_blk, header_size + BDRV_SECTOR_SIZE * i,
212
- tmp, BDRV_SECTOR_SIZE, 0);
213
+ BDRV_SECTOR_SIZE, tmp, 0);
214
if (ret < 0) {
215
g_free(tmp);
216
goto exit;
217
diff --git a/block/qcow2.c b/block/qcow2.c
218
index XXXXXXX..XXXXXXX 100644
219
--- a/block/qcow2.c
220
+++ b/block/qcow2.c
221
@@ -XXX,XX +XXX,XX @@ qcow2_co_create(BlockdevCreateOptions *create_options, Error **errp)
222
cpu_to_be64(QCOW2_INCOMPAT_EXTL2);
223
}
224
225
- ret = blk_pwrite(blk, 0, header, cluster_size, 0);
226
+ ret = blk_pwrite(blk, 0, cluster_size, header, 0);
227
g_free(header);
228
if (ret < 0) {
229
error_setg_errno(errp, -ret, "Could not write qcow2 header");
230
@@ -XXX,XX +XXX,XX @@ qcow2_co_create(BlockdevCreateOptions *create_options, Error **errp)
231
/* Write a refcount table with one refcount block */
232
refcount_table = g_malloc0(2 * cluster_size);
233
refcount_table[0] = cpu_to_be64(2 * cluster_size);
234
- ret = blk_pwrite(blk, cluster_size, refcount_table, 2 * cluster_size, 0);
235
+ ret = blk_pwrite(blk, cluster_size, 2 * cluster_size, refcount_table, 0);
236
g_free(refcount_table);
237
238
if (ret < 0) {
239
diff --git a/block/qed.c b/block/qed.c
240
index XXXXXXX..XXXXXXX 100644
241
--- a/block/qed.c
242
+++ b/block/qed.c
243
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn bdrv_qed_co_create(BlockdevCreateOptions *opts,
244
}
245
246
qed_header_cpu_to_le(&header, &le_header);
247
- ret = blk_pwrite(blk, 0, &le_header, sizeof(le_header), 0);
248
+ ret = blk_pwrite(blk, 0, sizeof(le_header), &le_header, 0);
249
if (ret < 0) {
250
goto out;
251
}
252
- ret = blk_pwrite(blk, sizeof(le_header), qed_opts->backing_file,
253
- header.backing_filename_size, 0);
254
+ ret = blk_pwrite(blk, sizeof(le_header), header.backing_filename_size,
255
+ qed_opts->backing_file, 0);
256
if (ret < 0) {
257
goto out;
258
}
259
260
l1_table = g_malloc0(l1_size);
261
- ret = blk_pwrite(blk, header.l1_table_offset, l1_table, l1_size, 0);
262
+ ret = blk_pwrite(blk, header.l1_table_offset, l1_size, l1_table, 0);
263
if (ret < 0) {
264
goto out;
265
}
266
diff --git a/block/vdi.c b/block/vdi.c
267
index XXXXXXX..XXXXXXX 100644
268
--- a/block/vdi.c
269
+++ b/block/vdi.c
270
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn vdi_co_do_create(BlockdevCreateOptions *create_options,
271
vdi_header_print(&header);
272
}
273
vdi_header_to_le(&header);
274
- ret = blk_pwrite(blk, offset, &header, sizeof(header), 0);
275
+ ret = blk_pwrite(blk, offset, sizeof(header), &header, 0);
276
if (ret < 0) {
277
error_setg(errp, "Error writing header");
278
goto exit;
279
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn vdi_co_do_create(BlockdevCreateOptions *create_options,
280
bmap[i] = VDI_UNALLOCATED;
281
}
282
}
283
- ret = blk_pwrite(blk, offset, bmap, bmap_size, 0);
284
+ ret = blk_pwrite(blk, offset, bmap_size, bmap, 0);
285
if (ret < 0) {
286
error_setg(errp, "Error writing bmap");
287
goto exit;
288
diff --git a/block/vhdx.c b/block/vhdx.c
289
index XXXXXXX..XXXXXXX 100644
290
--- a/block/vhdx.c
291
+++ b/block/vhdx.c
292
@@ -XXX,XX +XXX,XX @@ static int vhdx_create_new_metadata(BlockBackend *blk,
293
VHDX_META_FLAGS_IS_VIRTUAL_DISK;
294
vhdx_metadata_entry_le_export(&md_table_entry[4]);
295
296
- ret = blk_pwrite(blk, metadata_offset, buffer, VHDX_HEADER_BLOCK_SIZE, 0);
297
+ ret = blk_pwrite(blk, metadata_offset, VHDX_HEADER_BLOCK_SIZE, buffer, 0);
298
if (ret < 0) {
299
goto exit;
300
}
301
302
- ret = blk_pwrite(blk, metadata_offset + (64 * KiB), entry_buffer,
303
- VHDX_METADATA_ENTRY_BUFFER_SIZE, 0);
304
+ ret = blk_pwrite(blk, metadata_offset + (64 * KiB),
305
+ VHDX_METADATA_ENTRY_BUFFER_SIZE, entry_buffer, 0);
306
if (ret < 0) {
307
goto exit;
308
}
309
@@ -XXX,XX +XXX,XX @@ static int vhdx_create_bat(BlockBackend *blk, BDRVVHDXState *s,
310
s->bat[sinfo.bat_idx] = cpu_to_le64(s->bat[sinfo.bat_idx]);
311
sector_num += s->sectors_per_block;
312
}
313
- ret = blk_pwrite(blk, file_offset, s->bat, length, 0);
314
+ ret = blk_pwrite(blk, file_offset, length, s->bat, 0);
315
if (ret < 0) {
316
error_setg_errno(errp, -ret, "Failed to write the BAT");
317
goto exit;
318
@@ -XXX,XX +XXX,XX @@ static int vhdx_create_new_region_table(BlockBackend *blk,
319
}
320
321
/* Now write out the region headers to disk */
322
- ret = blk_pwrite(blk, VHDX_REGION_TABLE_OFFSET, buffer,
323
- VHDX_HEADER_BLOCK_SIZE, 0);
324
+ ret = blk_pwrite(blk, VHDX_REGION_TABLE_OFFSET, VHDX_HEADER_BLOCK_SIZE,
325
+ buffer, 0);
326
if (ret < 0) {
327
error_setg_errno(errp, -ret, "Failed to write first region table");
328
goto exit;
329
}
330
331
- ret = blk_pwrite(blk, VHDX_REGION_TABLE2_OFFSET, buffer,
332
- VHDX_HEADER_BLOCK_SIZE, 0);
333
+ ret = blk_pwrite(blk, VHDX_REGION_TABLE2_OFFSET, VHDX_HEADER_BLOCK_SIZE,
334
+ buffer, 0);
335
if (ret < 0) {
336
error_setg_errno(errp, -ret, "Failed to write second region table");
337
goto exit;
338
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn vhdx_co_create(BlockdevCreateOptions *opts,
339
creator = g_utf8_to_utf16("QEMU v" QEMU_VERSION, -1, NULL,
340
&creator_items, NULL);
341
signature = cpu_to_le64(VHDX_FILE_SIGNATURE);
342
- ret = blk_pwrite(blk, VHDX_FILE_ID_OFFSET, &signature, sizeof(signature),
343
+ ret = blk_pwrite(blk, VHDX_FILE_ID_OFFSET, sizeof(signature), &signature,
344
0);
345
if (ret < 0) {
346
error_setg_errno(errp, -ret, "Failed to write file signature");
347
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn vhdx_co_create(BlockdevCreateOptions *opts,
348
}
349
if (creator) {
350
ret = blk_pwrite(blk, VHDX_FILE_ID_OFFSET + sizeof(signature),
351
- creator, creator_items * sizeof(gunichar2), 0);
352
+ creator_items * sizeof(gunichar2), creator, 0);
353
if (ret < 0) {
354
error_setg_errno(errp, -ret, "Failed to write creator field");
355
goto delete_and_exit;
356
diff --git a/block/vmdk.c b/block/vmdk.c
357
index XXXXXXX..XXXXXXX 100644
358
--- a/block/vmdk.c
359
+++ b/block/vmdk.c
360
@@ -XXX,XX +XXX,XX @@ static int vmdk_init_extent(BlockBackend *blk,
361
header.check_bytes[3] = 0xa;
362
363
/* write all the data */
364
- ret = blk_pwrite(blk, 0, &magic, sizeof(magic), 0);
365
+ ret = blk_pwrite(blk, 0, sizeof(magic), &magic, 0);
366
if (ret < 0) {
367
error_setg(errp, QERR_IO_ERROR);
368
goto exit;
369
}
370
- ret = blk_pwrite(blk, sizeof(magic), &header, sizeof(header), 0);
371
+ ret = blk_pwrite(blk, sizeof(magic), sizeof(header), &header, 0);
372
if (ret < 0) {
373
error_setg(errp, QERR_IO_ERROR);
374
goto exit;
375
@@ -XXX,XX +XXX,XX @@ static int vmdk_init_extent(BlockBackend *blk,
376
gd_buf[i] = cpu_to_le32(tmp);
377
}
378
ret = blk_pwrite(blk, le64_to_cpu(header.rgd_offset) * BDRV_SECTOR_SIZE,
379
- gd_buf, gd_buf_size, 0);
380
+ gd_buf_size, gd_buf, 0);
381
if (ret < 0) {
382
error_setg(errp, QERR_IO_ERROR);
383
goto exit;
384
@@ -XXX,XX +XXX,XX @@ static int vmdk_init_extent(BlockBackend *blk,
385
gd_buf[i] = cpu_to_le32(tmp);
386
}
387
ret = blk_pwrite(blk, le64_to_cpu(header.gd_offset) * BDRV_SECTOR_SIZE,
388
- gd_buf, gd_buf_size, 0);
389
+ gd_buf_size, gd_buf, 0);
390
if (ret < 0) {
391
error_setg(errp, QERR_IO_ERROR);
392
}
393
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn vmdk_co_do_create(int64_t size,
394
desc_offset = 0x200;
395
}
396
397
- ret = blk_pwrite(blk, desc_offset, desc, desc_len, 0);
398
+ ret = blk_pwrite(blk, desc_offset, desc_len, desc, 0);
399
if (ret < 0) {
400
error_setg_errno(errp, -ret, "Could not write description");
401
goto exit;
402
diff --git a/block/vpc.c b/block/vpc.c
403
index XXXXXXX..XXXXXXX 100644
404
--- a/block/vpc.c
405
+++ b/block/vpc.c
406
@@ -XXX,XX +XXX,XX @@ static int create_dynamic_disk(BlockBackend *blk, VHDFooter *footer,
407
block_size = 0x200000;
408
num_bat_entries = DIV_ROUND_UP(total_sectors, block_size / 512);
409
410
- ret = blk_pwrite(blk, offset, footer, sizeof(*footer), 0);
411
+ ret = blk_pwrite(blk, offset, sizeof(*footer), footer, 0);
412
if (ret < 0) {
413
goto fail;
414
}
415
416
offset = 1536 + ((num_bat_entries * 4 + 511) & ~511);
417
- ret = blk_pwrite(blk, offset, footer, sizeof(*footer), 0);
418
+ ret = blk_pwrite(blk, offset, sizeof(*footer), footer, 0);
419
if (ret < 0) {
420
goto fail;
421
}
422
@@ -XXX,XX +XXX,XX @@ static int create_dynamic_disk(BlockBackend *blk, VHDFooter *footer,
423
424
memset(bat_sector, 0xFF, 512);
425
for (i = 0; i < DIV_ROUND_UP(num_bat_entries * 4, 512); i++) {
426
- ret = blk_pwrite(blk, offset, bat_sector, 512, 0);
427
+ ret = blk_pwrite(blk, offset, 512, bat_sector, 0);
428
if (ret < 0) {
429
goto fail;
430
}
431
@@ -XXX,XX +XXX,XX @@ static int create_dynamic_disk(BlockBackend *blk, VHDFooter *footer,
432
/* Write the header */
433
offset = 512;
434
435
- ret = blk_pwrite(blk, offset, &dyndisk_header, sizeof(dyndisk_header), 0);
436
+ ret = blk_pwrite(blk, offset, sizeof(dyndisk_header), &dyndisk_header, 0);
437
if (ret < 0) {
438
goto fail;
439
}
440
@@ -XXX,XX +XXX,XX @@ static int create_fixed_disk(BlockBackend *blk, VHDFooter *footer,
441
return ret;
442
}
443
444
- ret = blk_pwrite(blk, total_size - sizeof(*footer),
445
- footer, sizeof(*footer), 0);
446
+ ret = blk_pwrite(blk, total_size - sizeof(*footer), sizeof(*footer),
447
+ footer, 0);
448
if (ret < 0) {
449
error_setg_errno(errp, -ret, "Unable to write VHD header");
450
return ret;
451
diff --git a/hw/arm/allwinner-h3.c b/hw/arm/allwinner-h3.c
452
index XXXXXXX..XXXXXXX 100644
453
--- a/hw/arm/allwinner-h3.c
454
+++ b/hw/arm/allwinner-h3.c
455
@@ -XXX,XX +XXX,XX @@ void allwinner_h3_bootrom_setup(AwH3State *s, BlockBackend *blk)
456
const int64_t rom_size = 32 * KiB;
457
g_autofree uint8_t *buffer = g_new0(uint8_t, rom_size);
458
459
- if (blk_pread(blk, 8 * KiB, buffer, rom_size, 0) < 0) {
460
+ if (blk_pread(blk, 8 * KiB, rom_size, buffer, 0) < 0) {
461
error_setg(&error_fatal, "%s: failed to read BlockBackend data",
462
__func__);
463
return;
464
diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
465
index XXXXXXX..XXXXXXX 100644
466
--- a/hw/arm/aspeed.c
467
+++ b/hw/arm/aspeed.c
468
@@ -XXX,XX +XXX,XX @@ static void write_boot_rom(DriveInfo *dinfo, hwaddr addr, size_t rom_size,
469
}
470
471
storage = g_malloc0(rom_size);
472
- if (blk_pread(blk, 0, storage, rom_size, 0) < 0) {
473
+ if (blk_pread(blk, 0, rom_size, storage, 0) < 0) {
474
error_setg(errp, "failed to read the initial flash content");
475
return;
476
}
477
diff --git a/hw/block/block.c b/hw/block/block.c
478
index XXXXXXX..XXXXXXX 100644
479
--- a/hw/block/block.c
480
+++ b/hw/block/block.c
481
@@ -XXX,XX +XXX,XX @@ bool blk_check_size_and_read_all(BlockBackend *blk, void *buf, hwaddr size,
482
* block device and read only on demand.
483
*/
484
assert(size <= BDRV_REQUEST_MAX_BYTES);
485
- ret = blk_pread(blk, 0, buf, size, 0);
486
+ ret = blk_pread(blk, 0, size, buf, 0);
487
if (ret < 0) {
488
error_setg_errno(errp, -ret, "can't read block backend");
489
return false;
490
diff --git a/hw/block/fdc.c b/hw/block/fdc.c
491
index XXXXXXX..XXXXXXX 100644
492
--- a/hw/block/fdc.c
493
+++ b/hw/block/fdc.c
494
@@ -XXX,XX +XXX,XX @@ int fdctrl_transfer_handler(void *opaque, int nchan, int dma_pos, int dma_len)
495
if (fdctrl->data_dir != FD_DIR_WRITE ||
496
len < FD_SECTOR_LEN || rel_pos != 0) {
497
/* READ & SCAN commands and realign to a sector for WRITE */
498
- if (blk_pread(cur_drv->blk, fd_offset(cur_drv), fdctrl->fifo,
499
- BDRV_SECTOR_SIZE, 0) < 0) {
500
+ if (blk_pread(cur_drv->blk, fd_offset(cur_drv), BDRV_SECTOR_SIZE,
501
+ fdctrl->fifo, 0) < 0) {
502
FLOPPY_DPRINTF("Floppy: error getting sector %d\n",
503
fd_sector(cur_drv));
504
/* Sure, image size is too small... */
505
@@ -XXX,XX +XXX,XX @@ int fdctrl_transfer_handler(void *opaque, int nchan, int dma_pos, int dma_len)
506
507
k->read_memory(fdctrl->dma, nchan, fdctrl->fifo + rel_pos,
508
fdctrl->data_pos, len);
509
- if (blk_pwrite(cur_drv->blk, fd_offset(cur_drv),
510
- fdctrl->fifo, BDRV_SECTOR_SIZE, 0) < 0) {
511
+ if (blk_pwrite(cur_drv->blk, fd_offset(cur_drv), BDRV_SECTOR_SIZE,
512
+ fdctrl->fifo, 0) < 0) {
513
FLOPPY_DPRINTF("error writing sector %d\n",
514
fd_sector(cur_drv));
515
fdctrl_stop_transfer(fdctrl, FD_SR0_ABNTERM | FD_SR0_SEEK, 0x00, 0x00);
516
@@ -XXX,XX +XXX,XX @@ static uint32_t fdctrl_read_data(FDCtrl *fdctrl)
517
fd_sector(cur_drv));
518
return 0;
519
}
520
- if (blk_pread(cur_drv->blk, fd_offset(cur_drv), fdctrl->fifo,
521
- BDRV_SECTOR_SIZE, 0)
522
+ if (blk_pread(cur_drv->blk, fd_offset(cur_drv), BDRV_SECTOR_SIZE,
523
+ fdctrl->fifo, 0)
524
< 0) {
525
FLOPPY_DPRINTF("error getting sector %d\n",
526
fd_sector(cur_drv));
527
@@ -XXX,XX +XXX,XX @@ static void fdctrl_format_sector(FDCtrl *fdctrl)
528
}
529
memset(fdctrl->fifo, 0, FD_SECTOR_LEN);
530
if (cur_drv->blk == NULL ||
531
- blk_pwrite(cur_drv->blk, fd_offset(cur_drv), fdctrl->fifo,
532
- BDRV_SECTOR_SIZE, 0) < 0) {
533
+ blk_pwrite(cur_drv->blk, fd_offset(cur_drv), BDRV_SECTOR_SIZE,
534
+ fdctrl->fifo, 0) < 0) {
535
FLOPPY_DPRINTF("error formatting sector %d\n", fd_sector(cur_drv));
536
fdctrl_stop_transfer(fdctrl, FD_SR0_ABNTERM | FD_SR0_SEEK, 0x00, 0x00);
537
} else {
538
@@ -XXX,XX +XXX,XX @@ static void fdctrl_write_data(FDCtrl *fdctrl, uint32_t value)
539
if (pos == FD_SECTOR_LEN - 1 ||
540
fdctrl->data_pos == fdctrl->data_len) {
541
cur_drv = get_cur_drv(fdctrl);
542
- if (blk_pwrite(cur_drv->blk, fd_offset(cur_drv), fdctrl->fifo,
543
- BDRV_SECTOR_SIZE, 0) < 0) {
544
+ if (blk_pwrite(cur_drv->blk, fd_offset(cur_drv), BDRV_SECTOR_SIZE,
545
+ fdctrl->fifo, 0) < 0) {
546
FLOPPY_DPRINTF("error writing sector %d\n",
547
fd_sector(cur_drv));
548
break;
549
diff --git a/hw/block/hd-geometry.c b/hw/block/hd-geometry.c
550
index XXXXXXX..XXXXXXX 100644
551
--- a/hw/block/hd-geometry.c
552
+++ b/hw/block/hd-geometry.c
553
@@ -XXX,XX +XXX,XX @@ static int guess_disk_lchs(BlockBackend *blk,
554
555
blk_get_geometry(blk, &nb_sectors);
556
557
- if (blk_pread(blk, 0, buf, BDRV_SECTOR_SIZE, 0) < 0) {
558
+ if (blk_pread(blk, 0, BDRV_SECTOR_SIZE, buf, 0) < 0) {
559
return -1;
560
}
561
/* test msdos magic */
562
diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
563
index XXXXXXX..XXXXXXX 100644
564
--- a/hw/block/m25p80.c
565
+++ b/hw/block/m25p80.c
566
@@ -XXX,XX +XXX,XX @@ static void m25p80_realize(SSIPeripheral *ss, Error **errp)
567
trace_m25p80_binding(s);
568
s->storage = blk_blockalign(s->blk, s->size);
569
570
- if (blk_pread(s->blk, 0, s->storage, s->size, 0) < 0) {
571
+ if (blk_pread(s->blk, 0, s->size, s->storage, 0) < 0) {
572
error_setg(errp, "failed to read the initial flash content");
573
return;
574
}
575
diff --git a/hw/block/nand.c b/hw/block/nand.c
576
index XXXXXXX..XXXXXXX 100644
577
--- a/hw/block/nand.c
578
+++ b/hw/block/nand.c
579
@@ -XXX,XX +XXX,XX @@ static void glue(nand_blk_write_, NAND_PAGE_SIZE)(NANDFlashState *s)
580
sector = SECTOR(s->addr);
581
off = (s->addr & PAGE_MASK) + s->offset;
582
soff = SECTOR_OFFSET(s->addr);
583
- if (blk_pread(s->blk, sector << BDRV_SECTOR_BITS, iobuf,
584
- PAGE_SECTORS << BDRV_SECTOR_BITS, 0) < 0) {
585
+ if (blk_pread(s->blk, sector << BDRV_SECTOR_BITS,
586
+ PAGE_SECTORS << BDRV_SECTOR_BITS, iobuf, 0) < 0) {
587
printf("%s: read error in sector %" PRIu64 "\n", __func__, sector);
588
return;
589
}
590
@@ -XXX,XX +XXX,XX @@ static void glue(nand_blk_write_, NAND_PAGE_SIZE)(NANDFlashState *s)
591
MIN(OOB_SIZE, off + s->iolen - NAND_PAGE_SIZE));
592
}
593
594
- if (blk_pwrite(s->blk, sector << BDRV_SECTOR_BITS, iobuf,
595
- PAGE_SECTORS << BDRV_SECTOR_BITS, 0) < 0) {
596
+ if (blk_pwrite(s->blk, sector << BDRV_SECTOR_BITS,
597
+ PAGE_SECTORS << BDRV_SECTOR_BITS, iobuf, 0) < 0) {
598
printf("%s: write error in sector %" PRIu64 "\n", __func__, sector);
599
}
600
} else {
601
off = PAGE_START(s->addr) + (s->addr & PAGE_MASK) + s->offset;
602
sector = off >> 9;
603
soff = off & 0x1ff;
604
- if (blk_pread(s->blk, sector << BDRV_SECTOR_BITS, iobuf,
605
- (PAGE_SECTORS + 2) << BDRV_SECTOR_BITS, 0) < 0) {
606
+ if (blk_pread(s->blk, sector << BDRV_SECTOR_BITS,
607
+ (PAGE_SECTORS + 2) << BDRV_SECTOR_BITS, iobuf, 0) < 0) {
608
printf("%s: read error in sector %" PRIu64 "\n", __func__, sector);
609
return;
610
}
611
612
mem_and(iobuf + soff, s->io, s->iolen);
613
614
- if (blk_pwrite(s->blk, sector << BDRV_SECTOR_BITS, iobuf,
615
- (PAGE_SECTORS + 2) << BDRV_SECTOR_BITS, 0) < 0) {
616
+ if (blk_pwrite(s->blk, sector << BDRV_SECTOR_BITS,
617
+ (PAGE_SECTORS + 2) << BDRV_SECTOR_BITS, iobuf, 0) < 0) {
618
printf("%s: write error in sector %" PRIu64 "\n", __func__, sector);
619
}
620
}
621
@@ -XXX,XX +XXX,XX @@ static void glue(nand_blk_erase_, NAND_PAGE_SIZE)(NANDFlashState *s)
622
i = SECTOR(addr);
623
page = SECTOR(addr + (1 << (ADDR_SHIFT + s->erase_shift)));
624
for (; i < page; i ++)
625
- if (blk_pwrite(s->blk, i << BDRV_SECTOR_BITS, iobuf,
626
- BDRV_SECTOR_SIZE, 0) < 0) {
627
+ if (blk_pwrite(s->blk, i << BDRV_SECTOR_BITS,
628
+ BDRV_SECTOR_SIZE, iobuf, 0) < 0) {
629
printf("%s: write error in sector %" PRIu64 "\n", __func__, i);
630
}
631
} else {
632
addr = PAGE_START(addr);
633
page = addr >> 9;
634
- if (blk_pread(s->blk, page << BDRV_SECTOR_BITS, iobuf,
635
- BDRV_SECTOR_SIZE, 0) < 0) {
636
+ if (blk_pread(s->blk, page << BDRV_SECTOR_BITS,
637
+ BDRV_SECTOR_SIZE, iobuf, 0) < 0) {
638
printf("%s: read error in sector %" PRIu64 "\n", __func__, page);
639
}
640
memset(iobuf + (addr & 0x1ff), 0xff, (~addr & 0x1ff) + 1);
641
- if (blk_pwrite(s->blk, page << BDRV_SECTOR_BITS, iobuf,
642
- BDRV_SECTOR_SIZE, 0) < 0) {
643
+ if (blk_pwrite(s->blk, page << BDRV_SECTOR_BITS,
644
+ BDRV_SECTOR_SIZE, iobuf, 0) < 0) {
645
printf("%s: write error in sector %" PRIu64 "\n", __func__, page);
646
}
647
648
@@ -XXX,XX +XXX,XX @@ static void glue(nand_blk_erase_, NAND_PAGE_SIZE)(NANDFlashState *s)
649
i = (addr & ~0x1ff) + 0x200;
650
for (addr += ((NAND_PAGE_SIZE + OOB_SIZE) << s->erase_shift) - 0x200;
651
i < addr; i += 0x200) {
652
- if (blk_pwrite(s->blk, i, iobuf, BDRV_SECTOR_SIZE, 0) < 0) {
653
+ if (blk_pwrite(s->blk, i, BDRV_SECTOR_SIZE, iobuf, 0) < 0) {
654
printf("%s: write error in sector %" PRIu64 "\n",
655
__func__, i >> 9);
656
}
657
}
658
659
page = i >> 9;
660
- if (blk_pread(s->blk, page << BDRV_SECTOR_BITS, iobuf,
661
- BDRV_SECTOR_SIZE, 0) < 0) {
662
+ if (blk_pread(s->blk, page << BDRV_SECTOR_BITS,
663
+ BDRV_SECTOR_SIZE, iobuf, 0) < 0) {
664
printf("%s: read error in sector %" PRIu64 "\n", __func__, page);
665
}
666
memset(iobuf, 0xff, ((addr - 1) & 0x1ff) + 1);
667
- if (blk_pwrite(s->blk, page << BDRV_SECTOR_BITS, iobuf,
668
- BDRV_SECTOR_SIZE, 0) < 0) {
669
+ if (blk_pwrite(s->blk, page << BDRV_SECTOR_BITS,
670
+ BDRV_SECTOR_SIZE, iobuf, 0) < 0) {
671
printf("%s: write error in sector %" PRIu64 "\n", __func__, page);
672
}
673
}
674
@@ -XXX,XX +XXX,XX @@ static void glue(nand_blk_load_, NAND_PAGE_SIZE)(NANDFlashState *s,
675
676
if (s->blk) {
677
if (s->mem_oob) {
678
- if (blk_pread(s->blk, SECTOR(addr) << BDRV_SECTOR_BITS, s->io,
679
- PAGE_SECTORS << BDRV_SECTOR_BITS, 0) < 0) {
680
+ if (blk_pread(s->blk, SECTOR(addr) << BDRV_SECTOR_BITS,
681
+ PAGE_SECTORS << BDRV_SECTOR_BITS, s->io, 0) < 0) {
682
printf("%s: read error in sector %" PRIu64 "\n",
683
__func__, SECTOR(addr));
684
}
685
@@ -XXX,XX +XXX,XX @@ static void glue(nand_blk_load_, NAND_PAGE_SIZE)(NANDFlashState *s,
686
OOB_SIZE);
687
s->ioaddr = s->io + SECTOR_OFFSET(s->addr) + offset;
688
} else {
689
- if (blk_pread(s->blk, PAGE_START(addr), s->io,
690
- (PAGE_SECTORS + 2) << BDRV_SECTOR_BITS, 0) < 0) {
691
+ if (blk_pread(s->blk, PAGE_START(addr),
692
+ (PAGE_SECTORS + 2) << BDRV_SECTOR_BITS, s->io, 0)
693
+ < 0) {
694
printf("%s: read error in sector %" PRIu64 "\n",
695
__func__, PAGE_START(addr) >> 9);
696
}
697
diff --git a/hw/block/onenand.c b/hw/block/onenand.c
698
index XXXXXXX..XXXXXXX 100644
699
--- a/hw/block/onenand.c
700
+++ b/hw/block/onenand.c
701
@@ -XXX,XX +XXX,XX @@ static void onenand_reset(OneNANDState *s, int cold)
702
/* Lock the whole flash */
703
memset(s->blockwp, ONEN_LOCK_LOCKED, s->blocks);
704
705
- if (s->blk_cur && blk_pread(s->blk_cur, 0, s->boot[0],
706
- 8 << BDRV_SECTOR_BITS, 0) < 0) {
707
+ if (s->blk_cur && blk_pread(s->blk_cur, 0, 8 << BDRV_SECTOR_BITS,
708
+ s->boot[0], 0) < 0) {
709
hw_error("%s: Loading the BootRAM failed.\n", __func__);
710
}
711
}
712
@@ -XXX,XX +XXX,XX @@ static inline int onenand_load_main(OneNANDState *s, int sec, int secn,
713
assert(UINT32_MAX >> BDRV_SECTOR_BITS > sec);
714
assert(UINT32_MAX >> BDRV_SECTOR_BITS > secn);
715
if (s->blk_cur) {
716
- return blk_pread(s->blk_cur, sec << BDRV_SECTOR_BITS, dest,
717
- secn << BDRV_SECTOR_BITS, 0) < 0;
718
+ return blk_pread(s->blk_cur, sec << BDRV_SECTOR_BITS,
719
+ secn << BDRV_SECTOR_BITS, dest, 0) < 0;
720
} else if (sec + secn > s->secs_cur) {
721
return 1;
722
}
723
@@ -XXX,XX +XXX,XX @@ static inline int onenand_prog_main(OneNANDState *s, int sec, int secn,
724
uint8_t *dp = 0;
725
if (s->blk_cur) {
726
dp = g_malloc(size);
727
- if (!dp || blk_pread(s->blk_cur, offset, dp, size, 0) < 0) {
728
+ if (!dp || blk_pread(s->blk_cur, offset, size, dp, 0) < 0) {
729
result = 1;
730
}
731
} else {
732
@@ -XXX,XX +XXX,XX @@ static inline int onenand_prog_main(OneNANDState *s, int sec, int secn,
733
dp[i] &= sp[i];
734
}
735
if (s->blk_cur) {
736
- result = blk_pwrite(s->blk_cur, offset, dp, size, 0) < 0;
737
+ result = blk_pwrite(s->blk_cur, offset, size, dp, 0) < 0;
738
}
739
}
740
if (dp && s->blk_cur) {
741
@@ -XXX,XX +XXX,XX @@ static inline int onenand_load_spare(OneNANDState *s, int sec, int secn,
742
743
if (s->blk_cur) {
744
uint32_t offset = (s->secs_cur + (sec >> 5)) << BDRV_SECTOR_BITS;
745
- if (blk_pread(s->blk_cur, offset, buf, BDRV_SECTOR_SIZE, 0) < 0) {
746
+ if (blk_pread(s->blk_cur, offset, BDRV_SECTOR_SIZE, buf, 0) < 0) {
747
return 1;
748
}
749
memcpy(dest, buf + ((sec & 31) << 4), secn << 4);
750
@@ -XXX,XX +XXX,XX @@ static inline int onenand_prog_spare(OneNANDState *s, int sec, int secn,
751
if (s->blk_cur) {
752
dp = g_malloc(512);
753
if (!dp
754
- || blk_pread(s->blk_cur, offset, dp, BDRV_SECTOR_SIZE, 0) < 0) {
755
+ || blk_pread(s->blk_cur, offset, BDRV_SECTOR_SIZE, dp, 0) < 0) {
756
result = 1;
757
} else {
758
dpp = dp + ((sec & 31) << 4);
759
@@ -XXX,XX +XXX,XX @@ static inline int onenand_prog_spare(OneNANDState *s, int sec, int secn,
760
dpp[i] &= sp[i];
761
}
762
if (s->blk_cur) {
763
- result = blk_pwrite(s->blk_cur, offset, dp,
764
- BDRV_SECTOR_SIZE, 0) < 0;
765
+ result = blk_pwrite(s->blk_cur, offset, BDRV_SECTOR_SIZE, dp,
766
+ 0) < 0;
767
}
768
}
769
g_free(dp);
770
@@ -XXX,XX +XXX,XX @@ static inline int onenand_erase(OneNANDState *s, int sec, int num)
771
for (; num > 0; num--, sec++) {
772
if (s->blk_cur) {
773
int erasesec = s->secs_cur + (sec >> 5);
774
- if (blk_pwrite(s->blk_cur, sec << BDRV_SECTOR_BITS, blankbuf,
775
- BDRV_SECTOR_SIZE, 0) < 0) {
776
+ if (blk_pwrite(s->blk_cur, sec << BDRV_SECTOR_BITS,
777
+ BDRV_SECTOR_SIZE, blankbuf, 0) < 0) {
778
goto fail;
779
}
780
- if (blk_pread(s->blk_cur, erasesec << BDRV_SECTOR_BITS, tmpbuf,
781
- BDRV_SECTOR_SIZE, 0) < 0) {
782
+ if (blk_pread(s->blk_cur, erasesec << BDRV_SECTOR_BITS,
783
+ BDRV_SECTOR_SIZE, tmpbuf, 0) < 0) {
784
goto fail;
785
}
786
memcpy(tmpbuf + ((sec & 31) << 4), blankbuf, 1 << 4);
787
- if (blk_pwrite(s->blk_cur, erasesec << BDRV_SECTOR_BITS, tmpbuf,
788
- BDRV_SECTOR_SIZE, 0) < 0) {
789
+ if (blk_pwrite(s->blk_cur, erasesec << BDRV_SECTOR_BITS,
790
+ BDRV_SECTOR_SIZE, tmpbuf, 0) < 0) {
791
goto fail;
792
}
793
} else {
794
diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
795
index XXXXXXX..XXXXXXX 100644
796
--- a/hw/block/pflash_cfi01.c
797
+++ b/hw/block/pflash_cfi01.c
798
@@ -XXX,XX +XXX,XX @@ static void pflash_update(PFlashCFI01 *pfl, int offset,
799
/* widen to sector boundaries */
800
offset = QEMU_ALIGN_DOWN(offset, BDRV_SECTOR_SIZE);
801
offset_end = QEMU_ALIGN_UP(offset_end, BDRV_SECTOR_SIZE);
802
- ret = blk_pwrite(pfl->blk, offset, pfl->storage + offset,
803
- offset_end - offset, 0);
804
+ ret = blk_pwrite(pfl->blk, offset, offset_end - offset,
805
+ pfl->storage + offset, 0);
806
if (ret < 0) {
807
/* TODO set error bit in status */
808
error_report("Could not update PFLASH: %s", strerror(-ret));
809
diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c
810
index XXXXXXX..XXXXXXX 100644
811
--- a/hw/block/pflash_cfi02.c
812
+++ b/hw/block/pflash_cfi02.c
813
@@ -XXX,XX +XXX,XX @@ static void pflash_update(PFlashCFI02 *pfl, int offset, int size)
814
/* widen to sector boundaries */
815
offset = QEMU_ALIGN_DOWN(offset, BDRV_SECTOR_SIZE);
816
offset_end = QEMU_ALIGN_UP(offset_end, BDRV_SECTOR_SIZE);
817
- ret = blk_pwrite(pfl->blk, offset, pfl->storage + offset,
818
- offset_end - offset, 0);
819
+ ret = blk_pwrite(pfl->blk, offset, offset_end - offset,
820
+ pfl->storage + offset, 0);
821
if (ret < 0) {
822
/* TODO set error bit in status */
823
error_report("Could not update PFLASH: %s", strerror(-ret));
824
diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
825
index XXXXXXX..XXXXXXX 100644
826
--- a/hw/ide/atapi.c
827
+++ b/hw/ide/atapi.c
828
@@ -XXX,XX +XXX,XX @@ cd_read_sector_sync(IDEState *s)
829
switch (s->cd_sector_size) {
830
case 2048:
831
ret = blk_pread(s->blk, (int64_t)s->lba << ATAPI_SECTOR_BITS,
832
- s->io_buffer, ATAPI_SECTOR_SIZE, 0);
833
+ ATAPI_SECTOR_SIZE, s->io_buffer, 0);
834
break;
835
case 2352:
836
ret = blk_pread(s->blk, (int64_t)s->lba << ATAPI_SECTOR_BITS,
837
- s->io_buffer + 16, ATAPI_SECTOR_SIZE, 0);
838
+ ATAPI_SECTOR_SIZE, s->io_buffer + 16, 0);
839
if (ret >= 0) {
840
cd_data_to_raw(s->io_buffer, s->lba);
841
}
842
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
843
index XXXXXXX..XXXXXXX 100644
844
--- a/hw/misc/mac_via.c
845
+++ b/hw/misc/mac_via.c
846
@@ -XXX,XX +XXX,XX @@ static void via1_one_second(void *opaque)
847
static void pram_update(MOS6522Q800VIA1State *v1s)
848
{
849
if (v1s->blk) {
850
- if (blk_pwrite(v1s->blk, 0, v1s->PRAM, sizeof(v1s->PRAM), 0) < 0) {
851
+ if (blk_pwrite(v1s->blk, 0, sizeof(v1s->PRAM), v1s->PRAM, 0) < 0) {
852
qemu_log("pram_update: cannot write to file\n");
853
}
854
}
855
@@ -XXX,XX +XXX,XX @@ static void mos6522_q800_via1_realize(DeviceState *dev, Error **errp)
856
return;
857
}
858
859
- ret = blk_pread(v1s->blk, 0, v1s->PRAM, sizeof(v1s->PRAM), 0);
860
+ ret = blk_pread(v1s->blk, 0, sizeof(v1s->PRAM), v1s->PRAM, 0);
861
if (ret < 0) {
862
error_setg(errp, "can't read PRAM contents");
863
return;
864
diff --git a/hw/misc/sifive_u_otp.c b/hw/misc/sifive_u_otp.c
865
index XXXXXXX..XXXXXXX 100644
866
--- a/hw/misc/sifive_u_otp.c
867
+++ b/hw/misc/sifive_u_otp.c
868
@@ -XXX,XX +XXX,XX @@ static uint64_t sifive_u_otp_read(void *opaque, hwaddr addr, unsigned int size)
869
if (s->blk) {
870
int32_t buf;
871
872
- if (blk_pread(s->blk, s->pa * SIFIVE_U_OTP_FUSE_WORD, &buf,
873
- SIFIVE_U_OTP_FUSE_WORD, 0) < 0) {
874
+ if (blk_pread(s->blk, s->pa * SIFIVE_U_OTP_FUSE_WORD,
875
+ SIFIVE_U_OTP_FUSE_WORD, &buf, 0) < 0) {
876
error_report("read error index<%d>", s->pa);
877
return 0xff;
878
}
879
@@ -XXX,XX +XXX,XX @@ static void sifive_u_otp_write(void *opaque, hwaddr addr,
880
/* write to backend */
881
if (s->blk) {
882
if (blk_pwrite(s->blk, s->pa * SIFIVE_U_OTP_FUSE_WORD,
883
- &s->fuse[s->pa], SIFIVE_U_OTP_FUSE_WORD,
884
- 0) < 0) {
885
+ SIFIVE_U_OTP_FUSE_WORD, &s->fuse[s->pa], 0)
886
+ < 0) {
887
error_report("write error index<%d>", s->pa);
888
}
889
}
890
@@ -XXX,XX +XXX,XX @@ static void sifive_u_otp_realize(DeviceState *dev, Error **errp)
891
return;
892
}
893
894
- if (blk_pread(s->blk, 0, s->fuse, filesize, 0) < 0) {
895
+ if (blk_pread(s->blk, 0, filesize, s->fuse, 0) < 0) {
896
error_setg(errp, "failed to read the initial flash content");
897
return;
898
}
899
@@ -XXX,XX +XXX,XX @@ static void sifive_u_otp_realize(DeviceState *dev, Error **errp)
900
901
serial_data = s->serial;
902
if (blk_pwrite(s->blk, index * SIFIVE_U_OTP_FUSE_WORD,
903
- &serial_data, SIFIVE_U_OTP_FUSE_WORD, 0) < 0) {
904
+ SIFIVE_U_OTP_FUSE_WORD, &serial_data, 0) < 0) {
905
error_setg(errp, "failed to write index<%d>", index);
906
return;
907
}
908
909
serial_data = ~(s->serial);
910
if (blk_pwrite(s->blk, (index + 1) * SIFIVE_U_OTP_FUSE_WORD,
911
- &serial_data, SIFIVE_U_OTP_FUSE_WORD, 0) < 0) {
912
+ SIFIVE_U_OTP_FUSE_WORD, &serial_data, 0) < 0) {
913
error_setg(errp, "failed to write index<%d>", index + 1);
914
return;
915
}
916
diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c
917
index XXXXXXX..XXXXXXX 100644
918
--- a/hw/nvram/eeprom_at24c.c
919
+++ b/hw/nvram/eeprom_at24c.c
920
@@ -XXX,XX +XXX,XX @@ int at24c_eeprom_event(I2CSlave *s, enum i2c_event event)
921
case I2C_START_RECV:
922
DPRINTK("clear\n");
923
if (ee->blk && ee->changed) {
924
- int ret = blk_pwrite(ee->blk, 0, ee->mem, ee->rsize, 0);
925
+ int ret = blk_pwrite(ee->blk, 0, ee->rsize, ee->mem, 0);
926
if (ret < 0) {
927
ERR(TYPE_AT24C_EE
928
" : failed to write backing file\n");
929
@@ -XXX,XX +XXX,XX @@ void at24c_eeprom_reset(DeviceState *state)
930
memset(ee->mem, 0, ee->rsize);
931
932
if (ee->blk) {
933
- int ret = blk_pread(ee->blk, 0, ee->mem, ee->rsize, 0);
934
+ int ret = blk_pread(ee->blk, 0, ee->rsize, ee->mem, 0);
935
936
if (ret < 0) {
937
ERR(TYPE_AT24C_EE
938
diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c
939
index XXXXXXX..XXXXXXX 100644
940
--- a/hw/nvram/spapr_nvram.c
941
+++ b/hw/nvram/spapr_nvram.c
942
@@ -XXX,XX +XXX,XX @@ static void rtas_nvram_store(PowerPCCPU *cpu, SpaprMachineState *spapr,
943
944
ret = 0;
945
if (nvram->blk) {
946
- ret = blk_pwrite(nvram->blk, offset, membuf, len, 0);
947
+ ret = blk_pwrite(nvram->blk, offset, len, membuf, 0);
948
}
949
950
assert(nvram->buf);
951
@@ -XXX,XX +XXX,XX @@ static void spapr_nvram_realize(SpaprVioDevice *dev, Error **errp)
952
}
953
954
if (nvram->blk) {
955
- ret = blk_pread(nvram->blk, 0, nvram->buf, nvram->size, 0);
956
+ ret = blk_pread(nvram->blk, 0, nvram->size, nvram->buf, 0);
957
958
if (ret < 0) {
959
error_setg(errp, "can't read spapr-nvram contents");
960
@@ -XXX,XX +XXX,XX @@ static void postload_update_cb(void *opaque, bool running, RunState state)
961
qemu_del_vm_change_state_handler(nvram->vmstate);
962
nvram->vmstate = NULL;
963
964
- blk_pwrite(nvram->blk, 0, nvram->buf, nvram->size, 0);
965
+ blk_pwrite(nvram->blk, 0, nvram->size, nvram->buf, 0);
966
}
967
968
static int spapr_nvram_post_load(void *opaque, int version_id)
969
diff --git a/hw/nvram/xlnx-bbram.c b/hw/nvram/xlnx-bbram.c
970
index XXXXXXX..XXXXXXX 100644
971
--- a/hw/nvram/xlnx-bbram.c
972
+++ b/hw/nvram/xlnx-bbram.c
973
@@ -XXX,XX +XXX,XX @@ static void bbram_bdrv_read(XlnxBBRam *s, Error **errp)
974
blk_name(s->blk));
975
}
976
977
- if (blk_pread(s->blk, 0, ram, nr, 0) < 0) {
978
+ if (blk_pread(s->blk, 0, nr, ram, 0) < 0) {
979
error_setg(errp,
980
"%s: Failed to read %u bytes from BBRAM backstore.",
981
blk_name(s->blk), nr);
982
@@ -XXX,XX +XXX,XX @@ static void bbram_bdrv_sync(XlnxBBRam *s, uint64_t hwaddr)
983
}
984
985
offset = hwaddr - A_BBRAM_0;
986
- rc = blk_pwrite(s->blk, offset, &le32, 4, 0);
987
+ rc = blk_pwrite(s->blk, offset, 4, &le32, 0);
988
if (rc < 0) {
989
bbram_bdrv_error(s, rc, g_strdup_printf("write to offset %u", offset));
990
}
991
diff --git a/hw/nvram/xlnx-efuse.c b/hw/nvram/xlnx-efuse.c
992
index XXXXXXX..XXXXXXX 100644
993
--- a/hw/nvram/xlnx-efuse.c
994
+++ b/hw/nvram/xlnx-efuse.c
995
@@ -XXX,XX +XXX,XX @@ static int efuse_bdrv_read(XlnxEFuse *s, Error **errp)
996
blk_name(s->blk));
997
}
998
999
- if (blk_pread(s->blk, 0, ram, nr, 0) < 0) {
1000
+ if (blk_pread(s->blk, 0, nr, ram, 0) < 0) {
1001
error_setg(errp, "%s: Failed to read %u bytes from eFUSE backstore.",
1002
blk_name(s->blk), nr);
1003
return -1;
1004
@@ -XXX,XX +XXX,XX @@ static void efuse_bdrv_sync(XlnxEFuse *s, unsigned int bit)
1005
le32 = cpu_to_le32(xlnx_efuse_get_row(s, bit));
1006
1007
row_offset = (bit / 32) * 4;
1008
- if (blk_pwrite(s->blk, row_offset, &le32, 4, 0) < 0) {
1009
+ if (blk_pwrite(s->blk, row_offset, 4, &le32, 0) < 0) {
1010
error_report("%s: Failed to write offset %u of eFUSE backstore.",
1011
blk_name(s->blk), row_offset);
1012
}
1013
diff --git a/hw/ppc/pnv_pnor.c b/hw/ppc/pnv_pnor.c
1014
index XXXXXXX..XXXXXXX 100644
1015
--- a/hw/ppc/pnv_pnor.c
1016
+++ b/hw/ppc/pnv_pnor.c
1017
@@ -XXX,XX +XXX,XX @@ static void pnv_pnor_update(PnvPnor *s, int offset, int size)
1018
offset = QEMU_ALIGN_DOWN(offset, BDRV_SECTOR_SIZE);
1019
offset_end = QEMU_ALIGN_UP(offset_end, BDRV_SECTOR_SIZE);
1020
1021
- ret = blk_pwrite(s->blk, offset, s->storage + offset,
1022
- offset_end - offset, 0);
1023
+ ret = blk_pwrite(s->blk, offset, offset_end - offset, s->storage + offset,
1024
+ 0);
1025
if (ret < 0) {
1026
error_report("Could not update PNOR offset=0x%" PRIx32" : %s", offset,
1027
strerror(-ret));
1028
@@ -XXX,XX +XXX,XX @@ static void pnv_pnor_realize(DeviceState *dev, Error **errp)
1029
1030
s->storage = blk_blockalign(s->blk, s->size);
1031
1032
- if (blk_pread(s->blk, 0, s->storage, s->size, 0) < 0) {
1033
+ if (blk_pread(s->blk, 0, s->size, s->storage, 0) < 0) {
1034
error_setg(errp, "failed to read the initial flash content");
1035
return;
1036
}
1037
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
1038
index XXXXXXX..XXXXXXX 100644
1039
--- a/hw/sd/sd.c
1040
+++ b/hw/sd/sd.c
1041
@@ -XXX,XX +XXX,XX @@ void sd_set_cb(SDState *sd, qemu_irq readonly, qemu_irq insert)
1042
static void sd_blk_read(SDState *sd, uint64_t addr, uint32_t len)
1043
{
1044
trace_sdcard_read_block(addr, len);
1045
- if (!sd->blk || blk_pread(sd->blk, addr, sd->data, len, 0) < 0) {
1046
+ if (!sd->blk || blk_pread(sd->blk, addr, len, sd->data, 0) < 0) {
1047
fprintf(stderr, "sd_blk_read: read error on host side\n");
1048
}
1049
}
1050
@@ -XXX,XX +XXX,XX @@ static void sd_blk_read(SDState *sd, uint64_t addr, uint32_t len)
1051
static void sd_blk_write(SDState *sd, uint64_t addr, uint32_t len)
1052
{
1053
trace_sdcard_write_block(addr, len);
1054
- if (!sd->blk || blk_pwrite(sd->blk, addr, sd->data, len, 0) < 0) {
1055
+ if (!sd->blk || blk_pwrite(sd->blk, addr, len, sd->data, 0) < 0) {
1056
fprintf(stderr, "sd_blk_write: write error on host side\n");
1057
}
1058
}
1059
diff --git a/migration/block.c b/migration/block.c
1060
index XXXXXXX..XXXXXXX 100644
1061
--- a/migration/block.c
1062
+++ b/migration/block.c
1063
@@ -XXX,XX +XXX,XX @@ static int mig_save_device_dirty(QEMUFile *f, BlkMigDevState *bmds,
1064
blk_mig_unlock();
1065
} else {
1066
ret = blk_pread(bmds->blk, sector * BDRV_SECTOR_SIZE,
1067
- blk->buf, nr_sectors * BDRV_SECTOR_SIZE, 0);
1068
+ nr_sectors * BDRV_SECTOR_SIZE, blk->buf, 0);
1069
if (ret < 0) {
1070
goto error;
1071
}
1072
@@ -XXX,XX +XXX,XX @@ static int block_load(QEMUFile *f, void *opaque, int version_id)
1073
cluster_size,
1074
BDRV_REQ_MAY_UNMAP);
1075
} else {
1076
- ret = blk_pwrite(blk, cur_addr, cur_buf,
1077
- cluster_size, 0);
1078
+ ret = blk_pwrite(blk, cur_addr, cluster_size, cur_buf,
1079
+ 0);
1080
}
1081
if (ret < 0) {
1082
break;
1083
diff --git a/nbd/server.c b/nbd/server.c
1084
index XXXXXXX..XXXXXXX 100644
1085
--- a/nbd/server.c
1086
+++ b/nbd/server.c
1087
@@ -XXX,XX +XXX,XX @@ static int coroutine_fn nbd_co_send_sparse_read(NBDClient *client,
1088
stl_be_p(&chunk.length, pnum);
1089
ret = nbd_co_send_iov(client, iov, 1, errp);
1090
} else {
1091
- ret = blk_pread(exp->common.blk, offset + progress,
1092
- data + progress, pnum, 0);
1093
+ ret = blk_pread(exp->common.blk, offset + progress, pnum,
1094
+ data + progress, 0);
1095
if (ret < 0) {
1096
error_setg_errno(errp, -ret, "reading from file failed");
1097
break;
1098
@@ -XXX,XX +XXX,XX @@ static coroutine_fn int nbd_do_cmd_read(NBDClient *client, NBDRequest *request,
1099
data, request->len, errp);
1100
}
1101
1102
- ret = blk_pread(exp->common.blk, request->from, data, request->len, 0);
1103
+ ret = blk_pread(exp->common.blk, request->from, request->len, data, 0);
1104
if (ret < 0) {
1105
return nbd_send_generic_reply(client, request->handle, ret,
1106
"reading from file failed", errp);
1107
@@ -XXX,XX +XXX,XX @@ static coroutine_fn int nbd_handle_request(NBDClient *client,
1108
if (request->flags & NBD_CMD_FLAG_FUA) {
1109
flags |= BDRV_REQ_FUA;
1110
}
1111
- ret = blk_pwrite(exp->common.blk, request->from, data, request->len,
1112
+ ret = blk_pwrite(exp->common.blk, request->from, request->len, data,
1113
flags);
1114
return nbd_send_generic_reply(client, request->handle, ret,
1115
"writing to file failed", errp);
1116
diff --git a/qemu-img.c b/qemu-img.c
1117
index XXXXXXX..XXXXXXX 100644
1118
--- a/qemu-img.c
1119
+++ b/qemu-img.c
1120
@@ -XXX,XX +XXX,XX @@ static int check_empty_sectors(BlockBackend *blk, int64_t offset,
1121
int ret = 0;
1122
int64_t idx;
1123
1124
- ret = blk_pread(blk, offset, buffer, bytes, 0);
1125
+ ret = blk_pread(blk, offset, bytes, buffer, 0);
1126
if (ret < 0) {
1127
error_report("Error while reading offset %" PRId64 " of %s: %s",
1128
offset, filename, strerror(-ret));
1129
@@ -XXX,XX +XXX,XX @@ static int img_compare(int argc, char **argv)
1130
int64_t pnum;
1131
1132
chunk = MIN(chunk, IO_BUF_SIZE);
1133
- ret = blk_pread(blk1, offset, buf1, chunk, 0);
1134
+ ret = blk_pread(blk1, offset, chunk, buf1, 0);
1135
if (ret < 0) {
1136
error_report("Error while reading offset %" PRId64
1137
" of %s: %s",
1138
@@ -XXX,XX +XXX,XX @@ static int img_compare(int argc, char **argv)
1139
ret = 4;
1140
goto out;
1141
}
1142
- ret = blk_pread(blk2, offset, buf2, chunk, 0);
1143
+ ret = blk_pread(blk2, offset, chunk, buf2, 0);
1144
if (ret < 0) {
1145
error_report("Error while reading offset %" PRId64
1146
" of %s: %s",
1147
@@ -XXX,XX +XXX,XX @@ static int img_rebase(int argc, char **argv)
1148
n = old_backing_size - offset;
1149
}
1150
1151
- ret = blk_pread(blk_old_backing, offset, buf_old, n, 0);
1152
+ ret = blk_pread(blk_old_backing, offset, n, buf_old, 0);
1153
if (ret < 0) {
1154
error_report("error while reading from old backing file");
1155
goto out;
1156
@@ -XXX,XX +XXX,XX @@ static int img_rebase(int argc, char **argv)
1157
n = new_backing_size - offset;
1158
}
1159
1160
- ret = blk_pread(blk_new_backing, offset, buf_new, n, 0);
1161
+ ret = blk_pread(blk_new_backing, offset, n, buf_new, 0);
1162
if (ret < 0) {
1163
error_report("error while reading from new backing file");
1164
goto out;
1165
@@ -XXX,XX +XXX,XX @@ static int img_rebase(int argc, char **argv)
1166
if (buf_old_is_zero) {
1167
ret = blk_pwrite_zeroes(blk, offset + written, pnum, 0);
1168
} else {
1169
- ret = blk_pwrite(blk, offset + written,
1170
- buf_old + written, pnum, 0);
1171
+ ret = blk_pwrite(blk, offset + written, pnum,
1172
+ buf_old + written, 0);
1173
}
1174
if (ret < 0) {
1175
error_report("Error while writing to COW image: %s",
1176
@@ -XXX,XX +XXX,XX @@ static int img_dd(int argc, char **argv)
1177
for (out_pos = 0; in_pos < size; block_count++) {
1178
int bytes = (in_pos + in.bsz > size) ? size - in_pos : in.bsz;
1179
1180
- ret = blk_pread(blk1, in_pos, in.buf, bytes, 0);
1181
+ ret = blk_pread(blk1, in_pos, bytes, in.buf, 0);
1182
if (ret < 0) {
1183
error_report("error while reading from input image file: %s",
1184
strerror(-ret));
1185
@@ -XXX,XX +XXX,XX @@ static int img_dd(int argc, char **argv)
1186
}
1187
in_pos += bytes;
1188
1189
- ret = blk_pwrite(blk2, out_pos, in.buf, bytes, 0);
1190
+ ret = blk_pwrite(blk2, out_pos, bytes, in.buf, 0);
1191
if (ret < 0) {
1192
error_report("error while writing to output image file: %s",
1193
strerror(-ret));
1194
diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
1195
index XXXXXXX..XXXXXXX 100644
1196
--- a/qemu-io-cmds.c
1197
+++ b/qemu-io-cmds.c
1198
@@ -XXX,XX +XXX,XX @@ static int do_pread(BlockBackend *blk, char *buf, int64_t offset,
1199
return -ERANGE;
1200
}
1201
1202
- ret = blk_pread(blk, offset, (uint8_t *)buf, bytes, 0);
1203
+ ret = blk_pread(blk, offset, bytes, (uint8_t *)buf, 0);
1204
if (ret < 0) {
1205
return ret;
1206
}
1207
@@ -XXX,XX +XXX,XX @@ static int do_pwrite(BlockBackend *blk, char *buf, int64_t offset,
1208
return -ERANGE;
1209
}
1210
1211
- ret = blk_pwrite(blk, offset, (uint8_t *)buf, bytes, flags);
1212
+ ret = blk_pwrite(blk, offset, bytes, (uint8_t *)buf, flags);
1213
if (ret < 0) {
1214
return ret;
1215
}
1216
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
1217
index XXXXXXX..XXXXXXX 100644
1218
--- a/tests/unit/test-block-iothread.c
1219
+++ b/tests/unit/test-block-iothread.c
1220
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_blk_pread(BlockBackend *blk)
1221
int ret;
1222
1223
/* Success */
1224
- ret = blk_pread(blk, 0, buf, sizeof(buf), 0);
1225
+ ret = blk_pread(blk, 0, sizeof(buf), buf, 0);
1226
g_assert_cmpint(ret, ==, 0);
1227
1228
/* Early error: Negative offset */
1229
- ret = blk_pread(blk, -2, buf, sizeof(buf), 0);
1230
+ ret = blk_pread(blk, -2, sizeof(buf), buf, 0);
1231
g_assert_cmpint(ret, ==, -EIO);
1232
}
1233
1234
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_blk_pwrite(BlockBackend *blk)
1235
int ret;
1236
1237
/* Success */
1238
- ret = blk_pwrite(blk, 0, buf, sizeof(buf), 0);
1239
+ ret = blk_pwrite(blk, 0, sizeof(buf), buf, 0);
1240
g_assert_cmpint(ret, ==, 0);
1241
1242
/* Early error: Negative offset */
1243
- ret = blk_pwrite(blk, -2, buf, sizeof(buf), 0);
1244
+ ret = blk_pwrite(blk, -2, sizeof(buf), buf, 0);
1245
g_assert_cmpint(ret, ==, -EIO);
1246
}
1247
1248
--
1249
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
For consistency with other I/O functions, and in preparation to
4
implement them using generated_co_wrapper.
5
6
Signed-off-by: Alberto Faria <afaria@redhat.com>
7
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
8
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
9
Message-Id: <20220705161527.1054072-5-afaria@redhat.com>
10
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
11
---
12
include/sysemu/block-backend-io.h | 6 +++---
13
block/block-backend.c | 6 +++---
14
2 files changed, 6 insertions(+), 6 deletions(-)
15
16
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
17
index XXXXXXX..XXXXXXX 100644
18
--- a/include/sysemu/block-backend-io.h
19
+++ b/include/sysemu/block-backend-io.h
20
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_copy_range(BlockBackend *blk_in, int64_t off_in,
21
* the "I/O or GS" API.
22
*/
23
24
-int blk_pread(BlockBackend *blk, int64_t offset, int bytes, void *buf,
25
+int blk_pread(BlockBackend *blk, int64_t offset, int64_t bytes, void *buf,
26
BdrvRequestFlags flags);
27
-int blk_pwrite(BlockBackend *blk, int64_t offset, int bytes, const void *buf,
28
- BdrvRequestFlags flags);
29
+int blk_pwrite(BlockBackend *blk, int64_t offset, int64_t bytes,
30
+ const void *buf, BdrvRequestFlags flags);
31
int coroutine_fn blk_co_preadv(BlockBackend *blk, int64_t offset,
32
int64_t bytes, QEMUIOVector *qiov,
33
BdrvRequestFlags flags);
34
diff --git a/block/block-backend.c b/block/block-backend.c
35
index XXXXXXX..XXXXXXX 100644
36
--- a/block/block-backend.c
37
+++ b/block/block-backend.c
38
@@ -XXX,XX +XXX,XX @@ BlockAIOCB *blk_aio_pwrite_zeroes(BlockBackend *blk, int64_t offset,
39
flags | BDRV_REQ_ZERO_WRITE, cb, opaque);
40
}
41
42
-int blk_pread(BlockBackend *blk, int64_t offset, int bytes, void *buf,
43
+int blk_pread(BlockBackend *blk, int64_t offset, int64_t bytes, void *buf,
44
BdrvRequestFlags flags)
45
{
46
int ret;
47
@@ -XXX,XX +XXX,XX @@ int blk_pread(BlockBackend *blk, int64_t offset, int bytes, void *buf,
48
return ret;
49
}
50
51
-int blk_pwrite(BlockBackend *blk, int64_t offset, int bytes, const void *buf,
52
- BdrvRequestFlags flags)
53
+int blk_pwrite(BlockBackend *blk, int64_t offset, int64_t bytes,
54
+ const void *buf, BdrvRequestFlags flags)
55
{
56
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
57
IO_OR_GS_CODE();
58
--
59
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
It does not mutate the buffer.
4
5
Signed-off-by: Alberto Faria <afaria@redhat.com>
6
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
7
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
8
Message-Id: <20220705161527.1054072-6-afaria@redhat.com>
9
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
10
---
11
include/sysemu/block-backend-io.h | 2 +-
12
1 file changed, 1 insertion(+), 1 deletion(-)
13
14
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
15
index XXXXXXX..XXXXXXX 100644
16
--- a/include/sysemu/block-backend-io.h
17
+++ b/include/sysemu/block-backend-io.h
18
@@ -XXX,XX +XXX,XX @@ static inline int coroutine_fn blk_co_pread(BlockBackend *blk, int64_t offset,
19
}
20
21
static inline int coroutine_fn blk_co_pwrite(BlockBackend *blk, int64_t offset,
22
- int64_t bytes, void *buf,
23
+ int64_t bytes, const void *buf,
24
BdrvRequestFlags flags)
25
{
26
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
27
--
28
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
We need to add include/sysemu/block-backend-io.h to the inputs of the
4
block-gen.c target defined in block/meson.build.
5
6
Signed-off-by: Alberto Faria <afaria@redhat.com>
7
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
8
Message-Id: <20220705161527.1054072-7-afaria@redhat.com>
9
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
10
---
11
block/coroutines.h | 4 ----
12
include/sysemu/block-backend-io.h | 10 ++++++----
13
block/block-backend.c | 23 -----------------------
14
block/meson.build | 1 +
15
4 files changed, 7 insertions(+), 31 deletions(-)
16
17
diff --git a/block/coroutines.h b/block/coroutines.h
18
index XXXXXXX..XXXXXXX 100644
19
--- a/block/coroutines.h
20
+++ b/block/coroutines.h
21
@@ -XXX,XX +XXX,XX @@ bdrv_common_block_status_above(BlockDriverState *bs,
22
int generated_co_wrapper
23
nbd_do_establish_connection(BlockDriverState *bs, bool blocking, Error **errp);
24
25
-int generated_co_wrapper
26
-blk_do_preadv(BlockBackend *blk, int64_t offset, int64_t bytes,
27
- QEMUIOVector *qiov, BdrvRequestFlags flags);
28
-
29
int generated_co_wrapper
30
blk_do_pwritev_part(BlockBackend *blk, int64_t offset, int64_t bytes,
31
QEMUIOVector *qiov, size_t qiov_offset,
32
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
33
index XXXXXXX..XXXXXXX 100644
34
--- a/include/sysemu/block-backend-io.h
35
+++ b/include/sysemu/block-backend-io.h
36
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_copy_range(BlockBackend *blk_in, int64_t off_in,
37
* the "I/O or GS" API.
38
*/
39
40
-int blk_pread(BlockBackend *blk, int64_t offset, int64_t bytes, void *buf,
41
- BdrvRequestFlags flags);
42
-int blk_pwrite(BlockBackend *blk, int64_t offset, int64_t bytes,
43
- const void *buf, BdrvRequestFlags flags);
44
+int generated_co_wrapper blk_pread(BlockBackend *blk, int64_t offset,
45
+ int64_t bytes, void *buf,
46
+ BdrvRequestFlags flags);
47
+int generated_co_wrapper blk_pwrite(BlockBackend *blk, int64_t offset,
48
+ int64_t bytes, const void *buf,
49
+ BdrvRequestFlags flags);
50
int coroutine_fn blk_co_preadv(BlockBackend *blk, int64_t offset,
51
int64_t bytes, QEMUIOVector *qiov,
52
BdrvRequestFlags flags);
53
diff --git a/block/block-backend.c b/block/block-backend.c
54
index XXXXXXX..XXXXXXX 100644
55
--- a/block/block-backend.c
56
+++ b/block/block-backend.c
57
@@ -XXX,XX +XXX,XX @@ BlockAIOCB *blk_aio_pwrite_zeroes(BlockBackend *blk, int64_t offset,
58
flags | BDRV_REQ_ZERO_WRITE, cb, opaque);
59
}
60
61
-int blk_pread(BlockBackend *blk, int64_t offset, int64_t bytes, void *buf,
62
- BdrvRequestFlags flags)
63
-{
64
- int ret;
65
- QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
66
- IO_OR_GS_CODE();
67
-
68
- blk_inc_in_flight(blk);
69
- ret = blk_do_preadv(blk, offset, bytes, &qiov, flags);
70
- blk_dec_in_flight(blk);
71
-
72
- return ret;
73
-}
74
-
75
-int blk_pwrite(BlockBackend *blk, int64_t offset, int64_t bytes,
76
- const void *buf, BdrvRequestFlags flags)
77
-{
78
- QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
79
- IO_OR_GS_CODE();
80
-
81
- return blk_pwritev_part(blk, offset, bytes, &qiov, 0, flags);
82
-}
83
-
84
int64_t blk_getlength(BlockBackend *blk)
85
{
86
IO_CODE();
87
diff --git a/block/meson.build b/block/meson.build
88
index XXXXXXX..XXXXXXX 100644
89
--- a/block/meson.build
90
+++ b/block/meson.build
91
@@ -XXX,XX +XXX,XX @@ block_gen_c = custom_target('block-gen.c',
92
input: files(
93
'../include/block/block-io.h',
94
'../include/block/block-global-state.h',
95
+ '../include/sysemu/block-backend-io.h',
96
'coroutines.h'
97
),
98
command: [wrapper_py, '@OUTPUT@', '@INPUT@'])
99
--
100
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Implement them using generated_co_wrapper.
4
5
Signed-off-by: Alberto Faria <afaria@redhat.com>
6
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
7
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
8
Message-Id: <20220705161527.1054072-8-afaria@redhat.com>
9
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
10
---
11
include/sysemu/block-backend-io.h | 6 +++++
12
tests/unit/test-block-iothread.c | 42 ++++++++++++++++++++++++++++++-
13
2 files changed, 47 insertions(+), 1 deletion(-)
14
15
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
16
index XXXXXXX..XXXXXXX 100644
17
--- a/include/sysemu/block-backend-io.h
18
+++ b/include/sysemu/block-backend-io.h
19
@@ -XXX,XX +XXX,XX @@ int generated_co_wrapper blk_pread(BlockBackend *blk, int64_t offset,
20
int generated_co_wrapper blk_pwrite(BlockBackend *blk, int64_t offset,
21
int64_t bytes, const void *buf,
22
BdrvRequestFlags flags);
23
+int generated_co_wrapper blk_preadv(BlockBackend *blk, int64_t offset,
24
+ int64_t bytes, QEMUIOVector *qiov,
25
+ BdrvRequestFlags flags);
26
int coroutine_fn blk_co_preadv(BlockBackend *blk, int64_t offset,
27
int64_t bytes, QEMUIOVector *qiov,
28
BdrvRequestFlags flags);
29
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_pwritev_part(BlockBackend *blk, int64_t offset,
30
int64_t bytes,
31
QEMUIOVector *qiov, size_t qiov_offset,
32
BdrvRequestFlags flags);
33
+int generated_co_wrapper blk_pwritev(BlockBackend *blk, int64_t offset,
34
+ int64_t bytes, QEMUIOVector *qiov,
35
+ BdrvRequestFlags flags);
36
int coroutine_fn blk_co_pwritev(BlockBackend *blk, int64_t offset,
37
int64_t bytes, QEMUIOVector *qiov,
38
BdrvRequestFlags flags);
39
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
40
index XXXXXXX..XXXXXXX 100644
41
--- a/tests/unit/test-block-iothread.c
42
+++ b/tests/unit/test-block-iothread.c
43
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_blk_pwrite(BlockBackend *blk)
44
g_assert_cmpint(ret, ==, -EIO);
45
}
46
47
+static void test_sync_op_blk_preadv(BlockBackend *blk)
48
+{
49
+ uint8_t buf[512];
50
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, sizeof(buf));
51
+ int ret;
52
+
53
+ /* Success */
54
+ ret = blk_preadv(blk, 0, sizeof(buf), &qiov, 0);
55
+ g_assert_cmpint(ret, ==, 0);
56
+
57
+ /* Early error: Negative offset */
58
+ ret = blk_preadv(blk, -2, sizeof(buf), &qiov, 0);
59
+ g_assert_cmpint(ret, ==, -EIO);
60
+}
61
+
62
+static void test_sync_op_blk_pwritev(BlockBackend *blk)
63
+{
64
+ uint8_t buf[512] = { 0 };
65
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, sizeof(buf));
66
+ int ret;
67
+
68
+ /* Success */
69
+ ret = blk_pwritev(blk, 0, sizeof(buf), &qiov, 0);
70
+ g_assert_cmpint(ret, ==, 0);
71
+
72
+ /* Early error: Negative offset */
73
+ ret = blk_pwritev(blk, -2, sizeof(buf), &qiov, 0);
74
+ g_assert_cmpint(ret, ==, -EIO);
75
+}
76
+
77
static void test_sync_op_load_vmstate(BdrvChild *c)
78
{
79
uint8_t buf[512];
80
@@ -XXX,XX +XXX,XX @@ const SyncOpTest sync_op_tests[] = {
81
.name = "/sync-op/pwrite",
82
.fn = test_sync_op_pwrite,
83
.blkfn = test_sync_op_blk_pwrite,
84
+ }, {
85
+ .name = "/sync-op/preadv",
86
+ .fn = NULL,
87
+ .blkfn = test_sync_op_blk_preadv,
88
+ }, {
89
+ .name = "/sync-op/pwritev",
90
+ .fn = NULL,
91
+ .blkfn = test_sync_op_blk_pwritev,
92
}, {
93
.name = "/sync-op/load_vmstate",
94
.fn = test_sync_op_load_vmstate,
95
@@ -XXX,XX +XXX,XX @@ static void test_sync_op(const void *opaque)
96
97
blk_set_aio_context(blk, ctx, &error_abort);
98
aio_context_acquire(ctx);
99
- t->fn(c);
100
+ if (t->fn) {
101
+ t->fn(c);
102
+ }
103
if (t->blkfn) {
104
t->blkfn(blk);
105
}
106
--
107
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Implement blk_preadv_part() using generated_co_wrapper.
4
5
Signed-off-by: Alberto Faria <afaria@redhat.com>
6
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
7
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
8
Message-Id: <20220705161527.1054072-9-afaria@redhat.com>
9
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
10
---
11
block/coroutines.h | 5 -----
12
include/sysemu/block-backend-io.h | 7 +++++++
13
block/block-backend.c | 30 +++++++++++++++++++++++-------
14
tests/unit/test-block-iothread.c | 19 +++++++++++++++++++
15
4 files changed, 49 insertions(+), 12 deletions(-)
16
17
diff --git a/block/coroutines.h b/block/coroutines.h
18
index XXXXXXX..XXXXXXX 100644
19
--- a/block/coroutines.h
20
+++ b/block/coroutines.h
21
@@ -XXX,XX +XXX,XX @@ nbd_co_do_establish_connection(BlockDriverState *bs, bool blocking,
22
Error **errp);
23
24
25
-int coroutine_fn
26
-blk_co_do_preadv(BlockBackend *blk, int64_t offset, int64_t bytes,
27
- QEMUIOVector *qiov, BdrvRequestFlags flags);
28
-
29
-
30
int coroutine_fn
31
blk_co_do_pwritev_part(BlockBackend *blk, int64_t offset, int64_t bytes,
32
QEMUIOVector *qiov, size_t qiov_offset,
33
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
34
index XXXXXXX..XXXXXXX 100644
35
--- a/include/sysemu/block-backend-io.h
36
+++ b/include/sysemu/block-backend-io.h
37
@@ -XXX,XX +XXX,XX @@ int generated_co_wrapper blk_pread(BlockBackend *blk, int64_t offset,
38
int generated_co_wrapper blk_pwrite(BlockBackend *blk, int64_t offset,
39
int64_t bytes, const void *buf,
40
BdrvRequestFlags flags);
41
+int generated_co_wrapper blk_preadv_part(BlockBackend *blk, int64_t offset,
42
+ int64_t bytes, QEMUIOVector *qiov,
43
+ size_t qiov_offset,
44
+ BdrvRequestFlags flags);
45
+int coroutine_fn blk_co_preadv_part(BlockBackend *blk, int64_t offset,
46
+ int64_t bytes, QEMUIOVector *qiov,
47
+ size_t qiov_offset, BdrvRequestFlags flags);
48
int generated_co_wrapper blk_preadv(BlockBackend *blk, int64_t offset,
49
int64_t bytes, QEMUIOVector *qiov,
50
BdrvRequestFlags flags);
51
diff --git a/block/block-backend.c b/block/block-backend.c
52
index XXXXXXX..XXXXXXX 100644
53
--- a/block/block-backend.c
54
+++ b/block/block-backend.c
55
@@ -XXX,XX +XXX,XX @@ static void coroutine_fn blk_wait_while_drained(BlockBackend *blk)
56
}
57
58
/* To be called between exactly one pair of blk_inc/dec_in_flight() */
59
-int coroutine_fn
60
-blk_co_do_preadv(BlockBackend *blk, int64_t offset, int64_t bytes,
61
- QEMUIOVector *qiov, BdrvRequestFlags flags)
62
+static int coroutine_fn
63
+blk_co_do_preadv_part(BlockBackend *blk, int64_t offset, int64_t bytes,
64
+ QEMUIOVector *qiov, size_t qiov_offset,
65
+ BdrvRequestFlags flags)
66
{
67
int ret;
68
BlockDriverState *bs;
69
@@ -XXX,XX +XXX,XX @@ blk_co_do_preadv(BlockBackend *blk, int64_t offset, int64_t bytes,
70
bytes, false);
71
}
72
73
- ret = bdrv_co_preadv(blk->root, offset, bytes, qiov, flags);
74
+ ret = bdrv_co_preadv_part(blk->root, offset, bytes, qiov, qiov_offset,
75
+ flags);
76
bdrv_dec_in_flight(bs);
77
return ret;
78
}
79
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_preadv(BlockBackend *blk, int64_t offset,
80
IO_OR_GS_CODE();
81
82
blk_inc_in_flight(blk);
83
- ret = blk_co_do_preadv(blk, offset, bytes, qiov, flags);
84
+ ret = blk_co_do_preadv_part(blk, offset, bytes, qiov, 0, flags);
85
+ blk_dec_in_flight(blk);
86
+
87
+ return ret;
88
+}
89
+
90
+int coroutine_fn blk_co_preadv_part(BlockBackend *blk, int64_t offset,
91
+ int64_t bytes, QEMUIOVector *qiov,
92
+ size_t qiov_offset, BdrvRequestFlags flags)
93
+{
94
+ int ret;
95
+ IO_OR_GS_CODE();
96
+
97
+ blk_inc_in_flight(blk);
98
+ ret = blk_co_do_preadv_part(blk, offset, bytes, qiov, qiov_offset, flags);
99
blk_dec_in_flight(blk);
100
101
return ret;
102
@@ -XXX,XX +XXX,XX @@ static void blk_aio_read_entry(void *opaque)
103
QEMUIOVector *qiov = rwco->iobuf;
104
105
assert(qiov->size == acb->bytes);
106
- rwco->ret = blk_co_do_preadv(rwco->blk, rwco->offset, acb->bytes,
107
- qiov, rwco->flags);
108
+ rwco->ret = blk_co_do_preadv_part(rwco->blk, rwco->offset, acb->bytes, qiov,
109
+ 0, rwco->flags);
110
blk_aio_complete(acb);
111
}
112
113
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
114
index XXXXXXX..XXXXXXX 100644
115
--- a/tests/unit/test-block-iothread.c
116
+++ b/tests/unit/test-block-iothread.c
117
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_blk_pwritev(BlockBackend *blk)
118
g_assert_cmpint(ret, ==, -EIO);
119
}
120
121
+static void test_sync_op_blk_preadv_part(BlockBackend *blk)
122
+{
123
+ uint8_t buf[512];
124
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, sizeof(buf));
125
+ int ret;
126
+
127
+ /* Success */
128
+ ret = blk_preadv_part(blk, 0, sizeof(buf), &qiov, 0, 0);
129
+ g_assert_cmpint(ret, ==, 0);
130
+
131
+ /* Early error: Negative offset */
132
+ ret = blk_preadv_part(blk, -2, sizeof(buf), &qiov, 0, 0);
133
+ g_assert_cmpint(ret, ==, -EIO);
134
+}
135
+
136
static void test_sync_op_load_vmstate(BdrvChild *c)
137
{
138
uint8_t buf[512];
139
@@ -XXX,XX +XXX,XX @@ const SyncOpTest sync_op_tests[] = {
140
.name = "/sync-op/pwritev",
141
.fn = NULL,
142
.blkfn = test_sync_op_blk_pwritev,
143
+ }, {
144
+ .name = "/sync-op/preadv_part",
145
+ .fn = NULL,
146
+ .blkfn = test_sync_op_blk_preadv_part,
147
}, {
148
.name = "/sync-op/load_vmstate",
149
.fn = test_sync_op_load_vmstate,
150
--
151
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Also convert it into a generated_co_wrapper.
4
5
Signed-off-by: Alberto Faria <afaria@redhat.com>
6
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
7
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
8
Message-Id: <20220705161527.1054072-10-afaria@redhat.com>
9
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
10
---
11
block/coroutines.h | 5 -----
12
include/sysemu/block-backend-io.h | 4 ++++
13
block/block-backend.c | 14 --------------
14
tests/unit/test-block-iothread.c | 19 +++++++++++++++++++
15
4 files changed, 23 insertions(+), 19 deletions(-)
16
17
diff --git a/block/coroutines.h b/block/coroutines.h
18
index XXXXXXX..XXXXXXX 100644
19
--- a/block/coroutines.h
20
+++ b/block/coroutines.h
21
@@ -XXX,XX +XXX,XX @@ bdrv_common_block_status_above(BlockDriverState *bs,
22
int generated_co_wrapper
23
nbd_do_establish_connection(BlockDriverState *bs, bool blocking, Error **errp);
24
25
-int generated_co_wrapper
26
-blk_do_pwritev_part(BlockBackend *blk, int64_t offset, int64_t bytes,
27
- QEMUIOVector *qiov, size_t qiov_offset,
28
- BdrvRequestFlags flags);
29
-
30
int generated_co_wrapper
31
blk_do_ioctl(BlockBackend *blk, unsigned long int req, void *buf);
32
33
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
34
index XXXXXXX..XXXXXXX 100644
35
--- a/include/sysemu/block-backend-io.h
36
+++ b/include/sysemu/block-backend-io.h
37
@@ -XXX,XX +XXX,XX @@ int generated_co_wrapper blk_preadv(BlockBackend *blk, int64_t offset,
38
int coroutine_fn blk_co_preadv(BlockBackend *blk, int64_t offset,
39
int64_t bytes, QEMUIOVector *qiov,
40
BdrvRequestFlags flags);
41
+int generated_co_wrapper blk_pwritev_part(BlockBackend *blk, int64_t offset,
42
+ int64_t bytes, QEMUIOVector *qiov,
43
+ size_t qiov_offset,
44
+ BdrvRequestFlags flags);
45
int coroutine_fn blk_co_pwritev_part(BlockBackend *blk, int64_t offset,
46
int64_t bytes,
47
QEMUIOVector *qiov, size_t qiov_offset,
48
diff --git a/block/block-backend.c b/block/block-backend.c
49
index XXXXXXX..XXXXXXX 100644
50
--- a/block/block-backend.c
51
+++ b/block/block-backend.c
52
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_pwritev(BlockBackend *blk, int64_t offset,
53
return blk_co_pwritev_part(blk, offset, bytes, qiov, 0, flags);
54
}
55
56
-static int coroutine_fn blk_pwritev_part(BlockBackend *blk, int64_t offset,
57
- int64_t bytes,
58
- QEMUIOVector *qiov, size_t qiov_offset,
59
- BdrvRequestFlags flags)
60
-{
61
- int ret;
62
-
63
- blk_inc_in_flight(blk);
64
- ret = blk_do_pwritev_part(blk, offset, bytes, qiov, qiov_offset, flags);
65
- blk_dec_in_flight(blk);
66
-
67
- return ret;
68
-}
69
-
70
typedef struct BlkRwCo {
71
BlockBackend *blk;
72
int64_t offset;
73
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
74
index XXXXXXX..XXXXXXX 100644
75
--- a/tests/unit/test-block-iothread.c
76
+++ b/tests/unit/test-block-iothread.c
77
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_blk_preadv_part(BlockBackend *blk)
78
g_assert_cmpint(ret, ==, -EIO);
79
}
80
81
+static void test_sync_op_blk_pwritev_part(BlockBackend *blk)
82
+{
83
+ uint8_t buf[512] = { 0 };
84
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, sizeof(buf));
85
+ int ret;
86
+
87
+ /* Success */
88
+ ret = blk_pwritev_part(blk, 0, sizeof(buf), &qiov, 0, 0);
89
+ g_assert_cmpint(ret, ==, 0);
90
+
91
+ /* Early error: Negative offset */
92
+ ret = blk_pwritev_part(blk, -2, sizeof(buf), &qiov, 0, 0);
93
+ g_assert_cmpint(ret, ==, -EIO);
94
+}
95
+
96
static void test_sync_op_load_vmstate(BdrvChild *c)
97
{
98
uint8_t buf[512];
99
@@ -XXX,XX +XXX,XX @@ const SyncOpTest sync_op_tests[] = {
100
.name = "/sync-op/preadv_part",
101
.fn = NULL,
102
.blkfn = test_sync_op_blk_preadv_part,
103
+ }, {
104
+ .name = "/sync-op/pwritev_part",
105
+ .fn = NULL,
106
+ .blkfn = test_sync_op_blk_pwritev_part,
107
}, {
108
.name = "/sync-op/load_vmstate",
109
.fn = test_sync_op_load_vmstate,
110
--
111
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Swap 'buf' and 'bytes' around for consistency with other I/O functions.
4
5
Signed-off-by: Alberto Faria <afaria@redhat.com>
6
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
7
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
8
Message-Id: <20220705161527.1054072-11-afaria@redhat.com>
9
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
10
---
11
include/sysemu/block-backend-io.h | 4 ++--
12
block/block-backend.c | 4 ++--
13
qemu-img.c | 2 +-
14
qemu-io-cmds.c | 2 +-
15
4 files changed, 6 insertions(+), 6 deletions(-)
16
17
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
18
index XXXXXXX..XXXXXXX 100644
19
--- a/include/sysemu/block-backend-io.h
20
+++ b/include/sysemu/block-backend-io.h
21
@@ -XXX,XX +XXX,XX @@ int blk_flush(BlockBackend *blk);
22
23
int blk_ioctl(BlockBackend *blk, unsigned long int req, void *buf);
24
25
-int blk_pwrite_compressed(BlockBackend *blk, int64_t offset, const void *buf,
26
- int64_t bytes);
27
+int blk_pwrite_compressed(BlockBackend *blk, int64_t offset, int64_t bytes,
28
+ const void *buf);
29
int blk_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes);
30
int blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
31
int64_t bytes, BdrvRequestFlags flags);
32
diff --git a/block/block-backend.c b/block/block-backend.c
33
index XXXXXXX..XXXXXXX 100644
34
--- a/block/block-backend.c
35
+++ b/block/block-backend.c
36
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_pwrite_zeroes(BlockBackend *blk, int64_t offset,
37
flags | BDRV_REQ_ZERO_WRITE);
38
}
39
40
-int blk_pwrite_compressed(BlockBackend *blk, int64_t offset, const void *buf,
41
- int64_t bytes)
42
+int blk_pwrite_compressed(BlockBackend *blk, int64_t offset, int64_t bytes,
43
+ const void *buf)
44
{
45
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
46
IO_OR_GS_CODE();
47
diff --git a/qemu-img.c b/qemu-img.c
48
index XXXXXXX..XXXXXXX 100644
49
--- a/qemu-img.c
50
+++ b/qemu-img.c
51
@@ -XXX,XX +XXX,XX @@ static int convert_do_copy(ImgConvertState *s)
52
53
if (s->compressed && !s->ret) {
54
/* signal EOF to align */
55
- ret = blk_pwrite_compressed(s->target, 0, NULL, 0);
56
+ ret = blk_pwrite_compressed(s->target, 0, 0, NULL);
57
if (ret < 0) {
58
return ret;
59
}
60
diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
61
index XXXXXXX..XXXXXXX 100644
62
--- a/qemu-io-cmds.c
63
+++ b/qemu-io-cmds.c
64
@@ -XXX,XX +XXX,XX @@ static int do_write_compressed(BlockBackend *blk, char *buf, int64_t offset,
65
return -ERANGE;
66
}
67
68
- ret = blk_pwrite_compressed(blk, offset, buf, bytes);
69
+ ret = blk_pwrite_compressed(blk, offset, bytes, buf);
70
if (ret < 0) {
71
return ret;
72
}
73
--
74
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Also convert blk_pwrite_compressed() into a generated_co_wrapper.
4
5
Signed-off-by: Alberto Faria <afaria@redhat.com>
6
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
7
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
8
Message-Id: <20220705161527.1054072-12-afaria@redhat.com>
9
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
10
---
11
include/sysemu/block-backend-io.h | 7 +++++--
12
block/block-backend.c | 8 ++++----
13
tests/unit/test-block-iothread.c | 18 ++++++++++++++++++
14
3 files changed, 27 insertions(+), 6 deletions(-)
15
16
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
17
index XXXXXXX..XXXXXXX 100644
18
--- a/include/sysemu/block-backend-io.h
19
+++ b/include/sysemu/block-backend-io.h
20
@@ -XXX,XX +XXX,XX @@ int blk_flush(BlockBackend *blk);
21
22
int blk_ioctl(BlockBackend *blk, unsigned long int req, void *buf);
23
24
-int blk_pwrite_compressed(BlockBackend *blk, int64_t offset, int64_t bytes,
25
- const void *buf);
26
+int generated_co_wrapper blk_pwrite_compressed(BlockBackend *blk,
27
+ int64_t offset, int64_t bytes,
28
+ const void *buf);
29
+int coroutine_fn blk_co_pwrite_compressed(BlockBackend *blk, int64_t offset,
30
+ int64_t bytes, const void *buf);
31
int blk_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes);
32
int blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
33
int64_t bytes, BdrvRequestFlags flags);
34
diff --git a/block/block-backend.c b/block/block-backend.c
35
index XXXXXXX..XXXXXXX 100644
36
--- a/block/block-backend.c
37
+++ b/block/block-backend.c
38
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_pwrite_zeroes(BlockBackend *blk, int64_t offset,
39
flags | BDRV_REQ_ZERO_WRITE);
40
}
41
42
-int blk_pwrite_compressed(BlockBackend *blk, int64_t offset, int64_t bytes,
43
- const void *buf)
44
+int coroutine_fn blk_co_pwrite_compressed(BlockBackend *blk, int64_t offset,
45
+ int64_t bytes, const void *buf)
46
{
47
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
48
IO_OR_GS_CODE();
49
- return blk_pwritev_part(blk, offset, bytes, &qiov, 0,
50
- BDRV_REQ_WRITE_COMPRESSED);
51
+ return blk_co_pwritev_part(blk, offset, bytes, &qiov, 0,
52
+ BDRV_REQ_WRITE_COMPRESSED);
53
}
54
55
int blk_truncate(BlockBackend *blk, int64_t offset, bool exact,
56
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
57
index XXXXXXX..XXXXXXX 100644
58
--- a/tests/unit/test-block-iothread.c
59
+++ b/tests/unit/test-block-iothread.c
60
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_blk_pwritev_part(BlockBackend *blk)
61
g_assert_cmpint(ret, ==, -EIO);
62
}
63
64
+static void test_sync_op_blk_pwrite_compressed(BlockBackend *blk)
65
+{
66
+ uint8_t buf[512] = { 0 };
67
+ int ret;
68
+
69
+ /* Late error: Not supported */
70
+ ret = blk_pwrite_compressed(blk, 0, sizeof(buf), buf);
71
+ g_assert_cmpint(ret, ==, -ENOTSUP);
72
+
73
+ /* Early error: Negative offset */
74
+ ret = blk_pwrite_compressed(blk, -2, sizeof(buf), buf);
75
+ g_assert_cmpint(ret, ==, -EIO);
76
+}
77
+
78
static void test_sync_op_load_vmstate(BdrvChild *c)
79
{
80
uint8_t buf[512];
81
@@ -XXX,XX +XXX,XX @@ const SyncOpTest sync_op_tests[] = {
82
.name = "/sync-op/pwritev_part",
83
.fn = NULL,
84
.blkfn = test_sync_op_blk_pwritev_part,
85
+ }, {
86
+ .name = "/sync-op/pwrite_compressed",
87
+ .fn = NULL,
88
+ .blkfn = test_sync_op_blk_pwrite_compressed,
89
}, {
90
.name = "/sync-op/load_vmstate",
91
.fn = test_sync_op_load_vmstate,
92
--
93
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Signed-off-by: Alberto Faria <afaria@redhat.com>
4
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
5
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
6
Message-Id: <20220705161527.1054072-13-afaria@redhat.com>
7
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
8
---
9
include/sysemu/block-backend-io.h | 5 +++--
10
block/block-backend.c | 8 --------
11
tests/unit/test-block-iothread.c | 17 +++++++++++++++++
12
3 files changed, 20 insertions(+), 10 deletions(-)
13
14
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
15
index XXXXXXX..XXXXXXX 100644
16
--- a/include/sysemu/block-backend-io.h
17
+++ b/include/sysemu/block-backend-io.h
18
@@ -XXX,XX +XXX,XX @@ int generated_co_wrapper blk_pwrite_compressed(BlockBackend *blk,
19
int coroutine_fn blk_co_pwrite_compressed(BlockBackend *blk, int64_t offset,
20
int64_t bytes, const void *buf);
21
int blk_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes);
22
-int blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
23
- int64_t bytes, BdrvRequestFlags flags);
24
+int generated_co_wrapper blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
25
+ int64_t bytes,
26
+ BdrvRequestFlags flags);
27
int coroutine_fn blk_co_pwrite_zeroes(BlockBackend *blk, int64_t offset,
28
int64_t bytes, BdrvRequestFlags flags);
29
int blk_truncate(BlockBackend *blk, int64_t offset, bool exact,
30
diff --git a/block/block-backend.c b/block/block-backend.c
31
index XXXXXXX..XXXXXXX 100644
32
--- a/block/block-backend.c
33
+++ b/block/block-backend.c
34
@@ -XXX,XX +XXX,XX @@ typedef struct BlkRwCo {
35
BdrvRequestFlags flags;
36
} BlkRwCo;
37
38
-int blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
39
- int64_t bytes, BdrvRequestFlags flags)
40
-{
41
- IO_OR_GS_CODE();
42
- return blk_pwritev_part(blk, offset, bytes, NULL, 0,
43
- flags | BDRV_REQ_ZERO_WRITE);
44
-}
45
-
46
int blk_make_zero(BlockBackend *blk, BdrvRequestFlags flags)
47
{
48
GLOBAL_STATE_CODE();
49
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
50
index XXXXXXX..XXXXXXX 100644
51
--- a/tests/unit/test-block-iothread.c
52
+++ b/tests/unit/test-block-iothread.c
53
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_blk_pwrite_compressed(BlockBackend *blk)
54
g_assert_cmpint(ret, ==, -EIO);
55
}
56
57
+static void test_sync_op_blk_pwrite_zeroes(BlockBackend *blk)
58
+{
59
+ int ret;
60
+
61
+ /* Success */
62
+ ret = blk_pwrite_zeroes(blk, 0, 512, 0);
63
+ g_assert_cmpint(ret, ==, 0);
64
+
65
+ /* Early error: Negative offset */
66
+ ret = blk_pwrite_zeroes(blk, -2, 512, 0);
67
+ g_assert_cmpint(ret, ==, -EIO);
68
+}
69
+
70
static void test_sync_op_load_vmstate(BdrvChild *c)
71
{
72
uint8_t buf[512];
73
@@ -XXX,XX +XXX,XX @@ const SyncOpTest sync_op_tests[] = {
74
.name = "/sync-op/pwrite_compressed",
75
.fn = NULL,
76
.blkfn = test_sync_op_blk_pwrite_compressed,
77
+ }, {
78
+ .name = "/sync-op/pwrite_zeroes",
79
+ .fn = NULL,
80
+ .blkfn = test_sync_op_blk_pwrite_zeroes,
81
}, {
82
.name = "/sync-op/load_vmstate",
83
.fn = test_sync_op_load_vmstate,
84
--
85
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Signed-off-by: Alberto Faria <afaria@redhat.com>
4
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
5
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
6
Message-Id: <20220705161527.1054072-14-afaria@redhat.com>
7
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
8
---
9
block/coroutines.h | 3 ---
10
include/sysemu/block-backend-io.h | 3 ++-
11
block/block-backend.c | 12 ------------
12
3 files changed, 2 insertions(+), 16 deletions(-)
13
14
diff --git a/block/coroutines.h b/block/coroutines.h
15
index XXXXXXX..XXXXXXX 100644
16
--- a/block/coroutines.h
17
+++ b/block/coroutines.h
18
@@ -XXX,XX +XXX,XX @@ nbd_do_establish_connection(BlockDriverState *bs, bool blocking, Error **errp);
19
int generated_co_wrapper
20
blk_do_ioctl(BlockBackend *blk, unsigned long int req, void *buf);
21
22
-int generated_co_wrapper
23
-blk_do_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes);
24
-
25
int generated_co_wrapper blk_do_flush(BlockBackend *blk);
26
27
#endif /* BLOCK_COROUTINES_H */
28
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
29
index XXXXXXX..XXXXXXX 100644
30
--- a/include/sysemu/block-backend-io.h
31
+++ b/include/sysemu/block-backend-io.h
32
@@ -XXX,XX +XXX,XX @@ static inline int coroutine_fn blk_co_pwrite(BlockBackend *blk, int64_t offset,
33
return blk_co_pwritev(blk, offset, bytes, &qiov, flags);
34
}
35
36
+int generated_co_wrapper blk_pdiscard(BlockBackend *blk, int64_t offset,
37
+ int64_t bytes);
38
int coroutine_fn blk_co_pdiscard(BlockBackend *blk, int64_t offset,
39
int64_t bytes);
40
41
@@ -XXX,XX +XXX,XX @@ int generated_co_wrapper blk_pwrite_compressed(BlockBackend *blk,
42
const void *buf);
43
int coroutine_fn blk_co_pwrite_compressed(BlockBackend *blk, int64_t offset,
44
int64_t bytes, const void *buf);
45
-int blk_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes);
46
int generated_co_wrapper blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
47
int64_t bytes,
48
BdrvRequestFlags flags);
49
diff --git a/block/block-backend.c b/block/block-backend.c
50
index XXXXXXX..XXXXXXX 100644
51
--- a/block/block-backend.c
52
+++ b/block/block-backend.c
53
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_pdiscard(BlockBackend *blk, int64_t offset,
54
return ret;
55
}
56
57
-int blk_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes)
58
-{
59
- int ret;
60
- IO_OR_GS_CODE();
61
-
62
- blk_inc_in_flight(blk);
63
- ret = blk_do_pdiscard(blk, offset, bytes);
64
- blk_dec_in_flight(blk);
65
-
66
- return ret;
67
-}
68
-
69
/* To be called between exactly one pair of blk_inc/dec_in_flight() */
70
int coroutine_fn blk_co_do_flush(BlockBackend *blk)
71
{
72
--
73
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Signed-off-by: Alberto Faria <afaria@redhat.com>
4
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
5
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
6
Message-Id: <20220705161527.1054072-15-afaria@redhat.com>
7
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
8
---
9
block/coroutines.h | 2 --
10
include/sysemu/block-backend-io.h | 2 +-
11
block/block-backend.c | 11 -----------
12
3 files changed, 1 insertion(+), 14 deletions(-)
13
14
diff --git a/block/coroutines.h b/block/coroutines.h
15
index XXXXXXX..XXXXXXX 100644
16
--- a/block/coroutines.h
17
+++ b/block/coroutines.h
18
@@ -XXX,XX +XXX,XX @@ nbd_do_establish_connection(BlockDriverState *bs, bool blocking, Error **errp);
19
int generated_co_wrapper
20
blk_do_ioctl(BlockBackend *blk, unsigned long int req, void *buf);
21
22
-int generated_co_wrapper blk_do_flush(BlockBackend *blk);
23
-
24
#endif /* BLOCK_COROUTINES_H */
25
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
26
index XXXXXXX..XXXXXXX 100644
27
--- a/include/sysemu/block-backend-io.h
28
+++ b/include/sysemu/block-backend-io.h
29
@@ -XXX,XX +XXX,XX @@ int generated_co_wrapper blk_pdiscard(BlockBackend *blk, int64_t offset,
30
int coroutine_fn blk_co_pdiscard(BlockBackend *blk, int64_t offset,
31
int64_t bytes);
32
33
+int generated_co_wrapper blk_flush(BlockBackend *blk);
34
int coroutine_fn blk_co_flush(BlockBackend *blk);
35
-int blk_flush(BlockBackend *blk);
36
37
int blk_ioctl(BlockBackend *blk, unsigned long int req, void *buf);
38
39
diff --git a/block/block-backend.c b/block/block-backend.c
40
index XXXXXXX..XXXXXXX 100644
41
--- a/block/block-backend.c
42
+++ b/block/block-backend.c
43
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_flush(BlockBackend *blk)
44
return ret;
45
}
46
47
-int blk_flush(BlockBackend *blk)
48
-{
49
- int ret;
50
-
51
- blk_inc_in_flight(blk);
52
- ret = blk_do_flush(blk);
53
- blk_dec_in_flight(blk);
54
-
55
- return ret;
56
-}
57
-
58
void blk_drain(BlockBackend *blk)
59
{
60
BlockDriverState *bs = blk_bs(blk);
61
--
62
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Also convert blk_ioctl() into a generated_co_wrapper.
4
5
Signed-off-by: Alberto Faria <afaria@redhat.com>
6
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
7
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
8
Message-Id: <20220705161527.1054072-16-afaria@redhat.com>
9
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
10
---
11
block/coroutines.h | 6 ------
12
include/sysemu/block-backend-io.h | 5 ++++-
13
block/block-backend.c | 7 ++++---
14
3 files changed, 8 insertions(+), 10 deletions(-)
15
16
diff --git a/block/coroutines.h b/block/coroutines.h
17
index XXXXXXX..XXXXXXX 100644
18
--- a/block/coroutines.h
19
+++ b/block/coroutines.h
20
@@ -XXX,XX +XXX,XX @@ blk_co_do_pwritev_part(BlockBackend *blk, int64_t offset, int64_t bytes,
21
QEMUIOVector *qiov, size_t qiov_offset,
22
BdrvRequestFlags flags);
23
24
-int coroutine_fn
25
-blk_co_do_ioctl(BlockBackend *blk, unsigned long int req, void *buf);
26
-
27
int coroutine_fn
28
blk_co_do_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes);
29
30
@@ -XXX,XX +XXX,XX @@ bdrv_common_block_status_above(BlockDriverState *bs,
31
int generated_co_wrapper
32
nbd_do_establish_connection(BlockDriverState *bs, bool blocking, Error **errp);
33
34
-int generated_co_wrapper
35
-blk_do_ioctl(BlockBackend *blk, unsigned long int req, void *buf);
36
-
37
#endif /* BLOCK_COROUTINES_H */
38
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
39
index XXXXXXX..XXXXXXX 100644
40
--- a/include/sysemu/block-backend-io.h
41
+++ b/include/sysemu/block-backend-io.h
42
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_pdiscard(BlockBackend *blk, int64_t offset,
43
int generated_co_wrapper blk_flush(BlockBackend *blk);
44
int coroutine_fn blk_co_flush(BlockBackend *blk);
45
46
-int blk_ioctl(BlockBackend *blk, unsigned long int req, void *buf);
47
+int generated_co_wrapper blk_ioctl(BlockBackend *blk, unsigned long int req,
48
+ void *buf);
49
+int coroutine_fn blk_co_ioctl(BlockBackend *blk, unsigned long int req,
50
+ void *buf);
51
52
int generated_co_wrapper blk_pwrite_compressed(BlockBackend *blk,
53
int64_t offset, int64_t bytes,
54
diff --git a/block/block-backend.c b/block/block-backend.c
55
index XXXXXXX..XXXXXXX 100644
56
--- a/block/block-backend.c
57
+++ b/block/block-backend.c
58
@@ -XXX,XX +XXX,XX @@ void blk_aio_cancel_async(BlockAIOCB *acb)
59
}
60
61
/* To be called between exactly one pair of blk_inc/dec_in_flight() */
62
-int coroutine_fn
63
+static int coroutine_fn
64
blk_co_do_ioctl(BlockBackend *blk, unsigned long int req, void *buf)
65
{
66
IO_CODE();
67
@@ -XXX,XX +XXX,XX @@ blk_co_do_ioctl(BlockBackend *blk, unsigned long int req, void *buf)
68
return bdrv_co_ioctl(blk_bs(blk), req, buf);
69
}
70
71
-int blk_ioctl(BlockBackend *blk, unsigned long int req, void *buf)
72
+int coroutine_fn blk_co_ioctl(BlockBackend *blk, unsigned long int req,
73
+ void *buf)
74
{
75
int ret;
76
IO_OR_GS_CODE();
77
78
blk_inc_in_flight(blk);
79
- ret = blk_do_ioctl(blk, req, buf);
80
+ ret = blk_co_do_ioctl(blk, req, buf);
81
blk_dec_in_flight(blk);
82
83
return ret;
84
--
85
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Also convert blk_truncate() into a generated_co_wrapper.
4
5
Signed-off-by: Alberto Faria <afaria@redhat.com>
6
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
7
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
8
Message-Id: <20220705161527.1054072-17-afaria@redhat.com>
9
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
10
---
11
include/sysemu/block-backend-io.h | 8 ++++++--
12
block/block-backend.c | 7 ++++---
13
tests/unit/test-block-iothread.c | 14 ++++++++++++++
14
3 files changed, 24 insertions(+), 5 deletions(-)
15
16
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
17
index XXXXXXX..XXXXXXX 100644
18
--- a/include/sysemu/block-backend-io.h
19
+++ b/include/sysemu/block-backend-io.h
20
@@ -XXX,XX +XXX,XX @@ int generated_co_wrapper blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
21
BdrvRequestFlags flags);
22
int coroutine_fn blk_co_pwrite_zeroes(BlockBackend *blk, int64_t offset,
23
int64_t bytes, BdrvRequestFlags flags);
24
-int blk_truncate(BlockBackend *blk, int64_t offset, bool exact,
25
- PreallocMode prealloc, BdrvRequestFlags flags, Error **errp);
26
+int generated_co_wrapper blk_truncate(BlockBackend *blk, int64_t offset,
27
+ bool exact, PreallocMode prealloc,
28
+ BdrvRequestFlags flags, Error **errp);
29
+int coroutine_fn blk_co_truncate(BlockBackend *blk, int64_t offset, bool exact,
30
+ PreallocMode prealloc, BdrvRequestFlags flags,
31
+ Error **errp);
32
33
#endif /* BLOCK_BACKEND_IO_H */
34
diff --git a/block/block-backend.c b/block/block-backend.c
35
index XXXXXXX..XXXXXXX 100644
36
--- a/block/block-backend.c
37
+++ b/block/block-backend.c
38
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_pwrite_compressed(BlockBackend *blk, int64_t offset,
39
BDRV_REQ_WRITE_COMPRESSED);
40
}
41
42
-int blk_truncate(BlockBackend *blk, int64_t offset, bool exact,
43
- PreallocMode prealloc, BdrvRequestFlags flags, Error **errp)
44
+int coroutine_fn blk_co_truncate(BlockBackend *blk, int64_t offset, bool exact,
45
+ PreallocMode prealloc, BdrvRequestFlags flags,
46
+ Error **errp)
47
{
48
IO_OR_GS_CODE();
49
if (!blk_is_available(blk)) {
50
@@ -XXX,XX +XXX,XX @@ int blk_truncate(BlockBackend *blk, int64_t offset, bool exact,
51
return -ENOMEDIUM;
52
}
53
54
- return bdrv_truncate(blk->root, offset, exact, prealloc, flags, errp);
55
+ return bdrv_co_truncate(blk->root, offset, exact, prealloc, flags, errp);
56
}
57
58
int blk_save_vmstate(BlockBackend *blk, const uint8_t *buf,
59
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
60
index XXXXXXX..XXXXXXX 100644
61
--- a/tests/unit/test-block-iothread.c
62
+++ b/tests/unit/test-block-iothread.c
63
@@ -XXX,XX +XXX,XX @@ static void test_sync_op_truncate(BdrvChild *c)
64
c->bs->open_flags |= BDRV_O_RDWR;
65
}
66
67
+static void test_sync_op_blk_truncate(BlockBackend *blk)
68
+{
69
+ int ret;
70
+
71
+ /* Normal success path */
72
+ ret = blk_truncate(blk, 65536, false, PREALLOC_MODE_OFF, 0, NULL);
73
+ g_assert_cmpint(ret, ==, 0);
74
+
75
+ /* Early error: Negative offset */
76
+ ret = blk_truncate(blk, -2, false, PREALLOC_MODE_OFF, 0, NULL);
77
+ g_assert_cmpint(ret, ==, -EINVAL);
78
+}
79
+
80
static void test_sync_op_block_status(BdrvChild *c)
81
{
82
int ret;
83
@@ -XXX,XX +XXX,XX @@ const SyncOpTest sync_op_tests[] = {
84
}, {
85
.name = "/sync-op/truncate",
86
.fn = test_sync_op_truncate,
87
+ .blkfn = test_sync_op_blk_truncate,
88
}, {
89
.name = "/sync-op/block_status",
90
.fn = test_sync_op_block_status,
91
--
92
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Keep generated_co_wrapper and coroutine_fn pairs together. This should
4
make it clear that each I/O function has these two versions.
5
6
Also move blk_co_{pread,pwrite}()'s implementations out of the header
7
file for consistency.
8
9
Signed-off-by: Alberto Faria <afaria@redhat.com>
10
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
11
Message-Id: <20220705161527.1054072-18-afaria@redhat.com>
12
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
13
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
14
---
15
include/sysemu/block-backend-io.h | 77 +++++++++++++------------------
16
block/block-backend.c | 22 +++++++++
17
2 files changed, 54 insertions(+), 45 deletions(-)
18
19
diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backend-io.h
20
index XXXXXXX..XXXXXXX 100644
21
--- a/include/sysemu/block-backend-io.h
22
+++ b/include/sysemu/block-backend-io.h
23
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_copy_range(BlockBackend *blk_in, int64_t off_in,
24
int generated_co_wrapper blk_pread(BlockBackend *blk, int64_t offset,
25
int64_t bytes, void *buf,
26
BdrvRequestFlags flags);
27
-int generated_co_wrapper blk_pwrite(BlockBackend *blk, int64_t offset,
28
- int64_t bytes, const void *buf,
29
+int coroutine_fn blk_co_pread(BlockBackend *blk, int64_t offset, int64_t bytes,
30
+ void *buf, BdrvRequestFlags flags);
31
+
32
+int generated_co_wrapper blk_preadv(BlockBackend *blk, int64_t offset,
33
+ int64_t bytes, QEMUIOVector *qiov,
34
BdrvRequestFlags flags);
35
+int coroutine_fn blk_co_preadv(BlockBackend *blk, int64_t offset,
36
+ int64_t bytes, QEMUIOVector *qiov,
37
+ BdrvRequestFlags flags);
38
+
39
int generated_co_wrapper blk_preadv_part(BlockBackend *blk, int64_t offset,
40
int64_t bytes, QEMUIOVector *qiov,
41
size_t qiov_offset,
42
@@ -XXX,XX +XXX,XX @@ int generated_co_wrapper blk_preadv_part(BlockBackend *blk, int64_t offset,
43
int coroutine_fn blk_co_preadv_part(BlockBackend *blk, int64_t offset,
44
int64_t bytes, QEMUIOVector *qiov,
45
size_t qiov_offset, BdrvRequestFlags flags);
46
-int generated_co_wrapper blk_preadv(BlockBackend *blk, int64_t offset,
47
- int64_t bytes, QEMUIOVector *qiov,
48
+
49
+int generated_co_wrapper blk_pwrite(BlockBackend *blk, int64_t offset,
50
+ int64_t bytes, const void *buf,
51
BdrvRequestFlags flags);
52
-int coroutine_fn blk_co_preadv(BlockBackend *blk, int64_t offset,
53
- int64_t bytes, QEMUIOVector *qiov,
54
- BdrvRequestFlags flags);
55
+int coroutine_fn blk_co_pwrite(BlockBackend *blk, int64_t offset, int64_t bytes,
56
+ const void *buf, BdrvRequestFlags flags);
57
+
58
+int generated_co_wrapper blk_pwritev(BlockBackend *blk, int64_t offset,
59
+ int64_t bytes, QEMUIOVector *qiov,
60
+ BdrvRequestFlags flags);
61
+int coroutine_fn blk_co_pwritev(BlockBackend *blk, int64_t offset,
62
+ int64_t bytes, QEMUIOVector *qiov,
63
+ BdrvRequestFlags flags);
64
+
65
int generated_co_wrapper blk_pwritev_part(BlockBackend *blk, int64_t offset,
66
int64_t bytes, QEMUIOVector *qiov,
67
size_t qiov_offset,
68
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_pwritev_part(BlockBackend *blk, int64_t offset,
69
int64_t bytes,
70
QEMUIOVector *qiov, size_t qiov_offset,
71
BdrvRequestFlags flags);
72
-int generated_co_wrapper blk_pwritev(BlockBackend *blk, int64_t offset,
73
- int64_t bytes, QEMUIOVector *qiov,
74
- BdrvRequestFlags flags);
75
-int coroutine_fn blk_co_pwritev(BlockBackend *blk, int64_t offset,
76
- int64_t bytes, QEMUIOVector *qiov,
77
- BdrvRequestFlags flags);
78
-
79
-static inline int coroutine_fn blk_co_pread(BlockBackend *blk, int64_t offset,
80
- int64_t bytes, void *buf,
81
- BdrvRequestFlags flags)
82
-{
83
- QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
84
- IO_OR_GS_CODE();
85
-
86
- assert(bytes <= SIZE_MAX);
87
-
88
- return blk_co_preadv(blk, offset, bytes, &qiov, flags);
89
-}
90
-
91
-static inline int coroutine_fn blk_co_pwrite(BlockBackend *blk, int64_t offset,
92
- int64_t bytes, const void *buf,
93
- BdrvRequestFlags flags)
94
-{
95
- QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
96
- IO_OR_GS_CODE();
97
98
- assert(bytes <= SIZE_MAX);
99
+int generated_co_wrapper blk_pwrite_compressed(BlockBackend *blk,
100
+ int64_t offset, int64_t bytes,
101
+ const void *buf);
102
+int coroutine_fn blk_co_pwrite_compressed(BlockBackend *blk, int64_t offset,
103
+ int64_t bytes, const void *buf);
104
105
- return blk_co_pwritev(blk, offset, bytes, &qiov, flags);
106
-}
107
+int generated_co_wrapper blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
108
+ int64_t bytes,
109
+ BdrvRequestFlags flags);
110
+int coroutine_fn blk_co_pwrite_zeroes(BlockBackend *blk, int64_t offset,
111
+ int64_t bytes, BdrvRequestFlags flags);
112
113
int generated_co_wrapper blk_pdiscard(BlockBackend *blk, int64_t offset,
114
int64_t bytes);
115
@@ -XXX,XX +XXX,XX @@ int generated_co_wrapper blk_ioctl(BlockBackend *blk, unsigned long int req,
116
int coroutine_fn blk_co_ioctl(BlockBackend *blk, unsigned long int req,
117
void *buf);
118
119
-int generated_co_wrapper blk_pwrite_compressed(BlockBackend *blk,
120
- int64_t offset, int64_t bytes,
121
- const void *buf);
122
-int coroutine_fn blk_co_pwrite_compressed(BlockBackend *blk, int64_t offset,
123
- int64_t bytes, const void *buf);
124
-int generated_co_wrapper blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
125
- int64_t bytes,
126
- BdrvRequestFlags flags);
127
-int coroutine_fn blk_co_pwrite_zeroes(BlockBackend *blk, int64_t offset,
128
- int64_t bytes, BdrvRequestFlags flags);
129
int generated_co_wrapper blk_truncate(BlockBackend *blk, int64_t offset,
130
bool exact, PreallocMode prealloc,
131
BdrvRequestFlags flags, Error **errp);
132
diff --git a/block/block-backend.c b/block/block-backend.c
133
index XXXXXXX..XXXXXXX 100644
134
--- a/block/block-backend.c
135
+++ b/block/block-backend.c
136
@@ -XXX,XX +XXX,XX @@ blk_co_do_preadv_part(BlockBackend *blk, int64_t offset, int64_t bytes,
137
return ret;
138
}
139
140
+int coroutine_fn blk_co_pread(BlockBackend *blk, int64_t offset, int64_t bytes,
141
+ void *buf, BdrvRequestFlags flags)
142
+{
143
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
144
+ IO_OR_GS_CODE();
145
+
146
+ assert(bytes <= SIZE_MAX);
147
+
148
+ return blk_co_preadv(blk, offset, bytes, &qiov, flags);
149
+}
150
+
151
int coroutine_fn blk_co_preadv(BlockBackend *blk, int64_t offset,
152
int64_t bytes, QEMUIOVector *qiov,
153
BdrvRequestFlags flags)
154
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_pwritev_part(BlockBackend *blk, int64_t offset,
155
return ret;
156
}
157
158
+int coroutine_fn blk_co_pwrite(BlockBackend *blk, int64_t offset, int64_t bytes,
159
+ const void *buf, BdrvRequestFlags flags)
160
+{
161
+ QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
162
+ IO_OR_GS_CODE();
163
+
164
+ assert(bytes <= SIZE_MAX);
165
+
166
+ return blk_co_pwritev(blk, offset, bytes, &qiov, flags);
167
+}
168
+
169
int coroutine_fn blk_co_pwritev(BlockBackend *blk, int64_t offset,
170
int64_t bytes, QEMUIOVector *qiov,
171
BdrvRequestFlags flags)
172
--
173
2.35.3
diff view generated by jsdifflib
New patch
1
From: Alberto Faria <afaria@redhat.com>
1
2
3
Some can be made static, others are unused generated_co_wrappers.
4
5
Signed-off-by: Alberto Faria <afaria@redhat.com>
6
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
7
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
8
Message-Id: <20220705161527.1054072-19-afaria@redhat.com>
9
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
10
---
11
block/coroutines.h | 19 -------------------
12
block/block-backend.c | 6 +++---
13
2 files changed, 3 insertions(+), 22 deletions(-)
14
15
diff --git a/block/coroutines.h b/block/coroutines.h
16
index XXXXXXX..XXXXXXX 100644
17
--- a/block/coroutines.h
18
+++ b/block/coroutines.h
19
@@ -XXX,XX +XXX,XX @@ nbd_co_do_establish_connection(BlockDriverState *bs, bool blocking,
20
Error **errp);
21
22
23
-int coroutine_fn
24
-blk_co_do_pwritev_part(BlockBackend *blk, int64_t offset, int64_t bytes,
25
- QEMUIOVector *qiov, size_t qiov_offset,
26
- BdrvRequestFlags flags);
27
-
28
-int coroutine_fn
29
-blk_co_do_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes);
30
-
31
-int coroutine_fn blk_co_do_flush(BlockBackend *blk);
32
-
33
-
34
/*
35
* "I/O or GS" API functions. These functions can run without
36
* the BQL, but only in one specific iothread/main loop.
37
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_do_flush(BlockBackend *blk);
38
* the "I/O or GS" API.
39
*/
40
41
-int generated_co_wrapper
42
-bdrv_preadv(BdrvChild *child, int64_t offset, int64_t bytes,
43
- QEMUIOVector *qiov, BdrvRequestFlags flags);
44
-
45
-int generated_co_wrapper
46
-bdrv_pwritev(BdrvChild *child, int64_t offset, int64_t bytes,
47
- QEMUIOVector *qiov, BdrvRequestFlags flags);
48
-
49
int generated_co_wrapper
50
bdrv_common_block_status_above(BlockDriverState *bs,
51
BlockDriverState *base,
52
diff --git a/block/block-backend.c b/block/block-backend.c
53
index XXXXXXX..XXXXXXX 100644
54
--- a/block/block-backend.c
55
+++ b/block/block-backend.c
56
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_preadv_part(BlockBackend *blk, int64_t offset,
57
}
58
59
/* To be called between exactly one pair of blk_inc/dec_in_flight() */
60
-int coroutine_fn
61
+static int coroutine_fn
62
blk_co_do_pwritev_part(BlockBackend *blk, int64_t offset, int64_t bytes,
63
QEMUIOVector *qiov, size_t qiov_offset,
64
BdrvRequestFlags flags)
65
@@ -XXX,XX +XXX,XX @@ BlockAIOCB *blk_aio_ioctl(BlockBackend *blk, unsigned long int req, void *buf,
66
}
67
68
/* To be called between exactly one pair of blk_inc/dec_in_flight() */
69
-int coroutine_fn
70
+static int coroutine_fn
71
blk_co_do_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes)
72
{
73
int ret;
74
@@ -XXX,XX +XXX,XX @@ int coroutine_fn blk_co_pdiscard(BlockBackend *blk, int64_t offset,
75
}
76
77
/* To be called between exactly one pair of blk_inc/dec_in_flight() */
78
-int coroutine_fn blk_co_do_flush(BlockBackend *blk)
79
+static int coroutine_fn blk_co_do_flush(BlockBackend *blk)
80
{
81
blk_wait_while_drained(blk);
82
IO_CODE();
83
--
84
2.35.3
diff view generated by jsdifflib
New patch
1
error_report() only works once monitor_init_globals_core() has been
2
called, which is not the case when parsing the --daemonize option. Use
3
fprintf(stderr, ...) instead.
1
4
5
Fixes: 2525edd85fec53e23fda98974a15e3b3c8957596 ("qsd: Add --daemonize")
6
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
7
Message-Id: <20220609122852.21140-1-hreitz@redhat.com>
8
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
9
---
10
storage-daemon/qemu-storage-daemon.c | 6 +++++-
11
1 file changed, 5 insertions(+), 1 deletion(-)
12
13
diff --git a/storage-daemon/qemu-storage-daemon.c b/storage-daemon/qemu-storage-daemon.c
14
index XXXXXXX..XXXXXXX 100644
15
--- a/storage-daemon/qemu-storage-daemon.c
16
+++ b/storage-daemon/qemu-storage-daemon.c
17
@@ -XXX,XX +XXX,XX @@ static void process_options(int argc, char *argv[], bool pre_init_pass)
18
}
19
case OPTION_DAEMONIZE:
20
if (os_set_daemonize(true) < 0) {
21
- error_report("--daemonize not supported in this build");
22
+ /*
23
+ * --daemonize is parsed before monitor_init_globals_core(), so
24
+ * error_report() does not work yet
25
+ */
26
+ fprintf(stderr, "--daemonize not supported in this build\n");
27
exit(EXIT_FAILURE);
28
}
29
break;
30
--
31
2.35.3
32
33
diff view generated by jsdifflib
New patch
1
e7874a50ff3f5b20fb46f36958ad ("python: update for mypy 0.950") has added
2
`warn_unused_ignores = False` to python/setup.cfg, to be able to keep
3
compatibility with both pre- and post-0.950 mypy versions.
1
4
5
The iotests' mypy.ini needs the same, or 297 will fail (on both pre- and
6
post-0.950 mypy, as far as I can tell; just for different `ignore`
7
lines).
8
9
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
10
Message-Id: <20220621092536.19837-1-hreitz@redhat.com>
11
Acked-by: John Snow <jsnow@redhat.com>
12
---
13
tests/qemu-iotests/mypy.ini | 2 +-
14
1 file changed, 1 insertion(+), 1 deletion(-)
15
16
diff --git a/tests/qemu-iotests/mypy.ini b/tests/qemu-iotests/mypy.ini
17
index XXXXXXX..XXXXXXX 100644
18
--- a/tests/qemu-iotests/mypy.ini
19
+++ b/tests/qemu-iotests/mypy.ini
20
@@ -XXX,XX +XXX,XX @@ no_implicit_optional = True
21
scripts_are_modules = True
22
warn_redundant_casts = True
23
warn_unused_configs = True
24
-warn_unused_ignores = True
25
+warn_unused_ignores = False
26
--
27
2.35.3
diff view generated by jsdifflib
New patch
1
After writing the PID file, we register an atexit() handler to unlink it
2
when the process terminates. However, if the process has changed its
3
working directory in the meantime (e.g. in os_setup_post() when
4
daemonizing), this will not work when the PID file path was relative.
5
Therefore, pass the absolute path (created with realpath()) to the
6
unlink() call in the atexit() handler.
1
7
8
(realpath() needs a path pointing to an existing file, so we cannot use
9
it before qemu_write_pidfile().)
10
11
Reproducer:
12
$ cd /tmp
13
$ qemu-storage-daemon --daemonize --pidfile qsd.pid
14
$ file qsd.pid
15
qsd.pid: ASCII text
16
$ kill $(cat qsd.pid)
17
$ file qsd.pid
18
qsd.pid: ASCII text
19
20
(qsd.pid should be gone after the process has terminated.)
21
22
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2092322
23
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
24
Message-Id: <20220609122701.17172-2-hreitz@redhat.com>
25
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
26
---
27
storage-daemon/qemu-storage-daemon.c | 11 ++++++++++-
28
1 file changed, 10 insertions(+), 1 deletion(-)
29
30
diff --git a/storage-daemon/qemu-storage-daemon.c b/storage-daemon/qemu-storage-daemon.c
31
index XXXXXXX..XXXXXXX 100644
32
--- a/storage-daemon/qemu-storage-daemon.c
33
+++ b/storage-daemon/qemu-storage-daemon.c
34
@@ -XXX,XX +XXX,XX @@
35
#include "trace/control.h"
36
37
static const char *pid_file;
38
+static char *pid_file_realpath;
39
static volatile bool exit_requested = false;
40
41
void qemu_system_killed(int signal, pid_t pid)
42
@@ -XXX,XX +XXX,XX @@ static void process_options(int argc, char *argv[], bool pre_init_pass)
43
44
static void pid_file_cleanup(void)
45
{
46
- unlink(pid_file);
47
+ unlink(pid_file_realpath);
48
}
49
50
static void pid_file_init(void)
51
@@ -XXX,XX +XXX,XX @@ static void pid_file_init(void)
52
exit(EXIT_FAILURE);
53
}
54
55
+ pid_file_realpath = g_malloc(PATH_MAX);
56
+ if (!realpath(pid_file, pid_file_realpath)) {
57
+ error_report("cannot resolve PID file path: %s: %s",
58
+ pid_file, strerror(errno));
59
+ unlink(pid_file);
60
+ exit(EXIT_FAILURE);
61
+ }
62
+
63
atexit(pid_file_cleanup);
64
}
65
66
--
67
2.35.3
68
69
diff view generated by jsdifflib
New patch
1
Currently, the exit notifier for unlinking the PID file is registered
2
unconditionally. Limit it to only when we actually do create a PID
3
file.
1
4
5
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
6
Message-Id: <20220609122701.17172-3-hreitz@redhat.com>
7
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
8
---
9
softmmu/vl.c | 18 +++++++++---------
10
1 file changed, 9 insertions(+), 9 deletions(-)
11
12
diff --git a/softmmu/vl.c b/softmmu/vl.c
13
index XXXXXXX..XXXXXXX 100644
14
--- a/softmmu/vl.c
15
+++ b/softmmu/vl.c
16
@@ -XXX,XX +XXX,XX @@ static Notifier qemu_unlink_pidfile_notifier;
17
18
static void qemu_unlink_pidfile(Notifier *n, void *data)
19
{
20
- if (pid_file) {
21
- unlink(pid_file);
22
- }
23
+ unlink(pid_file);
24
}
25
26
static const QEMUOption *lookup_opt(int argc, char **argv,
27
@@ -XXX,XX +XXX,XX @@ static void qemu_maybe_daemonize(const char *pid_file)
28
os_daemonize();
29
rcu_disable_atfork();
30
31
- if (pid_file && !qemu_write_pidfile(pid_file, &err)) {
32
- error_reportf_err(err, "cannot create PID file: ");
33
- exit(1);
34
- }
35
+ if (pid_file) {
36
+ if (!qemu_write_pidfile(pid_file, &err)) {
37
+ error_reportf_err(err, "cannot create PID file: ");
38
+ exit(1);
39
+ }
40
41
- qemu_unlink_pidfile_notifier.notify = qemu_unlink_pidfile;
42
- qemu_add_exit_notifier(&qemu_unlink_pidfile_notifier);
43
+ qemu_unlink_pidfile_notifier.notify = qemu_unlink_pidfile;
44
+ qemu_add_exit_notifier(&qemu_unlink_pidfile_notifier);
45
+ }
46
}
47
48
static void qemu_init_displays(void)
49
--
50
2.35.3
51
52
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <philmd@redhat.com>
1
After writing the PID file, we register an exit notifier to unlink it
2
when the process terminates. However, if the process has changed its
3
working directory in the meantime (e.g. in os_setup_post() when
4
daemonizing), this will not work when the PID file path was relative.
5
Therefore, pass the absolute path (created with realpath()) to the
6
unlink() call in the exit notifier.
2
7
3
Commit ed65fd1a2750 ("virtio-blk: switch off scsi-passthrough by
8
(realpath() needs a path pointing to an existing file, so we cannot use
4
default") changed the default value of the 'scsi' property of
9
it before qemu_write_pidfile().)
5
virtio-blk, which is only available on Linux hosts. It also added
6
an unconditional compat entry for 2.4 or earlier machines.
7
10
8
Trying to set this property on a pre-2.5 machine on OSX, we get:
11
Reproducer:
12
$ cd /tmp
13
$ qemu-system-x86_64 --daemonize --pidfile qemu.pid
14
$ file qemu.pid
15
qemu.pid: ASCII text
16
$ kill $(cat qemu.pid)
17
$ file qemu.pid
18
qemu.pid: ASCII text
9
19
10
Unexpected error in object_property_find() at qom/object.c:1201:
20
(qemu.pid should be gone after the process has terminated.)
11
qemu-system-x86_64: -device virtio-blk-pci,id=scsi0,drive=drive0: can't apply global virtio-blk-device.scsi=true: Property '.scsi' not found
12
21
13
Fix this error by marking the property optional.
22
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
23
Message-Id: <20220609122701.17172-4-hreitz@redhat.com>
24
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
25
---
26
softmmu/vl.c | 30 ++++++++++++++++++++++++++----
27
1 file changed, 26 insertions(+), 4 deletions(-)
14
28
15
Fixes: ed65fd1a27 ("virtio-blk: switch off scsi-passthrough by default")
29
diff --git a/softmmu/vl.c b/softmmu/vl.c
16
Suggested-by: Cornelia Huck <cohuck@redhat.com>
17
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
18
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
19
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
20
Message-id: 20200207001404.1739-1-philmd@redhat.com
21
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
22
---
23
hw/core/machine.c | 3 ++-
24
1 file changed, 2 insertions(+), 1 deletion(-)
25
26
diff --git a/hw/core/machine.c b/hw/core/machine.c
27
index XXXXXXX..XXXXXXX 100644
30
index XXXXXXX..XXXXXXX 100644
28
--- a/hw/core/machine.c
31
--- a/softmmu/vl.c
29
+++ b/hw/core/machine.c
32
+++ b/softmmu/vl.c
30
@@ -XXX,XX +XXX,XX @@ GlobalProperty hw_compat_2_5[] = {
33
@@ -XXX,XX +XXX,XX @@ machine_parse_property_opt(QemuOptsList *opts_list, const char *propname,
31
const size_t hw_compat_2_5_len = G_N_ELEMENTS(hw_compat_2_5);
34
}
32
35
33
GlobalProperty hw_compat_2_4[] = {
36
static const char *pid_file;
34
- { "virtio-blk-device", "scsi", "true" },
37
-static Notifier qemu_unlink_pidfile_notifier;
35
+ /* Optional because the 'scsi' property is Linux-only */
38
+struct UnlinkPidfileNotifier {
36
+ { "virtio-blk-device", "scsi", "true", .optional = true },
39
+ Notifier notifier;
37
{ "e1000", "extra_mac_registers", "off" },
40
+ char *pid_file_realpath;
38
{ "virtio-pci", "x-disable-pcie", "on" },
41
+};
39
{ "virtio-pci", "migrate-extra", "off" },
42
+static struct UnlinkPidfileNotifier qemu_unlink_pidfile_notifier;
43
44
static void qemu_unlink_pidfile(Notifier *n, void *data)
45
{
46
- unlink(pid_file);
47
+ struct UnlinkPidfileNotifier *upn;
48
+
49
+ upn = DO_UPCAST(struct UnlinkPidfileNotifier, notifier, n);
50
+ unlink(upn->pid_file_realpath);
51
}
52
53
static const QEMUOption *lookup_opt(int argc, char **argv,
54
@@ -XXX,XX +XXX,XX @@ static void qemu_maybe_daemonize(const char *pid_file)
55
rcu_disable_atfork();
56
57
if (pid_file) {
58
+ char *pid_file_realpath = NULL;
59
+
60
if (!qemu_write_pidfile(pid_file, &err)) {
61
error_reportf_err(err, "cannot create PID file: ");
62
exit(1);
63
}
64
65
- qemu_unlink_pidfile_notifier.notify = qemu_unlink_pidfile;
66
- qemu_add_exit_notifier(&qemu_unlink_pidfile_notifier);
67
+ pid_file_realpath = g_malloc0(PATH_MAX);
68
+ if (!realpath(pid_file, pid_file_realpath)) {
69
+ error_report("cannot resolve PID file path: %s: %s",
70
+ pid_file, strerror(errno));
71
+ unlink(pid_file);
72
+ exit(1);
73
+ }
74
+
75
+ qemu_unlink_pidfile_notifier = (struct UnlinkPidfileNotifier) {
76
+ .notifier = {
77
+ .notify = qemu_unlink_pidfile,
78
+ },
79
+ .pid_file_realpath = pid_file_realpath,
80
+ };
81
+ qemu_add_exit_notifier(&qemu_unlink_pidfile_notifier.notifier);
82
}
83
}
84
40
--
85
--
41
2.24.1
86
2.35.3
42
87
43
88
diff view generated by jsdifflib