mirror of https://github.com/xemu-project/xemu.git
block: Make bdrv_{pread,pwrite}() return 0 on success
They currently return the value of their 'bytes' parameter on success. Make them return 0 instead, for consistency with other I/O functions and in preparation to implement them using generated_co_wrapper. This also makes it clear that short reads/writes are not possible. The few callers that rely on the previous behavior are adjusted accordingly by hand. Signed-off-by: Alberto Faria <afaria@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-Id: <20220609152744.3891847-4-afaria@redhat.com> Reviewed-by: Hanna Reitz <hreitz@redhat.com> Signed-off-by: Hanna Reitz <hreitz@redhat.com>
This commit is contained in:
parent
32cc71def9
commit
353a5d84b2
|
@ -222,7 +222,7 @@ static inline int cloop_read_block(BlockDriverState *bs, int block_num)
|
||||||
|
|
||||||
ret = bdrv_pread(bs->file, s->offsets[block_num], bytes,
|
ret = bdrv_pread(bs->file, s->offsets[block_num], bytes,
|
||||||
s->compressed_block, 0);
|
s->compressed_block, 0);
|
||||||
if (ret != bytes) {
|
if (ret < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ static ssize_t block_crypto_read_func(QCryptoBlock *block,
|
||||||
error_setg_errno(errp, -ret, "Could not read encryption header");
|
error_setg_errno(errp, -ret, "Could not read encryption header");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
return ret;
|
return buflen;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t block_crypto_write_func(QCryptoBlock *block,
|
static ssize_t block_crypto_write_func(QCryptoBlock *block,
|
||||||
|
@ -88,7 +88,7 @@ static ssize_t block_crypto_write_func(QCryptoBlock *block,
|
||||||
error_setg_errno(errp, -ret, "Could not write encryption header");
|
error_setg_errno(errp, -ret, "Could not write encryption header");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
return ret;
|
return buflen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
10
block/dmg.c
10
block/dmg.c
|
@ -390,7 +390,7 @@ static int dmg_read_plist_xml(BlockDriverState *bs, DmgHeaderState *ds,
|
||||||
buffer = g_malloc(info_length + 1);
|
buffer = g_malloc(info_length + 1);
|
||||||
buffer[info_length] = '\0';
|
buffer[info_length] = '\0';
|
||||||
ret = bdrv_pread(bs->file, info_begin, info_length, buffer, 0);
|
ret = bdrv_pread(bs->file, info_begin, info_length, buffer, 0);
|
||||||
if (ret != info_length) {
|
if (ret < 0) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
@ -611,7 +611,7 @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
|
||||||
* inflated. */
|
* inflated. */
|
||||||
ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
|
ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
|
||||||
s->compressed_chunk, 0);
|
s->compressed_chunk, 0);
|
||||||
if (ret != s->lengths[chunk]) {
|
if (ret < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -637,7 +637,7 @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
|
||||||
* inflated. */
|
* inflated. */
|
||||||
ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
|
ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
|
||||||
s->compressed_chunk, 0);
|
s->compressed_chunk, 0);
|
||||||
if (ret != s->lengths[chunk]) {
|
if (ret < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -658,7 +658,7 @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
|
||||||
* inflated. */
|
* inflated. */
|
||||||
ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
|
ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
|
||||||
s->compressed_chunk, 0);
|
s->compressed_chunk, 0);
|
||||||
if (ret != s->lengths[chunk]) {
|
if (ret < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -674,7 +674,7 @@ static inline int dmg_read_chunk(BlockDriverState *bs, uint64_t sector_num)
|
||||||
case UDRW: /* copy */
|
case UDRW: /* copy */
|
||||||
ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
|
ret = bdrv_pread(bs->file, s->offsets[chunk], s->lengths[chunk],
|
||||||
s->uncompressed_chunk, 0);
|
s->uncompressed_chunk, 0);
|
||||||
if (ret != s->lengths[chunk]) {
|
if (ret < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
10
block/io.c
10
block/io.c
|
@ -1100,7 +1100,6 @@ int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags)
|
||||||
int bdrv_pread(BdrvChild *child, int64_t offset, int64_t bytes, void *buf,
|
int bdrv_pread(BdrvChild *child, int64_t offset, int64_t bytes, void *buf,
|
||||||
BdrvRequestFlags flags)
|
BdrvRequestFlags flags)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
|
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
|
||||||
IO_CODE();
|
IO_CODE();
|
||||||
|
|
||||||
|
@ -1108,9 +1107,7 @@ int bdrv_pread(BdrvChild *child, int64_t offset, int64_t bytes, void *buf,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = bdrv_preadv(child, offset, bytes, &qiov, flags);
|
return bdrv_preadv(child, offset, bytes, &qiov, flags);
|
||||||
|
|
||||||
return ret < 0 ? ret : bytes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return no. of bytes on success or < 0 on error. Important errors are:
|
/* Return no. of bytes on success or < 0 on error. Important errors are:
|
||||||
|
@ -1122,7 +1119,6 @@ int bdrv_pread(BdrvChild *child, int64_t offset, int64_t bytes, void *buf,
|
||||||
int bdrv_pwrite(BdrvChild *child, int64_t offset, int64_t bytes,
|
int bdrv_pwrite(BdrvChild *child, int64_t offset, int64_t bytes,
|
||||||
const void *buf, BdrvRequestFlags flags)
|
const void *buf, BdrvRequestFlags flags)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
|
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
|
||||||
IO_CODE();
|
IO_CODE();
|
||||||
|
|
||||||
|
@ -1130,9 +1126,7 @@ int bdrv_pwrite(BdrvChild *child, int64_t offset, int64_t bytes,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = bdrv_pwritev(child, offset, bytes, &qiov, flags);
|
return bdrv_pwritev(child, offset, bytes, &qiov, flags);
|
||||||
|
|
||||||
return ret < 0 ? ret : bytes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -597,7 +597,7 @@ static int decompress_cluster(BlockDriverState *bs, uint64_t cluster_offset)
|
||||||
csize &= (s->cluster_size - 1);
|
csize &= (s->cluster_size - 1);
|
||||||
BLKDBG_EVENT(bs->file, BLKDBG_READ_COMPRESSED);
|
BLKDBG_EVENT(bs->file, BLKDBG_READ_COMPRESSED);
|
||||||
ret = bdrv_pread(bs->file, coffset, csize, s->cluster_data, 0);
|
ret = bdrv_pread(bs->file, coffset, csize, s->cluster_data, 0);
|
||||||
if (ret != csize)
|
if (ret < 0)
|
||||||
return -1;
|
return -1;
|
||||||
if (decompress_buffer(s->cluster_cache, s->cluster_size,
|
if (decompress_buffer(s->cluster_cache, s->cluster_size,
|
||||||
s->cluster_data, csize) < 0) {
|
s->cluster_data, csize) < 0) {
|
||||||
|
|
|
@ -113,7 +113,7 @@ static ssize_t qcow2_crypto_hdr_read_func(QCryptoBlock *block, size_t offset,
|
||||||
error_setg_errno(errp, -ret, "Could not read encryption header");
|
error_setg_errno(errp, -ret, "Could not read encryption header");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return ret;
|
return buflen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ static ssize_t qcow2_crypto_hdr_write_func(QCryptoBlock *block, size_t offset,
|
||||||
error_setg_errno(errp, -ret, "Could not read encryption header");
|
error_setg_errno(errp, -ret, "Could not read encryption header");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return ret;
|
return buflen;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDict*
|
static QDict*
|
||||||
|
|
|
@ -87,14 +87,9 @@ static void qed_header_cpu_to_le(const QEDHeader *cpu, QEDHeader *le)
|
||||||
int qed_write_header_sync(BDRVQEDState *s)
|
int qed_write_header_sync(BDRVQEDState *s)
|
||||||
{
|
{
|
||||||
QEDHeader le;
|
QEDHeader le;
|
||||||
int ret;
|
|
||||||
|
|
||||||
qed_header_cpu_to_le(&s->header, &le);
|
qed_header_cpu_to_le(&s->header, &le);
|
||||||
ret = bdrv_pwrite(s->bs->file, 0, sizeof(le), &le, 0);
|
return bdrv_pwrite(s->bs->file, 0, sizeof(le), &le, 0);
|
||||||
if (ret != sizeof(le)) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -730,7 +730,7 @@ nonallocating_write:
|
||||||
n_sectors * SECTOR_SIZE, base, 0);
|
n_sectors * SECTOR_SIZE, base, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret < 0 ? ret : 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int coroutine_fn vdi_co_do_create(BlockdevCreateOptions *create_options,
|
static int coroutine_fn vdi_co_do_create(BlockdevCreateOptions *create_options,
|
||||||
|
|
|
@ -473,7 +473,6 @@ static int vmdk_parent_open(BlockDriverState *bs)
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
ret = 0;
|
|
||||||
|
|
||||||
p_name = strstr(desc, "parentFileNameHint");
|
p_name = strstr(desc, "parentFileNameHint");
|
||||||
if (p_name != NULL) {
|
if (p_name != NULL) {
|
||||||
|
@ -905,7 +904,7 @@ static char *vmdk_read_desc(BdrvChild *file, uint64_t desc_offset, Error **errp)
|
||||||
g_free(buf);
|
g_free(buf);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
buf[ret] = 0;
|
buf[size] = 0;
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
@ -1630,7 +1629,7 @@ static int get_cluster_offset(BlockDriverState *bs,
|
||||||
l2_size_bytes,
|
l2_size_bytes,
|
||||||
l2_table,
|
l2_table,
|
||||||
0
|
0
|
||||||
) != l2_size_bytes) {
|
) < 0) {
|
||||||
return VMDK_ERROR;
|
return VMDK_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,7 @@ static void test_sync_op_pread(BdrvChild *c)
|
||||||
|
|
||||||
/* Success */
|
/* Success */
|
||||||
ret = bdrv_pread(c, 0, sizeof(buf), buf, 0);
|
ret = bdrv_pread(c, 0, sizeof(buf), buf, 0);
|
||||||
g_assert_cmpint(ret, ==, 512);
|
g_assert_cmpint(ret, ==, 0);
|
||||||
|
|
||||||
/* Early error: Negative offset */
|
/* Early error: Negative offset */
|
||||||
ret = bdrv_pread(c, -2, sizeof(buf), buf, 0);
|
ret = bdrv_pread(c, -2, sizeof(buf), buf, 0);
|
||||||
|
@ -103,7 +103,7 @@ static void test_sync_op_pwrite(BdrvChild *c)
|
||||||
|
|
||||||
/* Success */
|
/* Success */
|
||||||
ret = bdrv_pwrite(c, 0, sizeof(buf), buf, 0);
|
ret = bdrv_pwrite(c, 0, sizeof(buf), buf, 0);
|
||||||
g_assert_cmpint(ret, ==, 512);
|
g_assert_cmpint(ret, ==, 0);
|
||||||
|
|
||||||
/* Early error: Negative offset */
|
/* Early error: Negative offset */
|
||||||
ret = bdrv_pwrite(c, -2, sizeof(buf), buf, 0);
|
ret = bdrv_pwrite(c, -2, sizeof(buf), buf, 0);
|
||||||
|
|
Loading…
Reference in New Issue