[libvirt/f17] Latest upstream patch for sanlock readonly/shared disks (bz 828633)
Cole Robinson
crobinso at fedoraproject.org
Thu Jun 28 13:43:34 UTC 2012
commit bf918b0c15ac2fe8860a89978c4ab2301417652a
Author: Cole Robinson <crobinso at redhat.com>
Date: Thu Jun 28 09:43:33 2012 -0400
Latest upstream patch for sanlock readonly/shared disks (bz 828633)
libvirt-sanlock-readonly-option.patch | 153 +++++++++++++++++++++++++++++----
libvirt.spec | 5 +-
2 files changed, 141 insertions(+), 17 deletions(-)
---
diff --git a/libvirt-sanlock-readonly-option.patch b/libvirt-sanlock-readonly-option.patch
index 66df8aa..b483976 100644
--- a/libvirt-sanlock-readonly-option.patch
+++ b/libvirt-sanlock-readonly-option.patch
@@ -78,20 +78,141 @@ index efc35ee..19ab2b3 100644
+# sanlock gains support for shared locks.
+#
+#ignore_readonly_and_shared_disks = 1
-diff --git a/src/locking/test_libvirt_sanlock.aug b/src/locking/test_libvirt_sanlock.aug
-index b5169e1..90ab59f 100644
---- a/src/locking/test_libvirt_sanlock.aug
-+++ b/src/locking/test_libvirt_sanlock.aug
-@@ -4,6 +4,7 @@ module Test_libvirt_sanlock =
- disk_lease_dir = \"/var/lib/libvirt/sanlock\"
- host_id = 1
- require_lease_for_disks = 1
-+ignore_readonly_and_shared_disks = 1
- "
+commit acbd4965c44c4dbc676dfe89aff970052e376073
+Author: Daniel P. Berrange <berrange at redhat.com>
+Date: Thu Jun 21 15:34:46 2012 +0100
+
+ Add support for shared sanlock leases
+
+ A sanlock lease can be marked as shared (rather
+ than exclusive) using SANLK_RES_SHARED flag. This
+ adds support for that flag and ensures that in auto
+ disk mode, any shared disks use shared leases. This
+ also makes any read-only disks be completely
+ ignored.
+
+ These changes remove the need for the option
+
+ ignore_readonly_and_shared_disks
+
+ so that is removed
+
+ Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
+
+diff --git a/src/locking/lock_driver_sanlock.c b/src/locking/lock_driver_sanlock.c
+index 146aefd..16941c9 100644
+--- a/src/locking/lock_driver_sanlock.c
++++ b/src/locking/lock_driver_sanlock.c
+@@ -65,7 +65,6 @@ struct _virLockManagerSanlockDriver {
+ bool requireLeaseForDisks;
+ int hostID;
+ bool autoDiskLease;
+- bool ignoreReadonlyShared;
+ char *autoDiskLeasePath;
+ };
+
+@@ -115,10 +114,6 @@ static int virLockManagerSanlockLoadConfig(const char *configFile)
+ CHECK_TYPE("auto_disk_leases", VIR_CONF_LONG);
+ if (p) driver->autoDiskLease = p->l;
+
+- p = virConfGetValue(conf, "ignore_readonly_and_shared_disks");
+- CHECK_TYPE("ignore_readonly_and_shared_disks", VIR_CONF_LONG);
+- if (p) driver->ignoreReadonlyShared = p->l;
+-
+ p = virConfGetValue(conf, "disk_lease_dir");
+ CHECK_TYPE("disk_lease_dir", VIR_CONF_STRING);
+ if (p && p->str) {
+@@ -428,7 +423,8 @@ static int virLockManagerSanlockDiskLeaseName(const char *path,
+ static int virLockManagerSanlockAddLease(virLockManagerPtr lock,
+ const char *name,
+ size_t nparams,
+- virLockManagerParamPtr params)
++ virLockManagerParamPtr params,
++ bool shared)
+ {
+ virLockManagerSanlockPrivatePtr priv = lock->privateData;
+ int ret = -1;
+@@ -440,6 +436,7 @@ static int virLockManagerSanlockAddLease(virLockManagerPtr lock,
+ goto cleanup;
+ }
+
++ res->flags = shared ? SANLK_RES_SHARED : 0;
+ res->num_disks = 1;
+ if (!virStrcpy(res->name, name, SANLK_NAME_LEN)) {
+ virLockError(VIR_ERR_INTERNAL_ERROR,
+@@ -485,7 +482,8 @@ cleanup:
+ static int virLockManagerSanlockAddDisk(virLockManagerPtr lock,
+ const char *name,
+ size_t nparams,
+- virLockManagerParamPtr params ATTRIBUTE_UNUSED)
++ virLockManagerParamPtr params ATTRIBUTE_UNUSED,
++ bool shared)
+ {
+ virLockManagerSanlockPrivatePtr priv = lock->privateData;
+ int ret = -1;
+@@ -503,6 +501,7 @@ static int virLockManagerSanlockAddDisk(virLockManagerPtr lock,
+ goto cleanup;
+ }
+
++ res->flags = shared ? SANLK_RES_SHARED : 0;
+ res->num_disks = 1;
+ if (virLockManagerSanlockDiskLeaseName(name, res->name, SANLK_NAME_LEN) < 0)
+ goto cleanup;
+@@ -630,27 +629,15 @@ static int virLockManagerSanlockAddResource(virLockManagerPtr lock,
+ return -1;
+ }
+
+- if ((flags & (VIR_LOCK_MANAGER_RESOURCE_READONLY |
+- VIR_LOCK_MANAGER_RESOURCE_SHARED)) &&
+- driver->ignoreReadonlyShared) {
+- return 0;
+- }
+-
+- if (flags & VIR_LOCK_MANAGER_RESOURCE_READONLY) {
+- virLockError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+- _("Readonly leases are not supported"));
+- return -1;
+- }
+- if (flags & VIR_LOCK_MANAGER_RESOURCE_SHARED) {
+- virLockError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+- _("Shareable leases are not supported"));
+- return -1;
+- }
++ /* Treat R/O resources as a no-op lock request */
++ if (flags & VIR_LOCK_MANAGER_RESOURCE_READONLY)
++ return 0;
- test Libvirt_sanlock.lns get conf =
-@@ -11,3 +12,4 @@ require_lease_for_disks = 1
- { "disk_lease_dir" = "/var/lib/libvirt/sanlock" }
- { "host_id" = "1" }
- { "require_lease_for_disks" = "1" }
-+{ "ignore_readonly_and_shared_disks" = "1" }
+ switch (type) {
+ case VIR_LOCK_MANAGER_RESOURCE_TYPE_DISK:
+ if (driver->autoDiskLease) {
+- if (virLockManagerSanlockAddDisk(lock, name, nparams, params) < 0)
++ if (virLockManagerSanlockAddDisk(lock, name, nparams, params,
++ !!(flags & VIR_LOCK_MANAGER_RESOURCE_SHARED)) < 0)
+ return -1;
+
+ if (virLockManagerSanlockCreateLease(priv->res_args[priv->res_count-1]) < 0)
+@@ -664,7 +651,8 @@ static int virLockManagerSanlockAddResource(virLockManagerPtr lock,
+ break;
+
+ case VIR_LOCK_MANAGER_RESOURCE_TYPE_LEASE:
+- if (virLockManagerSanlockAddLease(lock, name, nparams, params) < 0)
++ if (virLockManagerSanlockAddLease(lock, name, nparams, params,
++ !!(flags & VIR_LOCK_MANAGER_RESOURCE_SHARED)) < 0)
+ return -1;
+ break;
+
+diff --git a/src/locking/sanlock.conf b/src/locking/sanlock.conf
+index 19ab2b3..efc35ee 100644
+--- a/src/locking/sanlock.conf
++++ b/src/locking/sanlock.conf
+@@ -52,10 +52,3 @@
+ # to enabled, otherwise it defaults to disabled.
+ #
+ #require_lease_for_disks = 1
+-
+-#
+-# Enable this flag to have sanlock ignore readonly and shared disks.
+-# If disabled, then this rejects attempts to share resources until
+-# sanlock gains support for shared locks.
+-#
+-#ignore_readonly_and_shared_disks = 1
diff --git a/libvirt.spec b/libvirt.spec
index e0526e3..3f958da 100644
--- a/libvirt.spec
+++ b/libvirt.spec
@@ -274,7 +274,7 @@
Summary: Library providing a simple virtualization API
Name: libvirt
Version: 0.9.11.4
-Release: 2%{?dist}%{?extra_release}
+Release: 3%{?dist}%{?extra_release}
License: LGPLv2+
Group: Development/Libraries
@@ -1489,6 +1489,9 @@ rm -f $RPM_BUILD_ROOT%{_sysconfdir}/sysctl.d/libvirtd
%endif
%changelog
+* Thu Jun 28 2012 Cole Robinson <crobinso at redhat.com> - 0.9.11.4-3
+- Latest upstream patch for sanlock readonly/shared disks (bz 828633)
+
* Tue Jun 19 2012 Cole Robinson <crobinso at redhat.com> - 0.9.11.4-2
- sanlock: Add param to ignore readonly/shared disks (bz 828633)
More information about the scm-commits
mailing list