1de08c606SWenchao Xia /* 2de08c606SWenchao Xia * Block layer snapshot related functions 3de08c606SWenchao Xia * 4de08c606SWenchao Xia * Copyright (c) 2003-2008 Fabrice Bellard 5de08c606SWenchao Xia * 6de08c606SWenchao Xia * Permission is hereby granted, free of charge, to any person obtaining a copy 7de08c606SWenchao Xia * of this software and associated documentation files (the "Software"), to deal 8de08c606SWenchao Xia * in the Software without restriction, including without limitation the rights 9de08c606SWenchao Xia * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10de08c606SWenchao Xia * copies of the Software, and to permit persons to whom the Software is 11de08c606SWenchao Xia * furnished to do so, subject to the following conditions: 12de08c606SWenchao Xia * 13de08c606SWenchao Xia * The above copyright notice and this permission notice shall be included in 14de08c606SWenchao Xia * all copies or substantial portions of the Software. 15de08c606SWenchao Xia * 16de08c606SWenchao Xia * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17de08c606SWenchao Xia * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18de08c606SWenchao Xia * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19de08c606SWenchao Xia * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20de08c606SWenchao Xia * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21de08c606SWenchao Xia * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22de08c606SWenchao Xia * THE SOFTWARE. 23de08c606SWenchao Xia */ 24de08c606SWenchao Xia 25de08c606SWenchao Xia #ifndef SNAPSHOT_H 26de08c606SWenchao Xia #define SNAPSHOT_H 27de08c606SWenchao Xia 28*a32e7818SKevin Wolf #include "block/graph-lock.h" 29cf3a74c9SDaniel P. Berrangé #include "qapi/qapi-builtin-types.h" 308c116b0eSWenchao Xia 318c116b0eSWenchao Xia #define SNAPSHOT_OPT_BASE "snapshot." 328c116b0eSWenchao Xia #define SNAPSHOT_OPT_ID "snapshot.id" 338c116b0eSWenchao Xia #define SNAPSHOT_OPT_NAME "snapshot.name" 348c116b0eSWenchao Xia 358c116b0eSWenchao Xia extern QemuOptsList internal_snapshot_opts; 36de08c606SWenchao Xia 37de08c606SWenchao Xia typedef struct QEMUSnapshotInfo { 38de08c606SWenchao Xia char id_str[128]; /* unique snapshot id */ 39de08c606SWenchao Xia /* the following fields are informative. They are not needed for 40de08c606SWenchao Xia the consistency of the snapshot */ 41de08c606SWenchao Xia char name[256]; /* user chosen name */ 42de08c606SWenchao Xia uint64_t vm_state_size; /* VM state info size */ 43de08c606SWenchao Xia uint32_t date_sec; /* UTC date of the snapshot */ 44de08c606SWenchao Xia uint32_t date_nsec; 45de08c606SWenchao Xia uint64_t vm_clock_nsec; /* VM clock relative to boot */ 46b39847a5SPavel Dovgalyuk uint64_t icount; /* record/replay step */ 47de08c606SWenchao Xia } QEMUSnapshotInfo; 48de08c606SWenchao Xia 496b573efeSEmanuele Giuseppe Esposito /* 506b573efeSEmanuele Giuseppe Esposito * Global state (GS) API. These functions run under the BQL. 516b573efeSEmanuele Giuseppe Esposito * 526b573efeSEmanuele Giuseppe Esposito * See include/block/block-global-state.h for more information about 536b573efeSEmanuele Giuseppe Esposito * the GS API. 546b573efeSEmanuele Giuseppe Esposito */ 556b573efeSEmanuele Giuseppe Esposito 56de08c606SWenchao Xia int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info, 57de08c606SWenchao Xia const char *name); 582ea1dd75SWenchao Xia bool bdrv_snapshot_find_by_id_and_name(BlockDriverState *bs, 592ea1dd75SWenchao Xia const char *id, 602ea1dd75SWenchao Xia const char *name, 612ea1dd75SWenchao Xia QEMUSnapshotInfo *sn_info, 622ea1dd75SWenchao Xia Error **errp); 63*a32e7818SKevin Wolf 64*a32e7818SKevin Wolf int GRAPH_RDLOCK bdrv_can_snapshot(BlockDriverState *bs); 65*a32e7818SKevin Wolf 66*a32e7818SKevin Wolf int GRAPH_RDLOCK 67*a32e7818SKevin Wolf bdrv_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info); 68*a32e7818SKevin Wolf 69*a32e7818SKevin Wolf int GRAPH_UNLOCKED 70*a32e7818SKevin Wolf bdrv_snapshot_goto(BlockDriverState *bs, const char *snapshot_id, Error **errp); 71*a32e7818SKevin Wolf 72*a32e7818SKevin Wolf int GRAPH_RDLOCK 73*a32e7818SKevin Wolf bdrv_snapshot_delete(BlockDriverState *bs, const char *snapshot_id, 74*a32e7818SKevin Wolf const char *name, Error **errp); 75*a32e7818SKevin Wolf 76de08c606SWenchao Xia int bdrv_snapshot_list(BlockDriverState *bs, 77de08c606SWenchao Xia QEMUSnapshotInfo **psn_info); 78de08c606SWenchao Xia int bdrv_snapshot_load_tmp(BlockDriverState *bs, 797b4c4781SWenchao Xia const char *snapshot_id, 807b4c4781SWenchao Xia const char *name, 817b4c4781SWenchao Xia Error **errp); 827b4c4781SWenchao Xia int bdrv_snapshot_load_tmp_by_id_or_name(BlockDriverState *bs, 837b4c4781SWenchao Xia const char *id_or_name, 847b4c4781SWenchao Xia Error **errp); 85e9ff957aSDenis V. Lunev 86e9ff957aSDenis V. Lunev 876b573efeSEmanuele Giuseppe Esposito /* 886b573efeSEmanuele Giuseppe Esposito * Group operations. All block drivers are involved. 896b573efeSEmanuele Giuseppe Esposito */ 90e9ff957aSDenis V. Lunev 91cf3a74c9SDaniel P. Berrangé bool bdrv_all_can_snapshot(bool has_devices, strList *devices, 92cf3a74c9SDaniel P. Berrangé Error **errp); 93cf3a74c9SDaniel P. Berrangé int bdrv_all_delete_snapshot(const char *name, 94cf3a74c9SDaniel P. Berrangé bool has_devices, strList *devices, 95cf3a74c9SDaniel P. Berrangé Error **errp); 96cf3a74c9SDaniel P. Berrangé int bdrv_all_goto_snapshot(const char *name, 97cf3a74c9SDaniel P. Berrangé bool has_devices, strList *devices, 98cf3a74c9SDaniel P. Berrangé Error **errp); 993d3e9b1fSDaniel P. Berrangé int bdrv_all_has_snapshot(const char *name, 100cf3a74c9SDaniel P. Berrangé bool has_devices, strList *devices, 101cf3a74c9SDaniel P. Berrangé Error **errp); 102a9085f9bSDenis V. Lunev int bdrv_all_create_snapshot(QEMUSnapshotInfo *sn, 103a9085f9bSDenis V. Lunev BlockDriverState *vm_state_bs, 104a9085f9bSDenis V. Lunev uint64_t vm_state_size, 105cf3a74c9SDaniel P. Berrangé bool has_devices, 106cf3a74c9SDaniel P. Berrangé strList *devices, 107e26f98e2SDaniel P. Berrangé Error **errp); 108e9ff957aSDenis V. Lunev 109c22d644cSDaniel P. Berrangé BlockDriverState *bdrv_all_find_vmstate_bs(const char *vmstate_bs, 110c22d644cSDaniel P. Berrangé bool has_devices, strList *devices, 111cf3a74c9SDaniel P. Berrangé Error **errp); 1127cb14481SDenis V. Lunev 113de08c606SWenchao Xia #endif 114