From: Alberto Faria <afaria@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Andrew Jeffery" <andrew@aj.id.au>,
"Peter Maydell" <peter.maydell@linaro.org>,
qemu-block@nongnu.org, "Palmer Dabbelt" <palmer@dabbelt.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
qemu-ppc@nongnu.org, "Eric Blake" <eblake@redhat.com>,
"Vladimir Sementsov-Ogievskiy" <v.sementsov-og@mail.ru>,
"Hanna Reitz" <hreitz@redhat.com>, "John Snow" <jsnow@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Jeff Cody" <codyprime@gmail.com>,
qemu-riscv@nongnu.org, "Cédric Le Goater" <clg@kaod.org>,
"Joel Stanley" <joel@jms.id.au>, "Stefan Weil" <sw@weilnetz.de>,
"Laurent Vivier" <laurent@vivier.eu>,
"Denis V. Lunev" <den@openvz.org>,
"Juan Quintela" <quintela@redhat.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
"Niek Linnenbank" <nieklinnenbank@gmail.com>,
"Greg Kurz" <groug@kaod.org>,
"Daniel Henrique Barboza" <danielhb413@gmail.com>,
"Kevin Wolf" <kwolf@redhat.com>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
qemu-arm@nongnu.org, "Fam Zheng" <fam@euphon.net>,
"Alistair Francis" <alistair@alistair23.me>,
"Beniamino Galvani" <b.galvani@gmail.com>,
"Bin Meng" <bin.meng@windriver.com>,
"David Gibson" <david@gibson.dropbear.id.au>,
"Alberto Faria" <afaria@redhat.com>
Subject: [PATCH 01/18] block: Make blk_{pread,pwrite}() return 0 on success
Date: Tue, 17 May 2022 12:35:07 +0100 [thread overview]
Message-ID: <20220517113524.197910-2-afaria@redhat.com> (raw)
In-Reply-To: <20220517113524.197910-1-afaria@redhat.com>
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.
Signed-off-by: Alberto Faria <afaria@redhat.com>
---
block.c | 8 +++++---
block/block-backend.c | 7 ++-----
block/qcow.c | 6 +++---
hw/block/m25p80.c | 2 +-
hw/misc/mac_via.c | 2 +-
hw/misc/sifive_u_otp.c | 2 +-
hw/nvram/eeprom_at24c.c | 4 ++--
hw/nvram/spapr_nvram.c | 12 ++++++------
hw/ppc/pnv_pnor.c | 2 +-
qemu-img.c | 17 +++++++----------
qemu-io-cmds.c | 18 ++++++++++++------
tests/unit/test-block-iothread.c | 4 ++--
12 files changed, 43 insertions(+), 41 deletions(-)
diff --git a/block.c b/block.c
index 2c00dddd80..0fd830e2e2 100644
--- a/block.c
+++ b/block.c
@@ -1045,14 +1045,16 @@ static int find_image_format(BlockBackend *file, const char *filename,
return ret;
}
- drv = bdrv_probe_all(buf, ret, filename);
+ drv = bdrv_probe_all(buf, sizeof(buf), filename);
if (!drv) {
error_setg(errp, "Could not determine image format: No compatible "
"driver found");
- ret = -ENOENT;
+ *pdrv = NULL;
+ return -ENOENT;
}
+
*pdrv = drv;
- return ret;
+ return 0;
}
/**
diff --git a/block/block-backend.c b/block/block-backend.c
index e0e1aff4b1..c1c367bf9e 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -1577,19 +1577,16 @@ int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes)
ret = blk_do_preadv(blk, offset, bytes, &qiov, 0);
blk_dec_in_flight(blk);
- return ret < 0 ? ret : bytes;
+ return ret;
}
int blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int bytes,
BdrvRequestFlags flags)
{
- int ret;
QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
IO_OR_GS_CODE();
- ret = blk_pwritev_part(blk, offset, bytes, &qiov, 0, flags);
-
- return ret < 0 ? ret : bytes;
+ return blk_pwritev_part(blk, offset, bytes, &qiov, 0, flags);
}
int64_t blk_getlength(BlockBackend *blk)
diff --git a/block/qcow.c b/block/qcow.c
index c646d6b16d..25a43353c1 100644
--- a/block/qcow.c
+++ b/block/qcow.c
@@ -891,14 +891,14 @@ static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts,
/* write all the data */
ret = blk_pwrite(qcow_blk, 0, &header, sizeof(header), 0);
- if (ret != sizeof(header)) {
+ if (ret < 0) {
goto exit;
}
if (qcow_opts->has_backing_file) {
ret = blk_pwrite(qcow_blk, sizeof(header),
qcow_opts->backing_file, backing_filename_len, 0);
- if (ret != backing_filename_len) {
+ if (ret < 0) {
goto exit;
}
}
@@ -908,7 +908,7 @@ static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts,
i++) {
ret = blk_pwrite(qcow_blk, header_size + BDRV_SECTOR_SIZE * i,
tmp, BDRV_SECTOR_SIZE, 0);
- if (ret != BDRV_SECTOR_SIZE) {
+ if (ret < 0) {
g_free(tmp);
goto exit;
}
diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
index 7d3d8b12e0..bd58c07bb6 100644
--- a/hw/block/m25p80.c
+++ b/hw/block/m25p80.c
@@ -1506,7 +1506,7 @@ static void m25p80_realize(SSIPeripheral *ss, Error **errp)
trace_m25p80_binding(s);
s->storage = blk_blockalign(s->blk, s->size);
- if (blk_pread(s->blk, 0, s->storage, s->size) != s->size) {
+ if (blk_pread(s->blk, 0, s->storage, s->size) < 0) {
error_setg(errp, "failed to read the initial flash content");
return;
}
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index 525e38ce93..0515d1818e 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -1030,7 +1030,7 @@ static void mos6522_q800_via1_realize(DeviceState *dev, Error **errp)
}
len = blk_pread(v1s->blk, 0, v1s->PRAM, sizeof(v1s->PRAM));
- if (len != sizeof(v1s->PRAM)) {
+ if (len < 0) {
error_setg(errp, "can't read PRAM contents");
return;
}
diff --git a/hw/misc/sifive_u_otp.c b/hw/misc/sifive_u_otp.c
index 6d5f84e6c2..535acde08b 100644
--- a/hw/misc/sifive_u_otp.c
+++ b/hw/misc/sifive_u_otp.c
@@ -240,7 +240,7 @@ static void sifive_u_otp_realize(DeviceState *dev, Error **errp)
return;
}
- if (blk_pread(s->blk, 0, s->fuse, filesize) != filesize) {
+ if (blk_pread(s->blk, 0, s->fuse, filesize) < 0) {
error_setg(errp, "failed to read the initial flash content");
return;
}
diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c
index 01a3093600..84acd71f5a 100644
--- a/hw/nvram/eeprom_at24c.c
+++ b/hw/nvram/eeprom_at24c.c
@@ -65,7 +65,7 @@ int at24c_eeprom_event(I2CSlave *s, enum i2c_event event)
DPRINTK("clear\n");
if (ee->blk && ee->changed) {
int len = blk_pwrite(ee->blk, 0, ee->mem, ee->rsize, 0);
- if (len != ee->rsize) {
+ if (len < 0) {
ERR(TYPE_AT24C_EE
" : failed to write backing file\n");
}
@@ -165,7 +165,7 @@ void at24c_eeprom_reset(DeviceState *state)
if (ee->blk) {
int len = blk_pread(ee->blk, 0, ee->mem, ee->rsize);
- if (len != ee->rsize) {
+ if (len < 0) {
ERR(TYPE_AT24C_EE
" : Failed initial sync with backing file\n");
}
diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c
index 18b43be7f6..6000b945c3 100644
--- a/hw/nvram/spapr_nvram.c
+++ b/hw/nvram/spapr_nvram.c
@@ -103,7 +103,7 @@ static void rtas_nvram_store(PowerPCCPU *cpu, SpaprMachineState *spapr,
{
SpaprNvram *nvram = spapr->nvram;
hwaddr offset, buffer, len;
- int alen;
+ int ret;
void *membuf;
if ((nargs != 3) || (nret != 2)) {
@@ -128,9 +128,9 @@ static void rtas_nvram_store(PowerPCCPU *cpu, SpaprMachineState *spapr,
membuf = cpu_physical_memory_map(buffer, &len, false);
- alen = len;
+ ret = 0;
if (nvram->blk) {
- alen = blk_pwrite(nvram->blk, offset, membuf, len, 0);
+ ret = blk_pwrite(nvram->blk, offset, membuf, len, 0);
}
assert(nvram->buf);
@@ -138,8 +138,8 @@ static void rtas_nvram_store(PowerPCCPU *cpu, SpaprMachineState *spapr,
cpu_physical_memory_unmap(membuf, len, 0, len);
- rtas_st(rets, 0, (alen < len) ? RTAS_OUT_HW_ERROR : RTAS_OUT_SUCCESS);
- rtas_st(rets, 1, (alen < 0) ? 0 : alen);
+ rtas_st(rets, 0, (ret < 0) ? RTAS_OUT_HW_ERROR : RTAS_OUT_SUCCESS);
+ rtas_st(rets, 1, (ret < 0) ? 0 : len);
}
static void spapr_nvram_realize(SpaprVioDevice *dev, Error **errp)
@@ -181,7 +181,7 @@ static void spapr_nvram_realize(SpaprVioDevice *dev, Error **errp)
if (nvram->blk) {
int alen = blk_pread(nvram->blk, 0, nvram->buf, nvram->size);
- if (alen != nvram->size) {
+ if (alen < 0) {
error_setg(errp, "can't read spapr-nvram contents");
return;
}
diff --git a/hw/ppc/pnv_pnor.c b/hw/ppc/pnv_pnor.c
index 83ecccca28..1fb748afef 100644
--- a/hw/ppc/pnv_pnor.c
+++ b/hw/ppc/pnv_pnor.c
@@ -99,7 +99,7 @@ static void pnv_pnor_realize(DeviceState *dev, Error **errp)
s->storage = blk_blockalign(s->blk, s->size);
- if (blk_pread(s->blk, 0, s->storage, s->size) != s->size) {
+ if (blk_pread(s->blk, 0, s->storage, s->size) < 0) {
error_setg(errp, "failed to read the initial flash content");
return;
}
diff --git a/qemu-img.c b/qemu-img.c
index 4cf4d2423d..9d98ef63ac 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -5120,30 +5120,27 @@ static int img_dd(int argc, char **argv)
in.buf = g_new(uint8_t, in.bsz);
for (out_pos = 0; in_pos < size; block_count++) {
- int in_ret, out_ret;
+ int bytes, in_ret, out_ret;
- if (in_pos + in.bsz > size) {
- in_ret = blk_pread(blk1, in_pos, in.buf, size - in_pos);
- } else {
- in_ret = blk_pread(blk1, in_pos, in.buf, in.bsz);
- }
+ bytes = (in_pos + in.bsz > size) ? size - in_pos : in.bsz;
+
+ in_ret = blk_pread(blk1, in_pos, in.buf, bytes);
if (in_ret < 0) {
error_report("error while reading from input image file: %s",
strerror(-in_ret));
ret = -1;
goto out;
}
- in_pos += in_ret;
-
- out_ret = blk_pwrite(blk2, out_pos, in.buf, in_ret, 0);
+ in_pos += bytes;
+ out_ret = blk_pwrite(blk2, out_pos, in.buf, bytes, 0);
if (out_ret < 0) {
error_report("error while writing to output image file: %s",
strerror(-out_ret));
ret = -1;
goto out;
}
- out_pos += out_ret;
+ out_pos += bytes;
}
out:
diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
index 2f0d8ac25a..443f22c732 100644
--- a/qemu-io-cmds.c
+++ b/qemu-io-cmds.c
@@ -541,28 +541,34 @@ fail:
static int do_pread(BlockBackend *blk, char *buf, int64_t offset,
int64_t bytes, int64_t *total)
{
+ int ret;
+
if (bytes > INT_MAX) {
return -ERANGE;
}
- *total = blk_pread(blk, offset, (uint8_t *)buf, bytes);
- if (*total < 0) {
- return *total;
+ ret = blk_pread(blk, offset, (uint8_t *)buf, bytes);
+ if (ret < 0) {
+ return ret;
}
+ *total = bytes;
return 1;
}
static int do_pwrite(BlockBackend *blk, char *buf, int64_t offset,
int64_t bytes, int flags, int64_t *total)
{
+ int ret;
+
if (bytes > INT_MAX) {
return -ERANGE;
}
- *total = blk_pwrite(blk, offset, (uint8_t *)buf, bytes, flags);
- if (*total < 0) {
- return *total;
+ ret = blk_pwrite(blk, offset, (uint8_t *)buf, bytes, flags);
+ if (ret < 0) {
+ return ret;
}
+ *total = bytes;
return 1;
}
diff --git a/tests/unit/test-block-iothread.c b/tests/unit/test-block-iothread.c
index a5c163af7e..3c1a3f64a2 100644
--- a/tests/unit/test-block-iothread.c
+++ b/tests/unit/test-block-iothread.c
@@ -117,7 +117,7 @@ static void test_sync_op_blk_pread(BlockBackend *blk)
/* Success */
ret = blk_pread(blk, 0, buf, sizeof(buf));
- g_assert_cmpint(ret, ==, 512);
+ g_assert_cmpint(ret, ==, 0);
/* Early error: Negative offset */
ret = blk_pread(blk, -2, buf, sizeof(buf));
@@ -131,7 +131,7 @@ static void test_sync_op_blk_pwrite(BlockBackend *blk)
/* Success */
ret = blk_pwrite(blk, 0, buf, sizeof(buf), 0);
- g_assert_cmpint(ret, ==, 512);
+ g_assert_cmpint(ret, ==, 0);
/* Early error: Negative offset */
ret = blk_pwrite(blk, -2, buf, sizeof(buf), 0);
--
2.35.3
next prev parent reply other threads:[~2022-05-17 12:44 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-17 11:35 [PATCH 00/18] Make block-backend-io.h API more consistent Alberto Faria
2022-05-17 11:35 ` Alberto Faria [this message]
2022-05-17 14:03 ` [PATCH 01/18] block: Make blk_{pread,pwrite}() return 0 on success Greg Kurz
2022-05-18 12:57 ` Eric Blake
2022-07-04 13:52 ` Hanna Reitz
2022-07-04 16:20 ` [PATCH 01/18] block: Make blk_{pread, pwrite}() " Alberto Faria
2022-05-17 11:35 ` [PATCH 02/18] block: Add a 'flags' param to blk_pread() Alberto Faria
2022-05-17 14:19 ` Paolo Bonzini
2022-05-17 16:26 ` Greg Kurz
2022-07-04 14:04 ` Hanna Reitz
2022-05-17 11:37 ` [PATCH 03/18] block: Change blk_{pread,pwrite}() param order Alberto Faria
2022-05-18 14:05 ` Eric Blake
2022-07-04 15:21 ` Hanna Reitz
2022-05-17 11:37 ` [PATCH 04/18] block: Make 'bytes' param of blk_{pread, pwrite}() an int64_t Alberto Faria
2022-05-17 14:20 ` Paolo Bonzini
2022-07-04 15:24 ` [PATCH 04/18] block: Make 'bytes' param of blk_{pread,pwrite}() " Hanna Reitz
2022-05-17 11:38 ` [PATCH 05/18] block: Make blk_co_pwrite() take a const buffer Alberto Faria
2022-05-17 14:20 ` Paolo Bonzini
2022-07-04 15:25 ` Hanna Reitz
2022-05-17 11:38 ` [PATCH 06/18] block: Implement blk_{pread, pwrite}() using generated_co_wrapper Alberto Faria
2022-05-17 14:22 ` Paolo Bonzini
2022-05-18 13:34 ` Emanuele Giuseppe Esposito
2022-05-18 14:02 ` Paolo Bonzini
2022-05-19 13:25 ` Alberto Faria
2022-07-04 15:30 ` [PATCH 06/18] block: Implement blk_{pread,pwrite}() " Hanna Reitz
2022-05-17 11:38 ` [PATCH 07/18] block: Add blk_{preadv,pwritev}() Alberto Faria
2022-05-17 14:35 ` Paolo Bonzini
2022-07-05 7:55 ` Hanna Reitz
2022-05-17 11:38 ` [PATCH 08/18] block: Add blk_[co_]preadv_part() Alberto Faria
2022-05-17 14:30 ` Paolo Bonzini
2022-07-05 8:15 ` Hanna Reitz
2022-05-17 11:38 ` [PATCH 09/18] block: Export blk_pwritev_part() in block-backend-io.h Alberto Faria
2022-05-17 14:30 ` Paolo Bonzini
2022-07-05 8:24 ` Hanna Reitz
2022-05-17 11:38 ` [PATCH 10/18] block: Change blk_pwrite_compressed() param order Alberto Faria
2022-05-17 14:25 ` Paolo Bonzini
2022-07-05 8:29 ` Hanna Reitz
2022-05-17 11:38 ` [PATCH 11/18] block: Add blk_co_pwrite_compressed() Alberto Faria
2022-05-17 14:26 ` Paolo Bonzini
2022-07-05 8:45 ` Hanna Reitz
2022-05-17 11:39 ` [PATCH 12/18] block: Implement blk_pwrite_zeroes() using generated_co_wrapper Alberto Faria
2022-05-17 14:26 ` Paolo Bonzini
2022-07-05 8:48 ` Hanna Reitz
2022-05-17 11:39 ` [PATCH 13/18] block: Implement blk_pdiscard() " Alberto Faria
2022-05-17 14:27 ` Paolo Bonzini
2022-07-05 8:51 ` Hanna Reitz
2022-05-17 11:39 ` [PATCH 14/18] block: Implement blk_flush() " Alberto Faria
2022-05-17 14:27 ` Paolo Bonzini
2022-07-05 8:56 ` Hanna Reitz
2022-05-17 11:39 ` [PATCH 15/18] block: Add blk_co_ioctl() Alberto Faria
2022-05-17 14:28 ` Paolo Bonzini
2022-07-05 9:02 ` Hanna Reitz
2022-05-17 11:39 ` [PATCH 16/18] block: Add blk_co_truncate() Alberto Faria
2022-05-17 14:28 ` Paolo Bonzini
2022-07-05 9:08 ` Hanna Reitz
2022-05-17 11:39 ` [PATCH 17/18] block: Reorganize some declarations in block-backend-io.h Alberto Faria
2022-05-17 14:29 ` Paolo Bonzini
2022-07-05 9:18 ` Hanna Reitz
2022-07-05 15:26 ` Alberto Faria
2022-05-17 11:39 ` [PATCH 18/18] block: Remove remaining unused symbols in coroutines.h Alberto Faria
2022-05-17 14:29 ` Paolo Bonzini
2022-07-05 9:21 ` Hanna Reitz
2022-07-02 14:12 ` [PATCH 00/18] Make block-backend-io.h API more consistent Paolo Bonzini
2022-07-03 22:22 ` Alberto Faria
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220517113524.197910-2-afaria@redhat.com \
--to=afaria@redhat.com \
--cc=alistair@alistair23.me \
--cc=andrew@aj.id.au \
--cc=b.galvani@gmail.com \
--cc=bin.meng@windriver.com \
--cc=clg@kaod.org \
--cc=codyprime@gmail.com \
--cc=danielhb413@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=den@openvz.org \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=edgar.iglesias@gmail.com \
--cc=f4bug@amsat.org \
--cc=fam@euphon.net \
--cc=groug@kaod.org \
--cc=hreitz@redhat.com \
--cc=joel@jms.id.au \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=laurent@vivier.eu \
--cc=nieklinnenbank@gmail.com \
--cc=palmer@dabbelt.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=quintela@redhat.com \
--cc=stefanha@redhat.com \
--cc=sw@weilnetz.de \
--cc=v.sementsov-og@mail.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).