aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dlm/lock.c
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2012-04-04 09:49:15 -0500
committerDavid Teigland <teigland@redhat.com>2012-04-23 11:30:59 -0500
commit53ad1c980d4fb450722a575ca17c188808939340 (patch)
tree9c9829d7aff8eab4b7c407f51227ed873b3df1bb /fs/dlm/lock.c
parentdd775ae2549217d3ae09363e3edb305d0fa19928 (diff)
downloadkernel_goldelico_gta04-53ad1c980d4fb450722a575ca17c188808939340.zip
kernel_goldelico_gta04-53ad1c980d4fb450722a575ca17c188808939340.tar.gz
kernel_goldelico_gta04-53ad1c980d4fb450722a575ca17c188808939340.tar.bz2
dlm: fix QUECVT when convert queue is empty
The QUECVT flag should not prevent conversions from being granted immediately when the convert queue is empty. Signed-off-by: David Teigland <teigland@redhat.com>
Diffstat (limited to 'fs/dlm/lock.c')
-rw-r--r--fs/dlm/lock.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c
index fa5c07d..4c58d4a 100644
--- a/fs/dlm/lock.c
+++ b/fs/dlm/lock.c
@@ -1737,6 +1737,18 @@ static int _can_be_granted(struct dlm_rsb *r, struct dlm_lkb *lkb, int now)
return 1;
/*
+ * Even if the convert is compat with all granted locks,
+ * QUECVT forces it behind other locks on the convert queue.
+ */
+
+ if (now && conv && (lkb->lkb_exflags & DLM_LKF_QUECVT)) {
+ if (list_empty(&r->res_convertqueue))
+ return 1;
+ else
+ goto out;
+ }
+
+ /*
* The NOORDER flag is set to avoid the standard vms rules on grant
* order.
*/