You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.7 KiB
55 lines
1.7 KiB
From 513d210cdbccfdaadb0cf7f09ba97d563aac52bb Mon Sep 17 00:00:00 2001 |
|
From: Mike Christie <mchristi@redhat.com> |
|
Date: Wed, 31 Aug 2016 15:40:16 -0500 |
|
Subject: [PATCH 10/11] rbd: check for exclusive lock enabled |
|
|
|
Only attach the checker if the rbd image has the exclusive lock |
|
enabled. |
|
|
|
Signed-off-by: Mike Christie <mchristi@redhat.com> |
|
--- |
|
libmultipath/checkers/rbd.c | 14 +++++++++++++- |
|
1 file changed, 13 insertions(+), 1 deletion(-) |
|
|
|
diff --git a/libmultipath/checkers/rbd.c b/libmultipath/checkers/rbd.c |
|
index a6f3405..e34bf53 100644 |
|
--- a/libmultipath/checkers/rbd.c |
|
+++ b/libmultipath/checkers/rbd.c |
|
@@ -33,6 +33,8 @@ typedef int (thread_fn)(struct rbd_checker_context *ct, char *msg); |
|
|
|
#define RBD_MSG(msg, fmt, args...) snprintf(msg, CHECKER_MSG_LEN, fmt, ##args); |
|
|
|
+#define RBD_FEATURE_EXCLUSIVE_LOCK (1 << 2) |
|
+ |
|
struct rbd_checker_context { |
|
int rbd_bus_id; |
|
char *client_addr; |
|
@@ -65,8 +67,9 @@ int libcheck_init(struct checker * c) |
|
struct udev_device *bus_dev; |
|
struct udev *udev; |
|
struct stat sb; |
|
- const char *block_name, *addr, *config_info; |
|
+ const char *block_name, *addr, *config_info, *features_str; |
|
const char *image, *pool, *snap, *username; |
|
+ uint64_t features = 0; |
|
char sysfs_path[PATH_SIZE]; |
|
int ret; |
|
|
|
@@ -119,6 +122,15 @@ int libcheck_init(struct checker * c) |
|
if (!ct->client_addr) |
|
goto free_dev; |
|
|
|
+ features_str = udev_device_get_sysattr_value(bus_dev, "features"); |
|
+ if (!features_str) |
|
+ goto free_addr; |
|
+ features = strtoll(features_str, NULL, 16); |
|
+ if (!(features & RBD_FEATURE_EXCLUSIVE_LOCK)) { |
|
+ condlog(3, "Exclusive lock not set."); |
|
+ goto free_addr; |
|
+ } |
|
+ |
|
config_info = udev_device_get_sysattr_value(bus_dev, "config_info"); |
|
if (!config_info) |
|
goto free_addr; |
|
-- |
|
1.8.3.1
|
|
|