sanlock: fix locking for readonly devices

Add ignore param for readonly and shared disk in sanlock
This commit is contained in:
David Weber 2012-05-14 09:53:02 +00:00 committed by Eric Blake
parent 891a7f9e23
commit b8012ce931
5 changed files with 23 additions and 1 deletions

View File

@ -237,6 +237,7 @@ Patches have also been contributed by:
Eugen Feller <eugen.feller@inria.fr>
Dmitry Guryanov <dguryanov@parallels.com>
William Jon McCann <william.jon.mccann@gmail.com>
David Weber <wb@munzinger.de>
[....send patches to get your name here....]

View File

@ -21,6 +21,7 @@ module Libvirt_sanlock =
| bool_entry "auto_disk_leases"
| int_entry "host_id"
| bool_entry "require_lease_for_disks"
| bool_entry "ignore_readonly_and_shared_disks"
let comment = [ label "#comment" . del /#[ \t]*/ "# " . store /([^ \t\n][^\n]*)?/ . del /\n/ "\n" ]
let empty = [ label "#empty" . eol ]

View File

@ -1,7 +1,7 @@
/*
* lock_driver_sanlock.c: A lock driver for Sanlock
*
* Copyright (C) 2010-2011 Red Hat, Inc.
* Copyright (C) 2010-2012 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -65,6 +65,7 @@ struct _virLockManagerSanlockDriver {
bool requireLeaseForDisks;
int hostID;
bool autoDiskLease;
bool ignoreReadonlyShared;
char *autoDiskLeasePath;
};
@ -114,6 +115,10 @@ 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) {
@ -625,6 +630,12 @@ 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"));

View File

@ -52,3 +52,10 @@
# 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

View File

@ -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
"
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" }