|
|
|
@ -130,7 +130,8 @@ static void open_help(void) |
|
|
|
" -C, -- use copy-on-read\n" |
|
|
|
" -n, -- disable host cache, short for -t none\n" |
|
|
|
" -U, -- force shared permissions\n" |
|
|
|
" -k, -- use kernel AIO implementation (on Linux only)\n" |
|
|
|
" -k, -- use kernel AIO implementation (Linux only, prefer use of -i)\n" |
|
|
|
" -i, -- use AIO mode (threads, native or io_uring)\n" |
|
|
|
" -t, -- use the given cache mode for the image\n" |
|
|
|
" -d, -- use the given discard mode for the image\n" |
|
|
|
" -o, -- options to be given to the block driver" |
|
|
|
@ -172,7 +173,7 @@ static int open_f(BlockBackend *blk, int argc, char **argv) |
|
|
|
QDict *opts; |
|
|
|
bool force_share = false; |
|
|
|
|
|
|
|
while ((c = getopt(argc, argv, "snCro:kt:d:U")) != -1) { |
|
|
|
while ((c = getopt(argc, argv, "snCro:ki:t:d:U")) != -1) { |
|
|
|
switch (c) { |
|
|
|
case 's': |
|
|
|
flags |= BDRV_O_SNAPSHOT; |
|
|
|
@ -204,6 +205,13 @@ static int open_f(BlockBackend *blk, int argc, char **argv) |
|
|
|
return -EINVAL; |
|
|
|
} |
|
|
|
break; |
|
|
|
case 'i': |
|
|
|
if (bdrv_parse_aio(optarg, &flags) < 0) { |
|
|
|
error_report("Invalid aio option: %s", optarg); |
|
|
|
qemu_opts_reset(&empty_opts); |
|
|
|
return -EINVAL; |
|
|
|
} |
|
|
|
break; |
|
|
|
case 'o': |
|
|
|
if (imageOpts) { |
|
|
|
printf("--image-opts and 'open -o' are mutually exclusive\n"); |
|
|
|
@ -291,7 +299,9 @@ static void usage(const char *name) |
|
|
|
" -n, --nocache disable host cache, short for -t none\n" |
|
|
|
" -C, --copy-on-read enable copy-on-read\n" |
|
|
|
" -m, --misalign misalign allocations for O_DIRECT\n" |
|
|
|
" -k, --native-aio use kernel AIO implementation (on Linux only)\n" |
|
|
|
" -k, --native-aio use kernel AIO implementation\n" |
|
|
|
" (Linux only, prefer use of -i)\n" |
|
|
|
" -i, --aio=MODE use AIO mode (threads, native or io_uring)\n" |
|
|
|
" -t, --cache=MODE use the given cache mode for the image\n" |
|
|
|
" -d, --discard=MODE use the given discard mode for the image\n" |
|
|
|
" -T, --trace [[enable=]<pattern>][,events=<file>][,file=<file>]\n" |
|
|
|
@ -496,7 +506,7 @@ static QemuOptsList file_opts = { |
|
|
|
int main(int argc, char **argv) |
|
|
|
{ |
|
|
|
int readonly = 0; |
|
|
|
const char *sopt = "hVc:d:f:rsnCmkt:T:U"; |
|
|
|
const char *sopt = "hVc:d:f:rsnCmki:t:T:U"; |
|
|
|
const struct option lopt[] = { |
|
|
|
{ "help", no_argument, NULL, 'h' }, |
|
|
|
{ "version", no_argument, NULL, 'V' }, |
|
|
|
@ -508,6 +518,7 @@ int main(int argc, char **argv) |
|
|
|
{ "copy-on-read", no_argument, NULL, 'C' }, |
|
|
|
{ "misalign", no_argument, NULL, 'm' }, |
|
|
|
{ "native-aio", no_argument, NULL, 'k' }, |
|
|
|
{ "aio", required_argument, NULL, 'i' }, |
|
|
|
{ "discard", required_argument, NULL, 'd' }, |
|
|
|
{ "cache", required_argument, NULL, 't' }, |
|
|
|
{ "trace", required_argument, NULL, 'T' }, |
|
|
|
@ -575,6 +586,12 @@ int main(int argc, char **argv) |
|
|
|
case 'k': |
|
|
|
flags |= BDRV_O_NATIVE_AIO; |
|
|
|
break; |
|
|
|
case 'i': |
|
|
|
if (bdrv_parse_aio(optarg, &flags) < 0) { |
|
|
|
error_report("Invalid aio option: %s", optarg); |
|
|
|
exit(1); |
|
|
|
} |
|
|
|
break; |
|
|
|
case 't': |
|
|
|
if (bdrv_parse_cache_mode(optarg, &flags, &writethrough) < 0) { |
|
|
|
error_report("Invalid cache option: %s", optarg); |
|
|
|
|