xref: /openbmc/qemu/include/block/snapshot.h (revision 6370d13c62c300826f8eb80e4ed9d2e67bad3fa7)
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