From: Gleb Natapov <gleb@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 1/4] Rename DriveInfo.onerror to on_write_error
Date: Sun, 29 Nov 2009 12:46:54 +0200 [thread overview]
Message-ID: <20091129104654.GB30150@redhat.com> (raw)
In-Reply-To: <1259324739-6805-2-git-send-email-kwolf@redhat.com>
On Fri, Nov 27, 2009 at 01:25:36PM +0100, Kevin Wolf wrote:
> Either rename variables and functions to refer to write errors (which is what
> they actually do) or introduce a parameter to distinguish reads and writes.
>
I prefer either to use two different functions or hide 0/1 parameter behind
a macro:
#define drive_get_on_write_error(a) drive_get_on_error(a, 0);
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> hw/ide/core.c | 2 +-
> hw/scsi-disk.c | 3 ++-
> hw/virtio-blk.c | 2 +-
> sysemu.h | 6 ++++--
> vl.c | 11 ++++++++---
> 5 files changed, 16 insertions(+), 8 deletions(-)
>
> diff --git a/hw/ide/core.c b/hw/ide/core.c
> index 7b1ff8f..49bbdcd 100644
> --- a/hw/ide/core.c
> +++ b/hw/ide/core.c
> @@ -473,7 +473,7 @@ void ide_dma_error(IDEState *s)
>
> static int ide_handle_write_error(IDEState *s, int error, int op)
> {
> - BlockInterfaceErrorAction action = drive_get_onerror(s->bs);
> + BlockInterfaceErrorAction action = drive_get_on_error(s->bs, 0);
>
> if (action == BLOCK_ERR_IGNORE)
> return 0;
> diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
> index a92b62f..37f0cf3 100644
> --- a/hw/scsi-disk.c
> +++ b/hw/scsi-disk.c
> @@ -220,7 +220,8 @@ static void scsi_read_data(SCSIDevice *d, uint32_t tag)
>
> static int scsi_handle_write_error(SCSIRequest *r, int error)
> {
> - BlockInterfaceErrorAction action = drive_get_onerror(r->dev->dinfo->bdrv);
> + BlockInterfaceErrorAction action =
> + drive_get_on_error(r->dev->dinfo->bdrv, 0);
>
> if (action == BLOCK_ERR_IGNORE)
> return 0;
> diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
> index 42b766f..a93d20d 100644
> --- a/hw/virtio-blk.c
> +++ b/hw/virtio-blk.c
> @@ -100,7 +100,7 @@ static void virtio_blk_req_complete(VirtIOBlockReq *req, int status)
>
> static int virtio_blk_handle_write_error(VirtIOBlockReq *req, int error)
> {
> - BlockInterfaceErrorAction action = drive_get_onerror(req->dev->bs);
> + BlockInterfaceErrorAction action = drive_get_on_error(req->dev->bs, 0);
> VirtIOBlock *s = req->dev;
>
> if (action == BLOCK_ERR_IGNORE)
> diff --git a/sysemu.h b/sysemu.h
> index b1887ef..522d9af 100644
> --- a/sysemu.h
> +++ b/sysemu.h
> @@ -172,7 +172,7 @@ typedef struct DriveInfo {
> int bus;
> int unit;
> QemuOpts *opts;
> - BlockInterfaceErrorAction onerror;
> + BlockInterfaceErrorAction on_write_error;
> char serial[BLOCK_SERIAL_STRLEN + 1];
> QTAILQ_ENTRY(DriveInfo) next;
> } DriveInfo;
> @@ -189,7 +189,9 @@ extern DriveInfo *drive_get_by_id(const char *id);
> extern int drive_get_max_bus(BlockInterfaceType type);
> extern void drive_uninit(DriveInfo *dinfo);
> extern const char *drive_get_serial(BlockDriverState *bdrv);
> -extern BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv);
> +
> +extern BlockInterfaceErrorAction drive_get_on_error(
> + BlockDriverState *bdrv, int is_read);
>
> BlockDriverState *qdev_init_bdrv(DeviceState *dev, BlockInterfaceType type);
>
> diff --git a/vl.c b/vl.c
> index ee43808..ecfecb3 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -1960,13 +1960,18 @@ const char *drive_get_serial(BlockDriverState *bdrv)
> return "\0";
> }
>
> -BlockInterfaceErrorAction drive_get_onerror(BlockDriverState *bdrv)
> +BlockInterfaceErrorAction drive_get_on_error(
> + BlockDriverState *bdrv, int is_read)
> {
> DriveInfo *dinfo;
>
> + if (is_read) {
> + return BLOCK_ERR_REPORT;
> + }
> +
> QTAILQ_FOREACH(dinfo, &drives, next) {
> if (dinfo->bdrv == bdrv)
> - return dinfo->onerror;
> + return dinfo->on_write_error;
> }
>
> return BLOCK_ERR_STOP_ENOSPC;
> @@ -2264,7 +2269,7 @@ DriveInfo *drive_init(QemuOpts *opts, void *opaque,
> dinfo->type = type;
> dinfo->bus = bus_id;
> dinfo->unit = unit_id;
> - dinfo->onerror = onerror;
> + dinfo->on_write_error = onerror;
> dinfo->opts = opts;
> if (serial)
> strncpy(dinfo->serial, serial, sizeof(serial));
> --
> 1.6.2.5
>
>
--
Gleb.
next prev parent reply other threads:[~2009-11-29 10:47 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-27 12:25 [Qemu-devel] [PATCH 0/4] rerror option for -drive Kevin Wolf
2009-11-27 12:25 ` [Qemu-devel] [PATCH 1/4] Rename DriveInfo.onerror to on_write_error Kevin Wolf
2009-11-29 10:46 ` Gleb Natapov [this message]
2009-12-03 19:55 ` Anthony Liguori
2009-12-04 8:18 ` Kevin Wolf
2009-11-27 12:25 ` [Qemu-devel] [PATCH 2/4] Introduce rerror option for drives Kevin Wolf
2009-11-27 12:25 ` [Qemu-devel] [PATCH 3/4] ide: Implement rerror option Kevin Wolf
2009-11-27 12:25 ` [Qemu-devel] [PATCH 4/4] virtio-blk: " Kevin Wolf
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=20091129104654.GB30150@redhat.com \
--to=gleb@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.