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",
|
.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)
|
static int truncate_f(BlockBackend *blk, int argc, char **argv)
|
||||||
{
|
{
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
int64_t offset;
|
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) {
|
if (offset < 0) {
|
||||||
print_cvtnum_err(offset, argv[1]);
|
print_cvtnum_err(offset, argv[1]);
|
||||||
return offset;
|
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
|
* exact=true. It is better to err on the "emit more errors" side
|
||||||
* than to be overly permissive.
|
* 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) {
|
if (ret < 0) {
|
||||||
error_report_err(local_err);
|
error_report_err(local_err);
|
||||||
return ret;
|
return ret;
|
||||||
@ -1724,17 +1753,6 @@ static int truncate_f(BlockBackend *blk, int argc, char **argv)
|
|||||||
return 0;
|
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)
|
static int length_f(BlockBackend *blk, int argc, char **argv)
|
||||||
{
|
{
|
||||||
int64_t size;
|
int64_t size;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user