mirror of https://github.com/xqemu/xqemu.git
block: BLOCK_IO_ERROR QMP event
This commit introduces the bdrv_mon_event() function, which should be called by block subsystems (eg. IDE) when a I/O error occurs, so that an QMP event is emitted. The following information is currently provided in the event: - device name - operation (ie. "read" or "write") - action taken (eg. "stop") Event example: { "event": "BLOCK_IO_ERROR", "data": { "device": "ide0-hd1", "operation": "write", "action": "stop" }, "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
aa1db6edaf
commit
2582bfedd2
29
block.c
29
block.c
|
@ -1170,6 +1170,35 @@ int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
|
||||||
return bs->drv->bdrv_is_allocated(bs, sector_num, nb_sectors, pnum);
|
return bs->drv->bdrv_is_allocated(bs, sector_num, nb_sectors, pnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bdrv_mon_event(const BlockDriverState *bdrv,
|
||||||
|
BlockMonEventAction action, int is_read)
|
||||||
|
{
|
||||||
|
QObject *data;
|
||||||
|
const char *action_str;
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
|
case BDRV_ACTION_REPORT:
|
||||||
|
action_str = "report";
|
||||||
|
break;
|
||||||
|
case BDRV_ACTION_IGNORE:
|
||||||
|
action_str = "ignore";
|
||||||
|
break;
|
||||||
|
case BDRV_ACTION_STOP:
|
||||||
|
action_str = "stop";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
data = qobject_from_jsonf("{ 'device': %s, 'action': %s, 'operation': %s }",
|
||||||
|
bdrv->device_name,
|
||||||
|
action_str,
|
||||||
|
is_read ? "read" : "write");
|
||||||
|
monitor_protocol_event(QEVENT_BLOCK_IO_ERROR, data);
|
||||||
|
|
||||||
|
qobject_decref(data);
|
||||||
|
}
|
||||||
|
|
||||||
static void bdrv_print_dict(QObject *obj, void *opaque)
|
static void bdrv_print_dict(QObject *obj, void *opaque)
|
||||||
{
|
{
|
||||||
QDict *bs_dict;
|
QDict *bs_dict;
|
||||||
|
|
6
block.h
6
block.h
|
@ -44,6 +44,12 @@ typedef struct QEMUSnapshotInfo {
|
||||||
#define BDRV_SECTOR_SIZE (1 << BDRV_SECTOR_BITS)
|
#define BDRV_SECTOR_SIZE (1 << BDRV_SECTOR_BITS)
|
||||||
#define BDRV_SECTOR_MASK ~(BDRV_SECTOR_SIZE - 1);
|
#define BDRV_SECTOR_MASK ~(BDRV_SECTOR_SIZE - 1);
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
BDRV_ACTION_REPORT, BDRV_ACTION_IGNORE, BDRV_ACTION_STOP
|
||||||
|
} BlockMonEventAction;
|
||||||
|
|
||||||
|
void bdrv_mon_event(const BlockDriverState *bdrv,
|
||||||
|
BlockMonEventAction action, int is_read);
|
||||||
void bdrv_info_print(Monitor *mon, const QObject *data);
|
void bdrv_info_print(Monitor *mon, const QObject *data);
|
||||||
void bdrv_info(Monitor *mon, QObject **ret_data);
|
void bdrv_info(Monitor *mon, QObject **ret_data);
|
||||||
void bdrv_stats_print(Monitor *mon, const QObject *data);
|
void bdrv_stats_print(Monitor *mon, const QObject *data);
|
||||||
|
|
Loading…
Reference in New Issue