4194124719
Use blk_unref to drop the last reference, which will close the block backend and flush all caches and outstanding writes. This is especially important for restoring to Ceph, as the userspace librbd caches will not be flushed if the application exits immediately, leading to potentially incomplete restores. Reported-by: Eneko Lacunza <elacunza@binovo.es> Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
45 lines
1.5 KiB
Diff
45 lines
1.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Stefan Reiter <s.reiter@proxmox.com>
|
|
Date: Mon, 6 Jul 2020 14:40:12 +0200
|
|
Subject: [PATCH] PVE: fixup pbs-restore API
|
|
|
|
Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
|
|
---
|
|
pbs-restore.c | 10 ++++++++--
|
|
1 file changed, 8 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/pbs-restore.c b/pbs-restore.c
|
|
index d4daee7e91..4d3f925a1b 100644
|
|
--- a/pbs-restore.c
|
|
+++ b/pbs-restore.c
|
|
@@ -161,13 +161,19 @@ int main(int argc, char **argv)
|
|
fprintf(stderr, "connecting to repository '%s'\n", repository);
|
|
}
|
|
char *pbs_error = NULL;
|
|
- ProxmoxRestoreHandle *conn = proxmox_restore_connect(
|
|
+ ProxmoxRestoreHandle *conn = proxmox_restore_new(
|
|
repository, snapshot, password, keyfile, key_password, fingerprint, &pbs_error);
|
|
if (conn == NULL) {
|
|
fprintf(stderr, "restore failed: %s\n", pbs_error);
|
|
return -1;
|
|
}
|
|
|
|
+ int res = proxmox_restore_connect(conn, &pbs_error);
|
|
+ if (res < 0 || pbs_error) {
|
|
+ fprintf(stderr, "restore failed (connection error): %s\n", pbs_error);
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
QDict *options = qdict_new();
|
|
|
|
if (format) {
|
|
@@ -198,7 +204,7 @@ int main(int argc, char **argv)
|
|
fprintf(stderr, "starting to restore snapshot '%s'\n", snapshot);
|
|
fflush(stderr); // ensure we do not get printed after the progress log
|
|
}
|
|
- int res = proxmox_restore_image(
|
|
+ res = proxmox_restore_image(
|
|
conn,
|
|
archive_name,
|
|
write_callback,
|