mirror of
https://github.com/qemu/qemu.git
synced 2025-08-14 03:15:54 +00:00
block: rename and alter bdrv_all_find_snapshot semantics
Currently bdrv_all_find_snapshot() will return 0 if it finds a snapshot, -1 if an error occurs, or if it fails to find a snapshot. New callers to be added want to distinguish between the error scenario and failing to find a snapshot. Rename it to bdrv_all_has_snapshot and make it return -1 on error, 0 if no snapshot is found and 1 if snapshot is found. Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20210204124834.774401-7-berrange@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
c22d644ca7
commit
3d3e9b1f66
@ -954,7 +954,7 @@ void hmp_info_snapshots(Monitor *mon, const QDict *qdict)
|
|||||||
total = 0;
|
total = 0;
|
||||||
for (i = 0; i < nb_sns; i++) {
|
for (i = 0; i < nb_sns; i++) {
|
||||||
SnapshotEntry *next_sn;
|
SnapshotEntry *next_sn;
|
||||||
if (bdrv_all_find_snapshot(sn_tab[i].name, false, NULL, NULL) == 0) {
|
if (bdrv_all_has_snapshot(sn_tab[i].name, false, NULL, NULL) == 1) {
|
||||||
global_snapshots[total] = i;
|
global_snapshots[total] = i;
|
||||||
total++;
|
total++;
|
||||||
QTAILQ_FOREACH(image_entry, &image_list, next) {
|
QTAILQ_FOREACH(image_entry, &image_list, next) {
|
||||||
|
@ -603,9 +603,9 @@ int bdrv_all_goto_snapshot(const char *name,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int bdrv_all_find_snapshot(const char *name,
|
int bdrv_all_has_snapshot(const char *name,
|
||||||
bool has_devices, strList *devices,
|
bool has_devices, strList *devices,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
g_autoptr(GList) bdrvs = NULL;
|
g_autoptr(GList) bdrvs = NULL;
|
||||||
GList *iterbdrvs;
|
GList *iterbdrvs;
|
||||||
@ -627,15 +627,20 @@ int bdrv_all_find_snapshot(const char *name,
|
|||||||
}
|
}
|
||||||
aio_context_release(ctx);
|
aio_context_release(ctx);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
error_setg(errp, "Could not find snapshot '%s' on '%s'",
|
if (ret == -ENOENT) {
|
||||||
name, bdrv_get_device_or_node_name(bs));
|
return 0;
|
||||||
return -1;
|
} else {
|
||||||
|
error_setg_errno(errp, errno,
|
||||||
|
"Could not check snapshot '%s' on '%s'",
|
||||||
|
name, bdrv_get_device_or_node_name(bs));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
iterbdrvs = iterbdrvs->next;
|
iterbdrvs = iterbdrvs->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int bdrv_all_create_snapshot(QEMUSnapshotInfo *sn,
|
int bdrv_all_create_snapshot(QEMUSnapshotInfo *sn,
|
||||||
|
@ -85,9 +85,9 @@ int bdrv_all_delete_snapshot(const char *name,
|
|||||||
int bdrv_all_goto_snapshot(const char *name,
|
int bdrv_all_goto_snapshot(const char *name,
|
||||||
bool has_devices, strList *devices,
|
bool has_devices, strList *devices,
|
||||||
Error **errp);
|
Error **errp);
|
||||||
int bdrv_all_find_snapshot(const char *name,
|
int bdrv_all_has_snapshot(const char *name,
|
||||||
bool has_devices, strList *devices,
|
bool has_devices, strList *devices,
|
||||||
Error **errp);
|
Error **errp);
|
||||||
int bdrv_all_create_snapshot(QEMUSnapshotInfo *sn,
|
int bdrv_all_create_snapshot(QEMUSnapshotInfo *sn,
|
||||||
BlockDriverState *vm_state_bs,
|
BlockDriverState *vm_state_bs,
|
||||||
uint64_t vm_state_size,
|
uint64_t vm_state_size,
|
||||||
|
@ -2977,10 +2977,15 @@ bool load_snapshot(const char *name, Error **errp)
|
|||||||
if (!bdrv_all_can_snapshot(false, NULL, errp)) {
|
if (!bdrv_all_can_snapshot(false, NULL, errp)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ret = bdrv_all_find_snapshot(name, false, NULL, errp);
|
ret = bdrv_all_has_snapshot(name, false, NULL, errp);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (ret == 0) {
|
||||||
|
error_setg(errp, "Snapshot '%s' does not exist in one or more devices",
|
||||||
|
name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bs_vm_state = bdrv_all_find_vmstate_bs(NULL, false, NULL, errp);
|
bs_vm_state = bdrv_all_find_vmstate_bs(NULL, false, NULL, errp);
|
||||||
if (!bs_vm_state) {
|
if (!bs_vm_state) {
|
||||||
|
@ -143,6 +143,7 @@ static char *replay_find_nearest_snapshot(int64_t icount,
|
|||||||
QEMUSnapshotInfo *sn_tab;
|
QEMUSnapshotInfo *sn_tab;
|
||||||
QEMUSnapshotInfo *nearest = NULL;
|
QEMUSnapshotInfo *nearest = NULL;
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
|
int rv;
|
||||||
int nb_sns, i;
|
int nb_sns, i;
|
||||||
AioContext *aio_context;
|
AioContext *aio_context;
|
||||||
|
|
||||||
@ -159,7 +160,10 @@ static char *replay_find_nearest_snapshot(int64_t icount,
|
|||||||
aio_context_release(aio_context);
|
aio_context_release(aio_context);
|
||||||
|
|
||||||
for (i = 0; i < nb_sns; i++) {
|
for (i = 0; i < nb_sns; i++) {
|
||||||
if (bdrv_all_find_snapshot(sn_tab[i].name, false, NULL, NULL) == 0) {
|
rv = bdrv_all_has_snapshot(sn_tab[i].name, false, NULL, NULL);
|
||||||
|
if (rv < 0)
|
||||||
|
goto fail;
|
||||||
|
if (rv == 1) {
|
||||||
if (sn_tab[i].icount != -1ULL
|
if (sn_tab[i].icount != -1ULL
|
||||||
&& sn_tab[i].icount <= icount
|
&& sn_tab[i].icount <= icount
|
||||||
&& (!nearest || nearest->icount < sn_tab[i].icount)) {
|
&& (!nearest || nearest->icount < sn_tab[i].icount)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user