73 lines
2.6 KiB
Diff
73 lines
2.6 KiB
Diff
|
From 1e47a795e7a06152cfd8b6d7c80692875d2e00b9 Mon Sep 17 00:00:00 2001
|
||
|
Message-ID: <1e47a795e7a06152cfd8b6d7c80692875d2e00b9.1738940191.git.jdenemar@redhat.com>
|
||
|
From: Peter Krempa <pkrempa@redhat.com>
|
||
|
Date: Mon, 27 Jan 2025 16:20:43 +0100
|
||
|
Subject: [PATCH] virStorageSource: Add fields for storing last I/O error
|
||
|
message
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
Hypervisors may report a I/O error message (unstable; for human use)
|
||
|
to libvirt. In order to store it with the appropriate virStorageSource
|
||
|
so that it can be later queried we need to add fields to
|
||
|
virStorageSource to store the timestamp and message.
|
||
|
|
||
|
The message is deliberately not copied via virStorageSourceCopy.
|
||
|
|
||
|
The messages are also not serialized to the status XML as losing them on
|
||
|
a daemon restart as they're likely to be stale anyways.
|
||
|
|
||
|
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||
|
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||
|
(cherry picked from commit 2f6c9fa4f6f4c0a36ffc2b24892eee78e1e4cf53)
|
||
|
|
||
|
https://issues.redhat.com/browse/RHEL-77884
|
||
|
---
|
||
|
src/conf/storage_source_conf.c | 5 +++++
|
||
|
src/conf/storage_source_conf.h | 6 ++++++
|
||
|
2 files changed, 11 insertions(+)
|
||
|
|
||
|
diff --git a/src/conf/storage_source_conf.c b/src/conf/storage_source_conf.c
|
||
|
index 2b658dd485..ca956a1b7c 100644
|
||
|
--- a/src/conf/storage_source_conf.c
|
||
|
+++ b/src/conf/storage_source_conf.c
|
||
|
@@ -917,6 +917,8 @@ virStorageSourceCopy(const virStorageSource *src,
|
||
|
def->nfs_uid = src->nfs_uid;
|
||
|
def->nfs_gid = src->nfs_gid;
|
||
|
|
||
|
+ /* 'ioerror_timestamp' and 'ioerror_message' are deliberately not copied */
|
||
|
+
|
||
|
return g_steal_pointer(&def);
|
||
|
}
|
||
|
|
||
|
@@ -1203,6 +1205,9 @@ virStorageSourceClear(virStorageSource *def)
|
||
|
|
||
|
g_clear_pointer(&def->fdtuple, g_object_unref);
|
||
|
|
||
|
+ VIR_FREE(def->ioerror_timestamp);
|
||
|
+ VIR_FREE(def->ioerror_message);
|
||
|
+
|
||
|
/* clear everything except the class header as the object APIs
|
||
|
* will break otherwise */
|
||
|
memset((char *) def + sizeof(def->parent), 0,
|
||
|
diff --git a/src/conf/storage_source_conf.h b/src/conf/storage_source_conf.h
|
||
|
index 9463722518..e6cbb93c06 100644
|
||
|
--- a/src/conf/storage_source_conf.h
|
||
|
+++ b/src/conf/storage_source_conf.h
|
||
|
@@ -445,6 +445,12 @@ struct _virStorageSource {
|
||
|
* to do this decision.
|
||
|
*/
|
||
|
bool seclabelSkipRemember;
|
||
|
+
|
||
|
+ /* Last instance of hypervisor originated I/O error message and timestamp.
|
||
|
+ * The error stored here is not designed to be stable. The message
|
||
|
+ * is also not copied via virStorageSourceCopy */
|
||
|
+ char *ioerror_timestamp;
|
||
|
+ char *ioerror_message;
|
||
|
};
|
||
|
|
||
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virStorageSource, virObjectUnref);
|
||
|
--
|
||
|
2.48.1
|