[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 3/8] block: Support to keep track of I/O status
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 3/8] block: Support to keep track of I/O status |
Date: |
Tue, 5 Jul 2011 15:17:46 -0300 |
This commit adds support to the BlockDriverState type to keep track
of the last I/O status. That is, at every I/O operation we update
a status field in the BlockDriverState instance. Valid statuses are:
OK, FAILED and ENOSPC.
ENOSPC is distinguished from FAILED because an management application
can use it to implement thin-provisioning.
This feature has to be explicit enabled by buses/devices supporting it.
Signed-off-by: Luiz Capitulino <address@hidden>
---
block.c | 18 ++++++++++++++++++
block.h | 7 +++++++
block_int.h | 2 ++
3 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/block.c b/block.c
index 24a25d5..cc0a34e 100644
--- a/block.c
+++ b/block.c
@@ -195,6 +195,7 @@ BlockDriverState *bdrv_new(const char *device_name)
if (device_name[0] != '\0') {
QTAILQ_INSERT_TAIL(&bdrv_states, bs, list);
}
+ bs->iostatus_enabled = false;
return bs;
}
@@ -2876,6 +2877,23 @@ int bdrv_in_use(BlockDriverState *bs)
return bs->in_use;
}
+void bdrv_enable_iostatus(BlockDriverState *bs)
+{
+ bs->iostatus_enabled = true;
+}
+
+void bdrv_iostatus_update(BlockDriverState *bs, int error)
+{
+ error = abs(error);
+
+ if (!error) {
+ bs->iostatus = BDRV_IOS_OK;
+ } else {
+ bs->iostatus = (error == ENOSPC) ? BDRV_IOS_ENOSPC :
+ BDRV_IOS_FAILED;
+ }
+}
+
int bdrv_img_create(const char *filename, const char *fmt,
const char *base_filename, const char *base_fmt,
char *options, uint64_t img_size, int flags)
diff --git a/block.h b/block.h
index 859d1d9..0dca1bb 100644
--- a/block.h
+++ b/block.h
@@ -50,6 +50,13 @@ typedef enum {
BDRV_ACTION_REPORT, BDRV_ACTION_IGNORE, BDRV_ACTION_STOP
} BlockMonEventAction;
+typedef enum {
+ BDRV_IOS_OK, BDRV_IOS_FAILED, BDRV_IOS_ENOSPC
+} BlockIOStatus;
+
+void bdrv_iostatus_update(BlockDriverState *bs, int error);
+void bdrv_enable_iostatus(BlockDriverState *bs);
+void bdrv_enable_io_status(BlockDriverState *bs);
void bdrv_mon_event(const BlockDriverState *bdrv,
BlockMonEventAction action, int is_read);
void bdrv_info_print(Monitor *mon, const QObject *data);
diff --git a/block_int.h b/block_int.h
index 1e265d2..09f038d 100644
--- a/block_int.h
+++ b/block_int.h
@@ -195,6 +195,8 @@ struct BlockDriverState {
drivers. They are not used by the block driver */
int cyls, heads, secs, translation;
BlockErrorAction on_read_error, on_write_error;
+ bool iostatus_enabled;
+ BlockIOStatus iostatus;
char device_name[32];
unsigned long *dirty_bitmap;
int64_t dirty_count;
--
1.7.6.131.g99019
- Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type, (continued)
Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type, Markus Armbruster, 2011/07/12
- Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type, Luiz Capitulino, 2011/07/12
- Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type, Kevin Wolf, 2011/07/12
- Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type, Luiz Capitulino, 2011/07/12
- Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type, Luiz Capitulino, 2011/07/12
- Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type, Kevin Wolf, 2011/07/12
- Re: [Qemu-devel] [PATCH 1/8] Introduce the VMStatus type, Luiz Capitulino, 2011/07/12
[Qemu-devel] [PATCH 2/8] QMP: query-status: Introduce 'status' key, Luiz Capitulino, 2011/07/05
[Qemu-devel] [PATCH 3/8] block: Support to keep track of I/O status,
Luiz Capitulino <=
Re: [Qemu-devel] [PATCH 3/8] block: Support to keep track of I/O status, Kevin Wolf, 2011/07/12
[Qemu-devel] [PATCH 6/8] scsi: Support I/O status, Luiz Capitulino, 2011/07/05
[Qemu-devel] [PATCH 4/8] ide: Support I/O status, Luiz Capitulino, 2011/07/05
[Qemu-devel] [PATCH 7/8] QMP: query-status: Add 'io-status' key, Luiz Capitulino, 2011/07/05