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