linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* dlm: Don't send callback to node making lock request when "try 1cb" fails
@ 2010-09-03  9:40 Steven Whitehouse
  2010-09-03 15:13 ` David Teigland
  0 siblings, 1 reply; 2+ messages in thread
From: Steven Whitehouse @ 2010-09-03  9:40 UTC (permalink / raw)
  To: David Teigland; +Cc: cluster-devel, linux-kernel


When converting a lock, an lkb is in the granted state and also being used
to request a new state. In the case that the conversion was a "try 1cb"
type which has failed, and if the new state was incompatible with the old
state, a callback was being generated to the requesting node. This is
incorrect as callbacks should only be sent to all the other nodes holding
blocking locks. The requesting node should receive the normal (failed)
response to its "try 1cb" conversion request only.

This was discovered while debugging a performance problem on GFS2, however
this fix also speeds up GFS as well. In the GFS2 case the performance gain
is over 10x for cases of write activity to an inode whose glock is cached
on another, idle (wrt that glock) node.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Tested-by: Abhijith Das <adas@redhat.com>

diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c
index 031dbe3..dae42e1 100644
--- a/fs/dlm/lock.c
+++ b/fs/dlm/lock.c
@@ -1846,6 +1846,8 @@ static void send_bast_queue(struct dlm_rsb *r, struct list_head *head,
 	struct dlm_lkb *gr;
 
 	list_for_each_entry(gr, head, lkb_statequeue) {
+		if (gr == lkb)
+			continue;
 		if (gr->lkb_bastfn && modes_require_bast(gr, lkb)) {
 			queue_bast(r, gr, lkb->lkb_rqmode);
 			gr->lkb_highbast = lkb->lkb_rqmode;



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: dlm: Don't send callback to node making lock request when "try 1cb" fails
  2010-09-03  9:40 dlm: Don't send callback to node making lock request when "try 1cb" fails Steven Whitehouse
@ 2010-09-03 15:13 ` David Teigland
  0 siblings, 0 replies; 2+ messages in thread
From: David Teigland @ 2010-09-03 15:13 UTC (permalink / raw)
  To: Steven Whitehouse; +Cc: cluster-devel, linux-kernel

On Fri, Sep 03, 2010 at 10:40:16AM +0100, Steven Whitehouse wrote:
> 
> When converting a lock, an lkb is in the granted state and also being used
> to request a new state. In the case that the conversion was a "try 1cb"
> type which has failed, and if the new state was incompatible with the old
> state, a callback was being generated to the requesting node. This is
> incorrect as callbacks should only be sent to all the other nodes holding
> blocking locks. The requesting node should receive the normal (failed)
> response to its "try 1cb" conversion request only.
> 
> This was discovered while debugging a performance problem on GFS2, however
> this fix also speeds up GFS as well. In the GFS2 case the performance gain
> is over 10x for cases of write activity to an inode whose glock is cached
> on another, idle (wrt that glock) node.

Thanks, I added a comment and queued it up.
Dave


>From 314dd2a05340fffbe217c5e40ec6c3bd1d07bf89 Mon Sep 17 00:00:00 2001
From: Steven Whitehouse <swhiteho@redhat.com>
Date: Fri, 3 Sep 2010 10:07:48 -0500
Subject: [PATCH] dlm: Don't send callback to node making lock request when "try 1cb" fails

When converting a lock, an lkb is in the granted state and also being used
to request a new state. In the case that the conversion was a "try 1cb"
type which has failed, and if the new state was incompatible with the old
state, a callback was being generated to the requesting node. This is
incorrect as callbacks should only be sent to all the other nodes holding
blocking locks. The requesting node should receive the normal (failed)
response to its "try 1cb" conversion request only.

This was discovered while debugging a performance problem on GFS2, however
this fix also speeds up GFS as well. In the GFS2 case the performance gain
is over 10x for cases of write activity to an inode whose glock is cached
on another, idle (wrt that glock) node.

(comment added, dct)

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Tested-by: Abhijith Das <adas@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>
---
 fs/dlm/lock.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c
index 031dbe3..64e5f3e 100644
--- a/fs/dlm/lock.c
+++ b/fs/dlm/lock.c
@@ -1846,6 +1846,9 @@ static void send_bast_queue(struct dlm_rsb *r, struct list_head *head,
 	struct dlm_lkb *gr;
 
 	list_for_each_entry(gr, head, lkb_statequeue) {
+		/* skip self when sending basts to convertqueue */
+		if (gr == lkb)
+			continue;
 		if (gr->lkb_bastfn && modes_require_bast(gr, lkb)) {
 			queue_bast(r, gr, lkb->lkb_rqmode);
 			gr->lkb_highbast = lkb->lkb_rqmode;
-- 
1.7.1.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2010-09-03 15:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-09-03  9:40 dlm: Don't send callback to node making lock request when "try 1cb" fails Steven Whitehouse
2010-09-03 15:13 ` David Teigland

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).