qemu-io: add preallocate mode parameter for truncate command
This will be used in further test. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Message-Id: <20201021145859.11201-10-vsementsov@virtuozzo.com> Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
33fa2222eb
commit
42ba0225bd
@ -1698,13 +1698,42 @@ static const cmdinfo_t flush_cmd = {
|
||||
.oneline = "flush all in-core file state to disk",
|
||||
};
|
||||
|
||||
static int truncate_f(BlockBackend *blk, int argc, char **argv);
|
||||
static const cmdinfo_t truncate_cmd = {
|
||||
.name = "truncate",
|
||||
.altname = "t",
|
||||
.cfunc = truncate_f,
|
||||
.perm = BLK_PERM_WRITE | BLK_PERM_RESIZE,
|
||||
.argmin = 1,
|
||||
.argmax = 3,
|
||||
.args = "[-m prealloc_mode] off",
|
||||
.oneline = "truncates the current file at the given offset",
|
||||
};
|
||||
|
||||
static int truncate_f(BlockBackend *blk, int argc, char **argv)
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
int64_t offset;
|
||||
int ret;
|
||||
int c, ret;
|
||||
PreallocMode prealloc = PREALLOC_MODE_OFF;
|
||||
|
||||
offset = cvtnum(argv[1]);
|
||||
while ((c = getopt(argc, argv, "m:")) != -1) {
|
||||
switch (c) {
|
||||
case 'm':
|
||||
prealloc = qapi_enum_parse(&PreallocMode_lookup, optarg,
|
||||
PREALLOC_MODE__MAX, NULL);
|
||||
if (prealloc == PREALLOC_MODE__MAX) {
|
||||
error_report("Invalid preallocation mode '%s'", optarg);
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
qemuio_command_usage(&truncate_cmd);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
offset = cvtnum(argv[optind]);
|
||||
if (offset < 0) {
|
||||
print_cvtnum_err(offset, argv[1]);
|
||||
return offset;
|
||||
@ -1715,7 +1744,7 @@ static int truncate_f(BlockBackend *blk, int argc, char **argv)
|
||||
* exact=true. It is better to err on the "emit more errors" side
|
||||
* than to be overly permissive.
|
||||
*/
|
||||
ret = blk_truncate(blk, offset, false, PREALLOC_MODE_OFF, 0, &local_err);
|
||||
ret = blk_truncate(blk, offset, false, prealloc, 0, &local_err);
|
||||
if (ret < 0) {
|
||||
error_report_err(local_err);
|
||||
return ret;
|
||||
@ -1724,17 +1753,6 @@ static int truncate_f(BlockBackend *blk, int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const cmdinfo_t truncate_cmd = {
|
||||
.name = "truncate",
|
||||
.altname = "t",
|
||||
.cfunc = truncate_f,
|
||||
.perm = BLK_PERM_WRITE | BLK_PERM_RESIZE,
|
||||
.argmin = 1,
|
||||
.argmax = 1,
|
||||
.args = "off",
|
||||
.oneline = "truncates the current file at the given offset",
|
||||
};
|
||||
|
||||
static int length_f(BlockBackend *blk, int argc, char **argv)
|
||||
{
|
||||
int64_t size;
|
||||
|
Loading…
Reference in New Issue
Block a user