|
|
34b321 |
From 2653e21a25d8fb99479337c785e81b07f755acda Mon Sep 17 00:00:00 2001
|
|
|
34b321 |
From: John Snow <jsnow@redhat.com>
|
|
|
34b321 |
Date: Mon, 23 Nov 2015 17:38:24 +0100
|
|
|
34b321 |
Subject: [PATCH 05/27] qemu-io: Don't use global bs in command implementations
|
|
|
34b321 |
|
|
|
34b321 |
RH-Author: John Snow <jsnow@redhat.com>
|
|
|
34b321 |
Message-id: <1448300320-7772-6-git-send-email-jsnow@redhat.com>
|
|
|
34b321 |
Patchwork-id: 68433
|
|
|
34b321 |
O-Subject: [RHEL-7.3 qemu-kvm PATCH v2 05/21] qemu-io: Don't use global bs in command implementations
|
|
|
34b321 |
Bugzilla: 1272523
|
|
|
34b321 |
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
|
34b321 |
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
|
|
|
34b321 |
RH-Acked-by: Max Reitz <mreitz@redhat.com>
|
|
|
34b321 |
|
|
|
34b321 |
From: Kevin Wolf <kwolf@redhat.com>
|
|
|
34b321 |
|
|
|
34b321 |
Pass in the BlockDriverState to the command handlers instead of using
|
|
|
34b321 |
the global variable. This is an important step to make the commands
|
|
|
34b321 |
usable outside of qemu-io.
|
|
|
34b321 |
|
|
|
34b321 |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
34b321 |
Reviewed-by: Eric Blake <eblake@redhat.com>
|
|
|
34b321 |
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
34b321 |
(cherry picked from commit 734c3b85cb72d264ad2b38a87f30304e05de2cb1)
|
|
|
34b321 |
Signed-off-by: John Snow <jsnow@redhat.com>
|
|
|
34b321 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
34b321 |
|
|
|
34b321 |
Conflicts:
|
|
|
34b321 |
qemu-io.c
|
|
|
34b321 |
Number of arguments to bdrv_co_write_zeroes
|
|
|
34b321 |
bdrv_unref used downstream instead of bdrv_delete
|
|
|
34b321 |
downstream, local_err used for bdrv_open
|
|
|
34b321 |
downstream, error_abort used for bdrv_new
|
|
|
34b321 |
map_is_allocated was never backported from a00e81e98f71
|
|
|
34b321 |
sleep_f was backported, adjust its signature
|
|
|
34b321 |
|
|
|
34b321 |
Signed-off-by: John Snow <jsnow@redhat.com>
|
|
|
34b321 |
---
|
|
|
34b321 |
cmd.c | 6 ++-
|
|
|
34b321 |
cmd.h | 8 ++-
|
|
|
34b321 |
qemu-io.c | 164 ++++++++++++++++++++++++++++++++++----------------------------
|
|
|
34b321 |
3 files changed, 99 insertions(+), 79 deletions(-)
|
|
|
34b321 |
|
|
|
34b321 |
diff --git a/cmd.c b/cmd.c
|
|
|
34b321 |
index 214c6f7..d501aab 100644
|
|
|
34b321 |
--- a/cmd.c
|
|
|
34b321 |
+++ b/cmd.c
|
|
|
34b321 |
@@ -57,7 +57,7 @@ check_command(
|
|
|
34b321 |
const cmdinfo_t *ci)
|
|
|
34b321 |
{
|
|
|
34b321 |
if (check_func)
|
|
|
34b321 |
- return check_func(ci);
|
|
|
34b321 |
+ return check_func(qemuio_bs, ci);
|
|
|
34b321 |
return 1;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
@@ -103,7 +103,7 @@ command(
|
|
|
34b321 |
return 0;
|
|
|
34b321 |
}
|
|
|
34b321 |
optind = 0;
|
|
|
34b321 |
- return ct->cfunc(argc, argv);
|
|
|
34b321 |
+ return ct->cfunc(qemuio_bs, argc, argv);
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
const cmdinfo_t *
|
|
|
34b321 |
@@ -452,6 +452,7 @@ static cmdinfo_t quit_cmd;
|
|
|
34b321 |
/* ARGSUSED */
|
|
|
34b321 |
static int
|
|
|
34b321 |
quit_f(
|
|
|
34b321 |
+ BlockDriverState *bs,
|
|
|
34b321 |
int argc,
|
|
|
34b321 |
char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
@@ -490,6 +491,7 @@ help_all(void)
|
|
|
34b321 |
|
|
|
34b321 |
static int
|
|
|
34b321 |
help_f(
|
|
|
34b321 |
+ BlockDriverState *bs,
|
|
|
34b321 |
int argc,
|
|
|
34b321 |
char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
diff --git a/cmd.h b/cmd.h
|
|
|
34b321 |
index 4dcfe88..ccf6336 100644
|
|
|
34b321 |
--- a/cmd.h
|
|
|
34b321 |
+++ b/cmd.h
|
|
|
34b321 |
@@ -17,9 +17,13 @@
|
|
|
34b321 |
#ifndef __COMMAND_H__
|
|
|
34b321 |
#define __COMMAND_H__
|
|
|
34b321 |
|
|
|
34b321 |
+#include "qemu-common.h"
|
|
|
34b321 |
+
|
|
|
34b321 |
#define CMD_FLAG_GLOBAL ((int)0x80000000) /* don't iterate "args" */
|
|
|
34b321 |
|
|
|
34b321 |
-typedef int (*cfunc_t)(int argc, char **argv);
|
|
|
34b321 |
+extern BlockDriverState *qemuio_bs;
|
|
|
34b321 |
+
|
|
|
34b321 |
+typedef int (*cfunc_t)(BlockDriverState *bs, int argc, char **argv);
|
|
|
34b321 |
typedef void (*helpfunc_t)(void);
|
|
|
34b321 |
|
|
|
34b321 |
typedef struct cmdinfo {
|
|
|
34b321 |
@@ -41,7 +45,7 @@ extern int ncmds;
|
|
|
34b321 |
void help_init(void);
|
|
|
34b321 |
void quit_init(void);
|
|
|
34b321 |
|
|
|
34b321 |
-typedef int (*checkfunc_t)(const cmdinfo_t *ci);
|
|
|
34b321 |
+typedef int (*checkfunc_t)(BlockDriverState *bs, const cmdinfo_t *ci);
|
|
|
34b321 |
|
|
|
34b321 |
void add_command(const cmdinfo_t *ci);
|
|
|
34b321 |
void add_user_command(char *optarg);
|
|
|
34b321 |
diff --git a/qemu-io.c b/qemu-io.c
|
|
|
34b321 |
index e4fa2fc..c3cc4f3 100644
|
|
|
34b321 |
--- a/qemu-io.c
|
|
|
34b321 |
+++ b/qemu-io.c
|
|
|
34b321 |
@@ -29,8 +29,8 @@
|
|
|
34b321 |
#define CMD_NOFILE_OK 0x01
|
|
|
34b321 |
|
|
|
34b321 |
char *progname;
|
|
|
34b321 |
-static BlockDriverState *bs;
|
|
|
34b321 |
|
|
|
34b321 |
+BlockDriverState *qemuio_bs;
|
|
|
34b321 |
static int misalign;
|
|
|
34b321 |
|
|
|
34b321 |
static int64_t cvtnum(const char *s)
|
|
|
34b321 |
@@ -67,7 +67,7 @@ static int parse_pattern(const char *arg)
|
|
|
34b321 |
*/
|
|
|
34b321 |
|
|
|
34b321 |
#define MISALIGN_OFFSET 16
|
|
|
34b321 |
-static void *qemu_io_alloc(size_t len, int pattern)
|
|
|
34b321 |
+static void *qemu_io_alloc(BlockDriverState *bs, size_t len, int pattern)
|
|
|
34b321 |
{
|
|
|
34b321 |
void *buf;
|
|
|
34b321 |
|
|
|
34b321 |
@@ -140,7 +140,8 @@ static void print_report(const char *op, struct timeval *t, int64_t offset,
|
|
|
34b321 |
* vector matching it.
|
|
|
34b321 |
*/
|
|
|
34b321 |
static void *
|
|
|
34b321 |
-create_iovec(QEMUIOVector *qiov, char **argv, int nr_iov, int pattern)
|
|
|
34b321 |
+create_iovec(BlockDriverState *bs, QEMUIOVector *qiov, char **argv, int nr_iov,
|
|
|
34b321 |
+ int pattern)
|
|
|
34b321 |
{
|
|
|
34b321 |
size_t *sizes = g_new0(size_t, nr_iov);
|
|
|
34b321 |
size_t count = 0;
|
|
|
34b321 |
@@ -176,7 +177,7 @@ create_iovec(QEMUIOVector *qiov, char **argv, int nr_iov, int pattern)
|
|
|
34b321 |
|
|
|
34b321 |
qemu_iovec_init(qiov, nr_iov);
|
|
|
34b321 |
|
|
|
34b321 |
- buf = p = qemu_io_alloc(count, pattern);
|
|
|
34b321 |
+ buf = p = qemu_io_alloc(bs, count, pattern);
|
|
|
34b321 |
|
|
|
34b321 |
for (i = 0; i < nr_iov; i++) {
|
|
|
34b321 |
qemu_iovec_add(qiov, p, sizes[i]);
|
|
|
34b321 |
@@ -188,7 +189,8 @@ fail:
|
|
|
34b321 |
return buf;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int do_read(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
+static int do_read(BlockDriverState *bs, char *buf, int64_t offset, int count,
|
|
|
34b321 |
+ int *total)
|
|
|
34b321 |
{
|
|
|
34b321 |
int ret;
|
|
|
34b321 |
|
|
|
34b321 |
@@ -200,7 +202,8 @@ static int do_read(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
return 1;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int do_write(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
+static int do_write(BlockDriverState *bs, char *buf, int64_t offset, int count,
|
|
|
34b321 |
+ int *total)
|
|
|
34b321 |
{
|
|
|
34b321 |
int ret;
|
|
|
34b321 |
|
|
|
34b321 |
@@ -212,7 +215,8 @@ static int do_write(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
return 1;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int do_pread(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
+static int do_pread(BlockDriverState *bs, char *buf, int64_t offset, int count,
|
|
|
34b321 |
+ int *total)
|
|
|
34b321 |
{
|
|
|
34b321 |
*total = bdrv_pread(bs, offset, (uint8_t *)buf, count);
|
|
|
34b321 |
if (*total < 0) {
|
|
|
34b321 |
@@ -221,7 +225,8 @@ static int do_pread(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
return 1;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int do_pwrite(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
+static int do_pwrite(BlockDriverState *bs, char *buf, int64_t offset, int count,
|
|
|
34b321 |
+ int *total)
|
|
|
34b321 |
{
|
|
|
34b321 |
*total = bdrv_pwrite(bs, offset, (uint8_t *)buf, count);
|
|
|
34b321 |
if (*total < 0) {
|
|
|
34b321 |
@@ -231,6 +236,7 @@ static int do_pwrite(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
typedef struct {
|
|
|
34b321 |
+ BlockDriverState *bs;
|
|
|
34b321 |
int64_t offset;
|
|
|
34b321 |
int count;
|
|
|
34b321 |
int *total;
|
|
|
34b321 |
@@ -242,7 +248,7 @@ static void coroutine_fn co_write_zeroes_entry(void *opaque)
|
|
|
34b321 |
{
|
|
|
34b321 |
CoWriteZeroes *data = opaque;
|
|
|
34b321 |
|
|
|
34b321 |
- data->ret = bdrv_co_write_zeroes(bs, data->offset / BDRV_SECTOR_SIZE,
|
|
|
34b321 |
+ data->ret = bdrv_co_write_zeroes(data->bs, data->offset / BDRV_SECTOR_SIZE,
|
|
|
34b321 |
data->count / BDRV_SECTOR_SIZE, 0);
|
|
|
34b321 |
data->done = true;
|
|
|
34b321 |
if (data->ret < 0) {
|
|
|
34b321 |
@@ -253,10 +259,12 @@ static void coroutine_fn co_write_zeroes_entry(void *opaque)
|
|
|
34b321 |
*data->total = data->count;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int do_co_write_zeroes(int64_t offset, int count, int *total)
|
|
|
34b321 |
+static int do_co_write_zeroes(BlockDriverState *bs, int64_t offset, int count,
|
|
|
34b321 |
+ int *total)
|
|
|
34b321 |
{
|
|
|
34b321 |
Coroutine *co;
|
|
|
34b321 |
CoWriteZeroes data = {
|
|
|
34b321 |
+ .bs = bs,
|
|
|
34b321 |
.offset = offset,
|
|
|
34b321 |
.count = count,
|
|
|
34b321 |
.total = total,
|
|
|
34b321 |
@@ -275,7 +283,8 @@ static int do_co_write_zeroes(int64_t offset, int count, int *total)
|
|
|
34b321 |
}
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int do_write_compressed(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
+static int do_write_compressed(BlockDriverState *bs, char *buf, int64_t offset,
|
|
|
34b321 |
+ int count, int *total)
|
|
|
34b321 |
{
|
|
|
34b321 |
int ret;
|
|
|
34b321 |
|
|
|
34b321 |
@@ -287,7 +296,8 @@ static int do_write_compressed(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
return 1;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int do_load_vmstate(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
+static int do_load_vmstate(BlockDriverState *bs, char *buf, int64_t offset,
|
|
|
34b321 |
+ int count, int *total)
|
|
|
34b321 |
{
|
|
|
34b321 |
*total = bdrv_load_vmstate(bs, (uint8_t *)buf, offset, count);
|
|
|
34b321 |
if (*total < 0) {
|
|
|
34b321 |
@@ -296,7 +306,8 @@ static int do_load_vmstate(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
return 1;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int do_save_vmstate(char *buf, int64_t offset, int count, int *total)
|
|
|
34b321 |
+static int do_save_vmstate(BlockDriverState *bs, char *buf, int64_t offset,
|
|
|
34b321 |
+ int count, int *total)
|
|
|
34b321 |
{
|
|
|
34b321 |
*total = bdrv_save_vmstate(bs, (uint8_t *)buf, offset, count);
|
|
|
34b321 |
if (*total < 0) {
|
|
|
34b321 |
@@ -311,7 +322,8 @@ static void aio_rw_done(void *opaque, int ret)
|
|
|
34b321 |
*(int *)opaque = ret;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int do_aio_readv(QEMUIOVector *qiov, int64_t offset, int *total)
|
|
|
34b321 |
+static int do_aio_readv(BlockDriverState *bs, QEMUIOVector *qiov,
|
|
|
34b321 |
+ int64_t offset, int *total)
|
|
|
34b321 |
{
|
|
|
34b321 |
int async_ret = NOT_DONE;
|
|
|
34b321 |
|
|
|
34b321 |
@@ -325,7 +337,8 @@ static int do_aio_readv(QEMUIOVector *qiov, int64_t offset, int *total)
|
|
|
34b321 |
return async_ret < 0 ? async_ret : 1;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int do_aio_writev(QEMUIOVector *qiov, int64_t offset, int *total)
|
|
|
34b321 |
+static int do_aio_writev(BlockDriverState *bs, QEMUIOVector *qiov,
|
|
|
34b321 |
+ int64_t offset, int *total)
|
|
|
34b321 |
{
|
|
|
34b321 |
int async_ret = NOT_DONE;
|
|
|
34b321 |
|
|
|
34b321 |
@@ -354,7 +367,8 @@ static void multiwrite_cb(void *opaque, int ret)
|
|
|
34b321 |
}
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int do_aio_multiwrite(BlockRequest* reqs, int num_reqs, int *total)
|
|
|
34b321 |
+static int do_aio_multiwrite(BlockDriverState *bs, BlockRequest* reqs,
|
|
|
34b321 |
+ int num_reqs, int *total)
|
|
|
34b321 |
{
|
|
|
34b321 |
int i, ret;
|
|
|
34b321 |
struct multiwrite_async_ret async_ret = {
|
|
|
34b321 |
@@ -403,7 +417,7 @@ static void read_help(void)
|
|
|
34b321 |
"\n");
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int read_f(int argc, char **argv);
|
|
|
34b321 |
+static int read_f(BlockDriverState *bs, int argc, char **argv);
|
|
|
34b321 |
|
|
|
34b321 |
static const cmdinfo_t read_cmd = {
|
|
|
34b321 |
.name = "read",
|
|
|
34b321 |
@@ -416,7 +430,7 @@ static const cmdinfo_t read_cmd = {
|
|
|
34b321 |
.help = read_help,
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int read_f(int argc, char **argv)
|
|
|
34b321 |
+static int read_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
struct timeval t1, t2;
|
|
|
34b321 |
int Cflag = 0, pflag = 0, qflag = 0, vflag = 0;
|
|
|
34b321 |
@@ -522,15 +536,15 @@ static int read_f(int argc, char **argv)
|
|
|
34b321 |
}
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
- buf = qemu_io_alloc(count, 0xab);
|
|
|
34b321 |
+ buf = qemu_io_alloc(bs, count, 0xab);
|
|
|
34b321 |
|
|
|
34b321 |
gettimeofday(&t1, NULL);
|
|
|
34b321 |
if (pflag) {
|
|
|
34b321 |
- cnt = do_pread(buf, offset, count, &total);
|
|
|
34b321 |
+ cnt = do_pread(bs, buf, offset, count, &total);
|
|
|
34b321 |
} else if (bflag) {
|
|
|
34b321 |
- cnt = do_load_vmstate(buf, offset, count, &total);
|
|
|
34b321 |
+ cnt = do_load_vmstate(bs, buf, offset, count, &total);
|
|
|
34b321 |
} else {
|
|
|
34b321 |
- cnt = do_read(buf, offset, count, &total);
|
|
|
34b321 |
+ cnt = do_read(bs, buf, offset, count, &total);
|
|
|
34b321 |
}
|
|
|
34b321 |
gettimeofday(&t2, NULL);
|
|
|
34b321 |
|
|
|
34b321 |
@@ -587,7 +601,7 @@ static void readv_help(void)
|
|
|
34b321 |
"\n");
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int readv_f(int argc, char **argv);
|
|
|
34b321 |
+static int readv_f(BlockDriverState *bs, int argc, char **argv);
|
|
|
34b321 |
|
|
|
34b321 |
static const cmdinfo_t readv_cmd = {
|
|
|
34b321 |
.name = "readv",
|
|
|
34b321 |
@@ -599,7 +613,7 @@ static const cmdinfo_t readv_cmd = {
|
|
|
34b321 |
.help = readv_help,
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int readv_f(int argc, char **argv)
|
|
|
34b321 |
+static int readv_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
struct timeval t1, t2;
|
|
|
34b321 |
int Cflag = 0, qflag = 0, vflag = 0;
|
|
|
34b321 |
@@ -655,13 +669,13 @@ static int readv_f(int argc, char **argv)
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
nr_iov = argc - optind;
|
|
|
34b321 |
- buf = create_iovec(&qiov, &argv[optind], nr_iov, 0xab);
|
|
|
34b321 |
+ buf = create_iovec(bs, &qiov, &argv[optind], nr_iov, 0xab);
|
|
|
34b321 |
if (buf == NULL) {
|
|
|
34b321 |
return 0;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
gettimeofday(&t1, NULL);
|
|
|
34b321 |
- cnt = do_aio_readv(&qiov, offset, &total);
|
|
|
34b321 |
+ cnt = do_aio_readv(bs, &qiov, offset, &total);
|
|
|
34b321 |
gettimeofday(&t2, NULL);
|
|
|
34b321 |
|
|
|
34b321 |
if (cnt < 0) {
|
|
|
34b321 |
@@ -718,7 +732,7 @@ static void write_help(void)
|
|
|
34b321 |
"\n");
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int write_f(int argc, char **argv);
|
|
|
34b321 |
+static int write_f(BlockDriverState *bs, int argc, char **argv);
|
|
|
34b321 |
|
|
|
34b321 |
static const cmdinfo_t write_cmd = {
|
|
|
34b321 |
.name = "write",
|
|
|
34b321 |
@@ -731,7 +745,7 @@ static const cmdinfo_t write_cmd = {
|
|
|
34b321 |
.help = write_help,
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int write_f(int argc, char **argv)
|
|
|
34b321 |
+static int write_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
struct timeval t1, t2;
|
|
|
34b321 |
int Cflag = 0, pflag = 0, qflag = 0, bflag = 0, Pflag = 0, zflag = 0;
|
|
|
34b321 |
@@ -818,20 +832,20 @@ static int write_f(int argc, char **argv)
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
if (!zflag) {
|
|
|
34b321 |
- buf = qemu_io_alloc(count, pattern);
|
|
|
34b321 |
+ buf = qemu_io_alloc(bs, count, pattern);
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
gettimeofday(&t1, NULL);
|
|
|
34b321 |
if (pflag) {
|
|
|
34b321 |
- cnt = do_pwrite(buf, offset, count, &total);
|
|
|
34b321 |
+ cnt = do_pwrite(bs, buf, offset, count, &total);
|
|
|
34b321 |
} else if (bflag) {
|
|
|
34b321 |
- cnt = do_save_vmstate(buf, offset, count, &total);
|
|
|
34b321 |
+ cnt = do_save_vmstate(bs, buf, offset, count, &total);
|
|
|
34b321 |
} else if (zflag) {
|
|
|
34b321 |
- cnt = do_co_write_zeroes(offset, count, &total);
|
|
|
34b321 |
+ cnt = do_co_write_zeroes(bs, offset, count, &total);
|
|
|
34b321 |
} else if (cflag) {
|
|
|
34b321 |
- cnt = do_write_compressed(buf, offset, count, &total);
|
|
|
34b321 |
+ cnt = do_write_compressed(bs, buf, offset, count, &total);
|
|
|
34b321 |
} else {
|
|
|
34b321 |
- cnt = do_write(buf, offset, count, &total);
|
|
|
34b321 |
+ cnt = do_write(bs, buf, offset, count, &total);
|
|
|
34b321 |
}
|
|
|
34b321 |
gettimeofday(&t2, NULL);
|
|
|
34b321 |
|
|
|
34b321 |
@@ -874,7 +888,7 @@ writev_help(void)
|
|
|
34b321 |
"\n");
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int writev_f(int argc, char **argv);
|
|
|
34b321 |
+static int writev_f(BlockDriverState *bs, int argc, char **argv);
|
|
|
34b321 |
|
|
|
34b321 |
static const cmdinfo_t writev_cmd = {
|
|
|
34b321 |
.name = "writev",
|
|
|
34b321 |
@@ -886,7 +900,7 @@ static const cmdinfo_t writev_cmd = {
|
|
|
34b321 |
.help = writev_help,
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int writev_f(int argc, char **argv)
|
|
|
34b321 |
+static int writev_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
struct timeval t1, t2;
|
|
|
34b321 |
int Cflag = 0, qflag = 0;
|
|
|
34b321 |
@@ -936,13 +950,13 @@ static int writev_f(int argc, char **argv)
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
nr_iov = argc - optind;
|
|
|
34b321 |
- buf = create_iovec(&qiov, &argv[optind], nr_iov, pattern);
|
|
|
34b321 |
+ buf = create_iovec(bs, &qiov, &argv[optind], nr_iov, pattern);
|
|
|
34b321 |
if (buf == NULL) {
|
|
|
34b321 |
return 0;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
gettimeofday(&t1, NULL);
|
|
|
34b321 |
- cnt = do_aio_writev(&qiov, offset, &total);
|
|
|
34b321 |
+ cnt = do_aio_writev(bs, &qiov, offset, &total);
|
|
|
34b321 |
gettimeofday(&t2, NULL);
|
|
|
34b321 |
|
|
|
34b321 |
if (cnt < 0) {
|
|
|
34b321 |
@@ -983,7 +997,7 @@ static void multiwrite_help(void)
|
|
|
34b321 |
"\n");
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int multiwrite_f(int argc, char **argv);
|
|
|
34b321 |
+static int multiwrite_f(BlockDriverState *bs, int argc, char **argv);
|
|
|
34b321 |
|
|
|
34b321 |
static const cmdinfo_t multiwrite_cmd = {
|
|
|
34b321 |
.name = "multiwrite",
|
|
|
34b321 |
@@ -995,7 +1009,7 @@ static const cmdinfo_t multiwrite_cmd = {
|
|
|
34b321 |
.help = multiwrite_help,
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int multiwrite_f(int argc, char **argv)
|
|
|
34b321 |
+static int multiwrite_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
struct timeval t1, t2;
|
|
|
34b321 |
int Cflag = 0, qflag = 0;
|
|
|
34b321 |
@@ -1076,7 +1090,7 @@ static int multiwrite_f(int argc, char **argv)
|
|
|
34b321 |
nr_iov = j - optind;
|
|
|
34b321 |
|
|
|
34b321 |
/* Build request */
|
|
|
34b321 |
- buf[i] = create_iovec(&qiovs[i], &argv[optind], nr_iov, pattern);
|
|
|
34b321 |
+ buf[i] = create_iovec(bs, &qiovs[i], &argv[optind], nr_iov, pattern);
|
|
|
34b321 |
if (buf[i] == NULL) {
|
|
|
34b321 |
goto out;
|
|
|
34b321 |
}
|
|
|
34b321 |
@@ -1094,7 +1108,7 @@ static int multiwrite_f(int argc, char **argv)
|
|
|
34b321 |
nr_reqs = i;
|
|
|
34b321 |
|
|
|
34b321 |
gettimeofday(&t1, NULL);
|
|
|
34b321 |
- cnt = do_aio_multiwrite(reqs, nr_reqs, &total);
|
|
|
34b321 |
+ cnt = do_aio_multiwrite(bs, reqs, nr_reqs, &total);
|
|
|
34b321 |
gettimeofday(&t2, NULL);
|
|
|
34b321 |
|
|
|
34b321 |
if (cnt < 0) {
|
|
|
34b321 |
@@ -1222,7 +1236,7 @@ static void aio_read_help(void)
|
|
|
34b321 |
"\n");
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int aio_read_f(int argc, char **argv);
|
|
|
34b321 |
+static int aio_read_f(BlockDriverState *bs, int argc, char **argv);
|
|
|
34b321 |
|
|
|
34b321 |
static const cmdinfo_t aio_read_cmd = {
|
|
|
34b321 |
.name = "aio_read",
|
|
|
34b321 |
@@ -1234,7 +1248,7 @@ static const cmdinfo_t aio_read_cmd = {
|
|
|
34b321 |
.help = aio_read_help,
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int aio_read_f(int argc, char **argv)
|
|
|
34b321 |
+static int aio_read_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
int nr_iov, c;
|
|
|
34b321 |
struct aio_ctx *ctx = g_new0(struct aio_ctx, 1);
|
|
|
34b321 |
@@ -1285,7 +1299,7 @@ static int aio_read_f(int argc, char **argv)
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
nr_iov = argc - optind;
|
|
|
34b321 |
- ctx->buf = create_iovec(&ctx->qiov, &argv[optind], nr_iov, 0xab);
|
|
|
34b321 |
+ ctx->buf = create_iovec(bs, &ctx->qiov, &argv[optind], nr_iov, 0xab);
|
|
|
34b321 |
if (ctx->buf == NULL) {
|
|
|
34b321 |
g_free(ctx);
|
|
|
34b321 |
return 0;
|
|
|
34b321 |
@@ -1317,7 +1331,7 @@ static void aio_write_help(void)
|
|
|
34b321 |
"\n");
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int aio_write_f(int argc, char **argv);
|
|
|
34b321 |
+static int aio_write_f(BlockDriverState *bs, int argc, char **argv);
|
|
|
34b321 |
|
|
|
34b321 |
static const cmdinfo_t aio_write_cmd = {
|
|
|
34b321 |
.name = "aio_write",
|
|
|
34b321 |
@@ -1329,7 +1343,7 @@ static const cmdinfo_t aio_write_cmd = {
|
|
|
34b321 |
.help = aio_write_help,
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int aio_write_f(int argc, char **argv)
|
|
|
34b321 |
+static int aio_write_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
int nr_iov, c;
|
|
|
34b321 |
int pattern = 0xcd;
|
|
|
34b321 |
@@ -1377,7 +1391,7 @@ static int aio_write_f(int argc, char **argv)
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
nr_iov = argc - optind;
|
|
|
34b321 |
- ctx->buf = create_iovec(&ctx->qiov, &argv[optind], nr_iov, pattern);
|
|
|
34b321 |
+ ctx->buf = create_iovec(bs, &ctx->qiov, &argv[optind], nr_iov, pattern);
|
|
|
34b321 |
if (ctx->buf == NULL) {
|
|
|
34b321 |
g_free(ctx);
|
|
|
34b321 |
return 0;
|
|
|
34b321 |
@@ -1389,7 +1403,7 @@ static int aio_write_f(int argc, char **argv)
|
|
|
34b321 |
return 0;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int aio_flush_f(int argc, char **argv)
|
|
|
34b321 |
+static int aio_flush_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
bdrv_drain_all();
|
|
|
34b321 |
return 0;
|
|
|
34b321 |
@@ -1401,7 +1415,7 @@ static const cmdinfo_t aio_flush_cmd = {
|
|
|
34b321 |
.oneline = "completes all outstanding aio requests"
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int flush_f(int argc, char **argv)
|
|
|
34b321 |
+static int flush_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
bdrv_flush(bs);
|
|
|
34b321 |
return 0;
|
|
|
34b321 |
@@ -1414,7 +1428,7 @@ static const cmdinfo_t flush_cmd = {
|
|
|
34b321 |
.oneline = "flush all in-core file state to disk",
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int truncate_f(int argc, char **argv)
|
|
|
34b321 |
+static int truncate_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
int64_t offset;
|
|
|
34b321 |
int ret;
|
|
|
34b321 |
@@ -1444,7 +1458,7 @@ static const cmdinfo_t truncate_cmd = {
|
|
|
34b321 |
.oneline = "truncates the current file at the given offset",
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int length_f(int argc, char **argv)
|
|
|
34b321 |
+static int length_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
int64_t size;
|
|
|
34b321 |
char s1[64];
|
|
|
34b321 |
@@ -1469,7 +1483,7 @@ static const cmdinfo_t length_cmd = {
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
|
|
|
34b321 |
-static int info_f(int argc, char **argv)
|
|
|
34b321 |
+static int info_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
BlockDriverInfo bdi;
|
|
|
34b321 |
ImageInfoSpecific *spec_info;
|
|
|
34b321 |
@@ -1528,7 +1542,7 @@ static void discard_help(void)
|
|
|
34b321 |
"\n");
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int discard_f(int argc, char **argv);
|
|
|
34b321 |
+static int discard_f(BlockDriverState *bs, int argc, char **argv);
|
|
|
34b321 |
|
|
|
34b321 |
static const cmdinfo_t discard_cmd = {
|
|
|
34b321 |
.name = "discard",
|
|
|
34b321 |
@@ -1541,7 +1555,7 @@ static const cmdinfo_t discard_cmd = {
|
|
|
34b321 |
.help = discard_help,
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int discard_f(int argc, char **argv)
|
|
|
34b321 |
+static int discard_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
struct timeval t1, t2;
|
|
|
34b321 |
int Cflag = 0, qflag = 0;
|
|
|
34b321 |
@@ -1599,7 +1613,7 @@ out:
|
|
|
34b321 |
return 0;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int alloc_f(int argc, char **argv)
|
|
|
34b321 |
+static int alloc_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
int64_t offset, sector_num;
|
|
|
34b321 |
int nb_sectors, remaining;
|
|
|
34b321 |
@@ -1664,7 +1678,7 @@ static const cmdinfo_t alloc_cmd = {
|
|
|
34b321 |
.oneline = "checks if a sector is present in the file",
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int map_f(int argc, char **argv)
|
|
|
34b321 |
+static int map_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
int64_t offset;
|
|
|
34b321 |
int64_t nb_sectors;
|
|
|
34b321 |
@@ -1700,7 +1714,7 @@ static const cmdinfo_t map_cmd = {
|
|
|
34b321 |
.oneline = "prints the allocated areas of a file",
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int break_f(int argc, char **argv)
|
|
|
34b321 |
+static int break_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
int ret;
|
|
|
34b321 |
|
|
|
34b321 |
@@ -1722,7 +1736,7 @@ static const cmdinfo_t break_cmd = {
|
|
|
34b321 |
"request as tag",
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int resume_f(int argc, char **argv)
|
|
|
34b321 |
+static int resume_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
int ret;
|
|
|
34b321 |
|
|
|
34b321 |
@@ -1743,7 +1757,7 @@ static const cmdinfo_t resume_cmd = {
|
|
|
34b321 |
.oneline = "resumes the request tagged as tag",
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int wait_break_f(int argc, char **argv)
|
|
|
34b321 |
+static int wait_break_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
while (!bdrv_debug_is_suspended(bs, argv[1])) {
|
|
|
34b321 |
qemu_aio_wait();
|
|
|
34b321 |
@@ -1761,7 +1775,7 @@ static const cmdinfo_t wait_break_cmd = {
|
|
|
34b321 |
.oneline = "waits for the suspension of a request",
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int abort_f(int argc, char **argv)
|
|
|
34b321 |
+static int abort_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
abort();
|
|
|
34b321 |
}
|
|
|
34b321 |
@@ -1773,10 +1787,10 @@ static const cmdinfo_t abort_cmd = {
|
|
|
34b321 |
.oneline = "simulate a program crash using abort(3)",
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int close_f(int argc, char **argv)
|
|
|
34b321 |
+static int close_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
bdrv_unref(bs);
|
|
|
34b321 |
- bs = NULL;
|
|
|
34b321 |
+ qemuio_bs = NULL;
|
|
|
34b321 |
return 0;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
@@ -1793,7 +1807,7 @@ static void sleep_cb(void *opaque)
|
|
|
34b321 |
*expired = true;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int sleep_f(int argc, char **argv)
|
|
|
34b321 |
+static int sleep_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
char *endptr;
|
|
|
34b321 |
long ms;
|
|
|
34b321 |
@@ -1831,27 +1845,27 @@ static int openfile(char *name, int flags, int growable, QDict *opts)
|
|
|
34b321 |
{
|
|
|
34b321 |
Error *local_err = NULL;
|
|
|
34b321 |
|
|
|
34b321 |
- if (bs) {
|
|
|
34b321 |
+ if (qemuio_bs) {
|
|
|
34b321 |
fprintf(stderr, "file open already, try 'help close'\n");
|
|
|
34b321 |
return 1;
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
if (growable) {
|
|
|
34b321 |
- if (bdrv_file_open(&bs, name, opts, flags, &local_err)) {
|
|
|
34b321 |
+ if (bdrv_file_open(&qemuio_bs, name, opts, flags, &local_err)) {
|
|
|
34b321 |
fprintf(stderr, "%s: can't open device %s: %s\n", progname, name,
|
|
|
34b321 |
error_get_pretty(local_err));
|
|
|
34b321 |
error_free(local_err);
|
|
|
34b321 |
return 1;
|
|
|
34b321 |
}
|
|
|
34b321 |
} else {
|
|
|
34b321 |
- bs = bdrv_new("hda", &error_abort);
|
|
|
34b321 |
+ qemuio_bs = bdrv_new("hda", &error_abort);
|
|
|
34b321 |
|
|
|
34b321 |
- if (bdrv_open(bs, name, opts, flags, NULL, &local_err) < 0) {
|
|
|
34b321 |
+ if (bdrv_open(qemuio_bs, name, opts, flags, NULL, &local_err) < 0) {
|
|
|
34b321 |
fprintf(stderr, "%s: can't open device %s: %s\n", progname, name,
|
|
|
34b321 |
error_get_pretty(local_err));
|
|
|
34b321 |
error_free(local_err);
|
|
|
34b321 |
- bdrv_unref(bs);
|
|
|
34b321 |
- bs = NULL;
|
|
|
34b321 |
+ bdrv_unref(qemuio_bs);
|
|
|
34b321 |
+ qemuio_bs = NULL;
|
|
|
34b321 |
return 1;
|
|
|
34b321 |
}
|
|
|
34b321 |
}
|
|
|
34b321 |
@@ -1877,7 +1891,7 @@ static void open_help(void)
|
|
|
34b321 |
"\n");
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int open_f(int argc, char **argv);
|
|
|
34b321 |
+static int open_f(BlockDriverState *bs, int argc, char **argv);
|
|
|
34b321 |
|
|
|
34b321 |
static const cmdinfo_t open_cmd = {
|
|
|
34b321 |
.name = "open",
|
|
|
34b321 |
@@ -1900,7 +1914,7 @@ static QemuOptsList empty_opts = {
|
|
|
34b321 |
},
|
|
|
34b321 |
};
|
|
|
34b321 |
|
|
|
34b321 |
-static int open_f(int argc, char **argv)
|
|
|
34b321 |
+static int open_f(BlockDriverState *bs, int argc, char **argv)
|
|
|
34b321 |
{
|
|
|
34b321 |
int flags = 0;
|
|
|
34b321 |
int readonly = 0;
|
|
|
34b321 |
@@ -1948,7 +1962,7 @@ static int open_f(int argc, char **argv)
|
|
|
34b321 |
return openfile(argv[optind], flags, growable, opts);
|
|
|
34b321 |
}
|
|
|
34b321 |
|
|
|
34b321 |
-static int init_check_command(const cmdinfo_t *ct)
|
|
|
34b321 |
+static int init_check_command(BlockDriverState *bs, const cmdinfo_t *ct)
|
|
|
34b321 |
{
|
|
|
34b321 |
if (ct->flags & CMD_FLAG_GLOBAL) {
|
|
|
34b321 |
return 1;
|
|
|
34b321 |
@@ -2117,8 +2131,8 @@ int main(int argc, char **argv)
|
|
|
34b321 |
*/
|
|
|
34b321 |
bdrv_drain_all();
|
|
|
34b321 |
|
|
|
34b321 |
- if (bs) {
|
|
|
34b321 |
- bdrv_unref(bs);
|
|
|
34b321 |
+ if (qemuio_bs) {
|
|
|
34b321 |
+ bdrv_unref(qemuio_bs);
|
|
|
34b321 |
}
|
|
|
34b321 |
return 0;
|
|
|
34b321 |
}
|
|
|
34b321 |
--
|
|
|
34b321 |
1.8.3.1
|
|
|
34b321 |
|