Lines Matching +full:0 +full:- +full:mon

7  * Copyright (c) 2003-2008 Fabrice Bellard
10 * See the COPYING file in the top-level directory.
11 * Contributions after 2012-01-13 are licensed under the terms of the
17 * Copyright (c) 2003-2008 Fabrice Bellard
40 #include "sysemu/block-backend.h"
42 #include "qapi/qapi-commands-block.h"
43 #include "qapi/qapi-commands-block-export.h"
47 #include "qemu/config-file.h"
51 #include "qemu/error-report.h"
58 #include "block/block-hmp-cmds.h"
59 #include "qemu-io.h"
61 static void hmp_drive_add_node(Monitor *mon, const char *optstr) in hmp_drive_add_node() argument
74 if (!qdict_get_try_str(qdict, "node-name")) { in hmp_drive_add_node()
76 error_report("'node-name' needs to be specified"); in hmp_drive_add_node()
91 void hmp_drive_add(Monitor *mon, const QDict *qdict) in hmp_drive_add() argument
101 hmp_drive_add_node(mon, optstr); in hmp_drive_add()
110 dinfo = drive_new(opts, mc->block_default_type, &err); in hmp_drive_add()
121 switch (dinfo->type) { in hmp_drive_add()
123 monitor_printf(mon, "OK\n"); in hmp_drive_add()
126 monitor_printf(mon, "Can't hot-add drive to type %d\n", dinfo->type); in hmp_drive_add()
139 void hmp_drive_del(Monitor *mon, const QDict *qdict) in hmp_drive_del() argument
165 error_report("Deleting device added with blockdev-add" in hmp_drive_del()
196 void hmp_commit(Monitor *mon, const QDict *qdict) in hmp_commit() argument
225 if (ret < 0) { in hmp_commit()
226 error_report("'commit' error for '%s': %s", device, strerror(-ret)); in hmp_commit()
230 void hmp_drive_mirror(Monitor *mon, const QDict *qdict) in hmp_drive_mirror() argument
253 hmp_handle_error(mon, err); in hmp_drive_mirror()
256 void hmp_drive_backup(Monitor *mon, const QDict *qdict) in hmp_drive_backup() argument
283 hmp_handle_error(mon, err); in hmp_drive_backup()
286 void hmp_block_job_set_speed(Monitor *mon, const QDict *qdict) in hmp_block_job_set_speed() argument
294 hmp_handle_error(mon, error); in hmp_block_job_set_speed()
297 void hmp_block_job_cancel(Monitor *mon, const QDict *qdict) in hmp_block_job_cancel() argument
305 hmp_handle_error(mon, error); in hmp_block_job_cancel()
308 void hmp_block_job_pause(Monitor *mon, const QDict *qdict) in hmp_block_job_pause() argument
315 hmp_handle_error(mon, error); in hmp_block_job_pause()
318 void hmp_block_job_resume(Monitor *mon, const QDict *qdict) in hmp_block_job_resume() argument
325 hmp_handle_error(mon, error); in hmp_block_job_resume()
328 void hmp_block_job_complete(Monitor *mon, const QDict *qdict) in hmp_block_job_complete() argument
335 hmp_handle_error(mon, error); in hmp_block_job_complete()
338 void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict) in hmp_snapshot_blkdev() argument
341 const char *filename = qdict_get_try_str(qdict, "snapshot-file"); in hmp_snapshot_blkdev()
349 * In the future, if 'snapshot-file' is not specified, the snapshot in hmp_snapshot_blkdev()
352 error_setg(&err, QERR_MISSING_PARAMETER, "snapshot-file"); in hmp_snapshot_blkdev()
360 hmp_handle_error(mon, err); in hmp_snapshot_blkdev()
363 void hmp_snapshot_blkdev_internal(Monitor *mon, const QDict *qdict) in hmp_snapshot_blkdev_internal() argument
370 hmp_handle_error(mon, err); in hmp_snapshot_blkdev_internal()
373 void hmp_snapshot_delete_blkdev_internal(Monitor *mon, const QDict *qdict) in hmp_snapshot_delete_blkdev_internal() argument
381 hmp_handle_error(mon, err); in hmp_snapshot_delete_blkdev_internal()
384 void hmp_nbd_server_start(Monitor *mon, const QDict *qdict) in hmp_nbd_server_start() argument
395 error_setg(&local_err, "-w only valid together with -a"); in hmp_nbd_server_start()
421 for (info = block_list; info; info = info->next) { in hmp_nbd_server_start()
422 if (!info->value->inserted) { in hmp_nbd_server_start()
427 .device = info->value->device, in hmp_nbd_server_start()
443 hmp_handle_error(mon, local_err); in hmp_nbd_server_start()
446 void hmp_nbd_server_add(Monitor *mon, const QDict *qdict) in hmp_nbd_server_add() argument
461 hmp_handle_error(mon, local_err); in hmp_nbd_server_add()
464 void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict) in hmp_nbd_server_remove() argument
472 hmp_handle_error(mon, err); in hmp_nbd_server_remove()
475 void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict) in hmp_nbd_server_stop() argument
480 hmp_handle_error(mon, err); in hmp_nbd_server_stop()
483 void coroutine_fn hmp_block_resize(Monitor *mon, const QDict *qdict) in hmp_block_resize() argument
490 hmp_handle_error(mon, err); in hmp_block_resize()
493 void hmp_block_stream(Monitor *mon, const QDict *qdict) in hmp_block_stream() argument
498 int64_t speed = qdict_get_try_int(qdict, "speed", 0); in hmp_block_stream()
505 hmp_handle_error(mon, error); in hmp_block_stream()
508 void hmp_block_set_io_throttle(Monitor *mon, const QDict *qdict) in hmp_block_set_io_throttle() argument
533 hmp_handle_error(mon, err); in hmp_block_set_io_throttle()
536 void hmp_eject(Monitor *mon, const QDict *qdict) in hmp_eject() argument
543 hmp_handle_error(mon, err); in hmp_eject()
546 void hmp_qemu_io(Monitor *mon, const QDict *qdict) in hmp_qemu_io() argument
573 blk = local_blk = blk_new(bdrv_get_aio_context(bs), 0, BLK_PERM_ALL); in hmp_qemu_io()
575 if (ret < 0) { in hmp_qemu_io()
583 * limiting the use cases of the qemu-io HMP command. in hmp_qemu_io()
591 * draining all requests on it first, but some qemu-iotests cases want to in hmp_qemu_io()
600 * What happens now is that command() in qemu-io-cmds.c can extend the in hmp_qemu_io()
601 * permissions if necessary for the qemu-io command. And they simply stay in hmp_qemu_io()
602 * extended, possibly resulting in a read-only guest device keeping write in hmp_qemu_io()
609 hmp_handle_error(mon, err); in hmp_qemu_io()
612 static void print_block_info(Monitor *mon, BlockInfo *info, in print_block_info() argument
617 assert(!info || !info->inserted || info->inserted == inserted); in print_block_info()
619 if (info && *info->device) { in print_block_info()
620 monitor_puts(mon, info->device); in print_block_info()
621 if (inserted && inserted->node_name) { in print_block_info()
622 monitor_printf(mon, " (%s)", inserted->node_name); in print_block_info()
626 monitor_puts(mon, in print_block_info()
627 inserted && inserted->node_name ? inserted->node_name in print_block_info()
628 : info && info->qdev ? info->qdev in print_block_info()
633 monitor_printf(mon, ": %s (%s%s%s)\n", in print_block_info()
634 inserted->file, in print_block_info()
635 inserted->drv, in print_block_info()
636 inserted->ro ? ", read-only" : "", in print_block_info()
637 inserted->encrypted ? ", encrypted" : ""); in print_block_info()
639 monitor_printf(mon, ": [not inserted]\n"); in print_block_info()
643 if (info->qdev) { in print_block_info()
644 monitor_printf(mon, " Attached to: %s\n", info->qdev); in print_block_info()
646 if (info->has_io_status && info->io_status != BLOCK_DEVICE_IO_STATUS_OK) { in print_block_info()
647 monitor_printf(mon, " I/O status: %s\n", in print_block_info()
648 BlockDeviceIoStatus_str(info->io_status)); in print_block_info()
651 if (info->removable) { in print_block_info()
652 monitor_printf(mon, " Removable device: %slocked, tray %s\n", in print_block_info()
653 info->locked ? "" : "not ", in print_block_info()
654 info->tray_open ? "open" : "closed"); in print_block_info()
663 monitor_printf(mon, " Cache mode: %s%s%s\n", in print_block_info()
664 inserted->cache->writeback ? "writeback" : "writethrough", in print_block_info()
665 inserted->cache->direct ? ", direct" : "", in print_block_info()
666 inserted->cache->no_flush ? ", ignore flushes" : ""); in print_block_info()
668 if (inserted->backing_file) { in print_block_info()
669 monitor_printf(mon, in print_block_info()
672 inserted->backing_file, in print_block_info()
673 inserted->backing_file_depth); in print_block_info()
676 if (inserted->detect_zeroes != BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF) { in print_block_info()
677 monitor_printf(mon, " Detect zeroes: %s\n", in print_block_info()
678 BlockdevDetectZeroesOptions_str(inserted->detect_zeroes)); in print_block_info()
681 if (inserted->bps || inserted->bps_rd || inserted->bps_wr || in print_block_info()
682 inserted->iops || inserted->iops_rd || inserted->iops_wr) in print_block_info()
684 monitor_printf(mon, " I/O throttling: bps=%" PRId64 in print_block_info()
696 inserted->bps, in print_block_info()
697 inserted->bps_rd, in print_block_info()
698 inserted->bps_wr, in print_block_info()
699 inserted->bps_max, in print_block_info()
700 inserted->bps_rd_max, in print_block_info()
701 inserted->bps_wr_max, in print_block_info()
702 inserted->iops, in print_block_info()
703 inserted->iops_rd, in print_block_info()
704 inserted->iops_wr, in print_block_info()
705 inserted->iops_max, in print_block_info()
706 inserted->iops_rd_max, in print_block_info()
707 inserted->iops_wr_max, in print_block_info()
708 inserted->iops_size, in print_block_info()
709 inserted->group); in print_block_info()
713 monitor_printf(mon, "\nImages:\n"); in print_block_info()
714 image_info = inserted->image; in print_block_info()
716 bdrv_node_info_dump(qapi_ImageInfo_base(image_info), 0, false); in print_block_info()
717 if (image_info->backing_image) { in print_block_info()
718 image_info = image_info->backing_image; in print_block_info()
726 void hmp_info_block(Monitor *mon, const QDict *qdict) in hmp_info_block() argument
742 for (info = block_list; info; info = info->next) { in hmp_info_block()
743 if (device && strcmp(device, info->value->device)) { in hmp_info_block()
748 monitor_printf(mon, "\n"); in hmp_info_block()
751 print_block_info(mon, info->value, info->value->inserted, in hmp_info_block()
764 for (blockdev = blockdev_list; blockdev; blockdev = blockdev->next) { in hmp_info_block()
765 assert(blockdev->value->node_name); in hmp_info_block()
766 if (device && strcmp(device, blockdev->value->node_name)) { in hmp_info_block()
771 monitor_printf(mon, "\n"); in hmp_info_block()
774 print_block_info(mon, NULL, blockdev->value, verbose); in hmp_info_block()
779 void hmp_info_blockstats(Monitor *mon, const QDict *qdict) in hmp_info_blockstats() argument
785 for (stats = stats_list; stats; stats = stats->next) { in hmp_info_blockstats()
786 if (!stats->value->device) { in hmp_info_blockstats()
790 monitor_printf(mon, "%s:", stats->value->device); in hmp_info_blockstats()
791 monitor_printf(mon, " rd_bytes=%" PRId64 in hmp_info_blockstats()
803 stats->value->stats->rd_bytes, in hmp_info_blockstats()
804 stats->value->stats->wr_bytes, in hmp_info_blockstats()
805 stats->value->stats->rd_operations, in hmp_info_blockstats()
806 stats->value->stats->wr_operations, in hmp_info_blockstats()
807 stats->value->stats->flush_operations, in hmp_info_blockstats()
808 stats->value->stats->wr_total_time_ns, in hmp_info_blockstats()
809 stats->value->stats->rd_total_time_ns, in hmp_info_blockstats()
810 stats->value->stats->flush_total_time_ns, in hmp_info_blockstats()
811 stats->value->stats->rd_merged, in hmp_info_blockstats()
812 stats->value->stats->wr_merged, in hmp_info_blockstats()
813 stats->value->stats->idle_time_ns); in hmp_info_blockstats()
819 void hmp_info_block_jobs(Monitor *mon, const QDict *qdict) in hmp_info_block_jobs() argument
826 monitor_printf(mon, "No active jobs\n"); in hmp_info_block_jobs()
831 if (list->value->type == JOB_TYPE_STREAM) { in hmp_info_block_jobs()
832 monitor_printf(mon, "Streaming device %s: Completed %" PRId64 in hmp_info_block_jobs()
835 list->value->device, in hmp_info_block_jobs()
836 list->value->offset, in hmp_info_block_jobs()
837 list->value->len, in hmp_info_block_jobs()
838 list->value->speed); in hmp_info_block_jobs()
840 monitor_printf(mon, "Type %s, device %s: Completed %" PRId64 in hmp_info_block_jobs()
843 JobType_str(list->value->type), in hmp_info_block_jobs()
844 list->value->device, in hmp_info_block_jobs()
845 list->value->offset, in hmp_info_block_jobs()
846 list->value->len, in hmp_info_block_jobs()
847 list->value->speed); in hmp_info_block_jobs()
849 list = list->next; in hmp_info_block_jobs()
855 void hmp_info_snapshots(Monitor *mon, const QDict *qdict) in hmp_info_snapshots() argument
893 if (nb_sns < 0) { in hmp_info_snapshots()
894 monitor_printf(mon, "bdrv_snapshot_list: error %d\n", nb_sns); in hmp_info_snapshots()
899 int bs1_nb_sns = 0; in hmp_info_snapshots()
906 if (bs1_nb_sns > 0) { in hmp_info_snapshots()
909 ie->imagename = bdrv_get_device_name(bs1); in hmp_info_snapshots()
910 QTAILQ_INIT(&ie->snapshots); in hmp_info_snapshots()
912 for (i = 0; i < bs1_nb_sns; i++) { in hmp_info_snapshots()
914 se->sn = sn[i]; in hmp_info_snapshots()
915 QTAILQ_INSERT_TAIL(&ie->snapshots, se, next); in hmp_info_snapshots()
923 monitor_printf(mon, "There is no snapshot available.\n"); in hmp_info_snapshots()
928 total = 0; in hmp_info_snapshots()
929 for (i = 0; i < nb_sns; i++) { in hmp_info_snapshots()
935 QTAILQ_FOREACH_SAFE(snapshot_entry, &image_entry->snapshots, in hmp_info_snapshots()
937 if (!strcmp(sn_tab[i].name, snapshot_entry->sn.name)) { in hmp_info_snapshots()
938 QTAILQ_REMOVE(&image_entry->snapshots, snapshot_entry, in hmp_info_snapshots()
946 monitor_printf(mon, "List of snapshots present on all disks:\n"); in hmp_info_snapshots()
948 if (total > 0) { in hmp_info_snapshots()
950 monitor_printf(mon, "\n"); in hmp_info_snapshots()
951 for (i = 0; i < total; i++) { in hmp_info_snapshots()
957 pstrcpy(sn->id_str, sizeof(sn->id_str), "--"); in hmp_info_snapshots()
959 monitor_printf(mon, "\n"); in hmp_info_snapshots()
962 monitor_printf(mon, "None\n"); in hmp_info_snapshots()
966 if (QTAILQ_EMPTY(&image_entry->snapshots)) { in hmp_info_snapshots()
969 monitor_printf(mon, in hmp_info_snapshots()
970 "\nList of partial (non-loadable) snapshots on '%s':\n", in hmp_info_snapshots()
971 image_entry->imagename); in hmp_info_snapshots()
973 monitor_printf(mon, "\n"); in hmp_info_snapshots()
974 QTAILQ_FOREACH(snapshot_entry, &image_entry->snapshots, next) { in hmp_info_snapshots()
975 bdrv_snapshot_dump(&snapshot_entry->sn); in hmp_info_snapshots()
976 monitor_printf(mon, "\n"); in hmp_info_snapshots()
982 QTAILQ_FOREACH_SAFE(snapshot_entry, &image_entry->snapshots, next, in hmp_info_snapshots()
992 void hmp_change_medium(Monitor *mon, const char *device, const char *target, in hmp_change_medium() argument
997 BlockdevChangeReadOnlyMode read_only_mode = 0; in hmp_change_medium()