qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 2/2] rbd: disable unsupported librbd functions at ru


From: Josh Durgin
Subject: [Qemu-devel] [PATCH 2/2] rbd: disable unsupported librbd functions at runtime
Date: Thu, 4 Apr 2013 01:35:15 -0700

QEMU may be compiled against a newer version of librbd, but run and
dynamically linked with an older version that does not support these
functions. Declare them as weak symbols so they can be checked for
existence at runtime.

Only rbd_aio_discard, rbd_aio_flush, and rbd_flush were added after
the initial version of librbd, so only they need to be checked.

Signed-off-by: Josh Durgin <address@hidden>
---
 block/rbd.c |   19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/block/rbd.c b/block/rbd.c
index 037d82b..69a339a 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -44,6 +44,15 @@
  * leading "\".
  */
 
+/*
+ * Treat newer librbd functions as weak symbols so we can detect
+ * whether they're supported at runtime, and disable their use
+ * if they aren't available.
+ */
+#pragma weak rbd_aio_discard
+#pragma weak rbd_aio_flush
+#pragma weak rbd_flush
+
 /* rbd_aio_discard added in 0.1.2 */
 #if LIBRBD_VERSION_CODE >= LIBRBD_VERSION(0, 1, 2)
 #define LIBRBD_SUPPORTS_DISCARD
@@ -970,6 +979,7 @@ static BlockDriver bdrv_rbd = {
     .bdrv_aio_readv         = qemu_rbd_aio_readv,
     .bdrv_aio_writev        = qemu_rbd_aio_writev,
 
+    /* select which of these to use at runtime in bdrv_rbd_init */
     .bdrv_aio_flush         = qemu_rbd_aio_flush,
     .bdrv_co_flush_to_disk  = qemu_rbd_co_flush,
 
@@ -985,6 +995,15 @@ static BlockDriver bdrv_rbd = {
 
 static void bdrv_rbd_init(void)
 {
+    if (!rbd_flush || rbd_aio_flush) {
+        bdrv_rbd.bdrv_co_flush_to_disk = NULL;
+    }
+    if (!rbd_aio_flush) {
+        bdrv_rbd.bdrv_aio_flush = NULL;
+    }
+    if (!rbd_aio_discard) {
+        bdrv_rbd.bdrv_aio_discard = NULL;
+    }
     bdrv_register(&bdrv_rbd);
 }
 
-- 
1.7.9.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]