[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 11/14] qemu-io: Switch to byte-based block access
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v4 11/14] qemu-io: Switch to byte-based block access |
Date: |
Fri, 29 Apr 2016 14:08:33 -0600 |
blk_write() and blk_read() are now very simple wrappers around
blk_pwrite() and blk_pread(). There's no reason to require
the user to pass in aligned numbers. Keep 'read -p' and
'write -p' so that I don't have to hunt down and update all
users of qemu-io, but make the default 'read' and 'write' now
do the same behavior that used to require -p.
Signed-off-by: Eric Blake <address@hidden>
---
qemu-io-cmds.c | 75 +++++++++++++---------------------------------------------
1 file changed, 16 insertions(+), 59 deletions(-)
diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
index e26e543..4184fb8 100644
--- a/qemu-io-cmds.c
+++ b/qemu-io-cmds.c
@@ -419,40 +419,6 @@ fail:
return buf;
}
-static int do_read(BlockBackend *blk, char *buf, int64_t offset, int64_t count,
- int64_t *total)
-{
- int ret;
-
- if (count >> 9 > INT_MAX) {
- return -ERANGE;
- }
-
- ret = blk_read(blk, offset >> 9, (uint8_t *)buf, count >> 9);
- if (ret < 0) {
- return ret;
- }
- *total = count;
- return 1;
-}
-
-static int do_write(BlockBackend *blk, char *buf, int64_t offset, int64_t
count,
- int64_t *total)
-{
- int ret;
-
- if (count >> 9 > INT_MAX) {
- return -ERANGE;
- }
-
- ret = blk_write(blk, offset >> 9, (uint8_t *)buf, count >> 9);
- if (ret < 0) {
- return ret;
- }
- *total = count;
- return 1;
-}
-
static int do_pread(BlockBackend *blk, char *buf, int64_t offset,
int64_t count, int64_t *total)
{
@@ -671,7 +637,7 @@ static void read_help(void)
" -b, -- read from the VM state rather than the virtual disk\n"
" -C, -- report statistics in a machine parsable format\n"
" -l, -- length for pattern verification (only with -P)\n"
-" -p, -- use blk_pread to read the file\n"
+" -p, -- ignored for back-compat\n"
" -P, -- use a pattern to verify read data\n"
" -q, -- quiet mode, do not show I/O statistics\n"
" -s, -- start offset for pattern verification (only with -P)\n"
@@ -687,7 +653,7 @@ static const cmdinfo_t read_cmd = {
.cfunc = read_f,
.argmin = 2,
.argmax = -1,
- .args = "[-abCpqv] [-P pattern [-s off] [-l len]] off len",
+ .args = "[-abCqv] [-P pattern [-s off] [-l len]] off len",
.oneline = "reads a number of bytes at a specified offset",
.help = read_help,
};
@@ -695,7 +661,7 @@ static const cmdinfo_t read_cmd = {
static int read_f(BlockBackend *blk, int argc, char **argv)
{
struct timeval t1, t2;
- int Cflag = 0, pflag = 0, qflag = 0, vflag = 0;
+ int Cflag = 0, qflag = 0, vflag = 0;
int Pflag = 0, sflag = 0, lflag = 0, bflag = 0;
int c, cnt;
char *buf;
@@ -723,7 +689,7 @@ static int read_f(BlockBackend *blk, int argc, char **argv)
}
break;
case 'p':
- pflag = 1;
+ /* Ignored for back-compat */
break;
case 'P':
Pflag = 1;
@@ -755,11 +721,6 @@ static int read_f(BlockBackend *blk, int argc, char **argv)
return qemuio_command_usage(&read_cmd);
}
- if (bflag && pflag) {
- printf("-b and -p cannot be specified at the same time\n");
- return 0;
- }
-
offset = cvtnum(argv[optind]);
if (offset < 0) {
print_cvtnum_err(offset, argv[optind]);
@@ -790,7 +751,7 @@ static int read_f(BlockBackend *blk, int argc, char **argv)
return 0;
}
- if (!pflag) {
+ if (bflag) {
if (offset & 0x1ff) {
printf("offset %" PRId64 " is not sector aligned\n",
offset);
@@ -806,12 +767,10 @@ static int read_f(BlockBackend *blk, int argc, char
**argv)
buf = qemu_io_alloc(blk, count, 0xab);
gettimeofday(&t1, NULL);
- if (pflag) {
- cnt = do_pread(blk, buf, offset, count, &total);
- } else if (bflag) {
+ if (bflag) {
cnt = do_load_vmstate(blk, buf, offset, count, &total);
} else {
- cnt = do_read(blk, buf, offset, count, &total);
+ cnt = do_pread(blk, buf, offset, count, &total);
}
gettimeofday(&t2, NULL);
@@ -991,7 +950,7 @@ static void write_help(void)
" filled with a set pattern (0xcdcdcdcd).\n"
" -b, -- write to the VM state rather than the virtual disk\n"
" -c, -- write compressed data with blk_write_compressed\n"
-" -p, -- use blk_pwrite to write the file\n"
+" -p, -- ignored for back-compat\n"
" -P, -- use different pattern to fill file\n"
" -C, -- report statistics in a machine parsable format\n"
" -q, -- quiet mode, do not show I/O statistics\n"
@@ -1007,7 +966,7 @@ static const cmdinfo_t write_cmd = {
.cfunc = write_f,
.argmin = 2,
.argmax = -1,
- .args = "[-bcCpqz] [-P pattern ] off len",
+ .args = "[-bcCqz] [-P pattern ] off len",
.oneline = "writes a number of bytes at a specified offset",
.help = write_help,
};
@@ -1015,7 +974,7 @@ static const cmdinfo_t write_cmd = {
static int write_f(BlockBackend *blk, int argc, char **argv)
{
struct timeval t1, t2;
- int Cflag = 0, pflag = 0, qflag = 0, bflag = 0, Pflag = 0, zflag = 0;
+ int Cflag = 0, qflag = 0, bflag = 0, Pflag = 0, zflag = 0;
int cflag = 0;
int c, cnt;
char *buf = NULL;
@@ -1037,7 +996,7 @@ static int write_f(BlockBackend *blk, int argc, char
**argv)
Cflag = 1;
break;
case 'p':
- pflag = 1;
+ /* Ignored for back-compat */
break;
case 'P':
Pflag = 1;
@@ -1061,8 +1020,8 @@ static int write_f(BlockBackend *blk, int argc, char
**argv)
return qemuio_command_usage(&write_cmd);
}
- if (bflag + pflag + zflag > 1) {
- printf("-b, -p, or -z cannot be specified at the same time\n");
+ if (bflag + zflag > 1) {
+ printf("-b and -z cannot be specified at the same time\n");
return 0;
}
@@ -1088,7 +1047,7 @@ static int write_f(BlockBackend *blk, int argc, char
**argv)
return 0;
}
- if (!pflag) {
+ if (bflag || cflag || zflag) {
if (offset & 0x1ff) {
printf("offset %" PRId64 " is not sector aligned\n",
offset);
@@ -1107,16 +1066,14 @@ static int write_f(BlockBackend *blk, int argc, char
**argv)
}
gettimeofday(&t1, NULL);
- if (pflag) {
- cnt = do_pwrite(blk, buf, offset, count, &total);
- } else if (bflag) {
+ if (bflag) {
cnt = do_save_vmstate(blk, buf, offset, count, &total);
} else if (zflag) {
cnt = do_co_write_zeroes(blk, offset, count, &total);
} else if (cflag) {
cnt = do_write_compressed(blk, buf, offset, count, &total);
} else {
- cnt = do_write(blk, buf, offset, count, &total);
+ cnt = do_pwrite(blk, buf, offset, count, &total);
}
gettimeofday(&t2, NULL);
--
2.5.5
- [Qemu-devel] [PATCH v4 07/14] m25p80: Switch to byte-based block access, (continued)
- [Qemu-devel] [PATCH v4 07/14] m25p80: Switch to byte-based block access, Eric Blake, 2016/04/29
- [Qemu-devel] [PATCH v4 03/14] nand: Switch to byte-based block access, Eric Blake, 2016/04/29
- [Qemu-devel] [PATCH v4 05/14] pflash: Switch to byte-based block access, Eric Blake, 2016/04/29
- [Qemu-devel] [PATCH v4 13/14] block: Switch blk_write_zeroes() to byte interface, Eric Blake, 2016/04/29
- [Qemu-devel] [PATCH v4 14/14] block: Kill blk_write(), blk_read(), Eric Blake, 2016/04/29
- [Qemu-devel] [PATCH v4 04/14] onenand: Switch to byte-based block access, Eric Blake, 2016/04/29
- [Qemu-devel] [PATCH v4 08/14] atapi: Switch to byte-based block access, Eric Blake, 2016/04/29
- [Qemu-devel] [PATCH v4 10/14] qemu-img: Switch to byte-based block access, Eric Blake, 2016/04/29
- [Qemu-devel] [PATCH v4 12/14] block: Switch blk_read_unthrottled() to byte interface, Eric Blake, 2016/04/29
- [Qemu-devel] [PATCH v4 01/14] block: Allow BDRV_REQ_FUA through blk_pwrite(), Eric Blake, 2016/04/29
- [Qemu-devel] [PATCH v4 11/14] qemu-io: Switch to byte-based block access,
Eric Blake <=