* [Cluster-devel] [GFS2 Patch] GFS2: recovery stuck on transaction lock
[not found] <1988721810.775501277307620580.JavaMail.root@zmail06.collab.prod.int.phx2.redhat.com>
@ 2010-06-23 15:44 ` Bob Peterson
2010-06-25 9:53 ` Steven Whitehouse
0 siblings, 1 reply; 2+ messages in thread
From: Bob Peterson @ 2010-06-23 15:44 UTC (permalink / raw)
To: cluster-devel.redhat.com
Hi,
This patch fixes bugzilla bug #590878: GFS2: recovery stuck on
transaction lock. We set the frozen flag on the glock when we receive
a completion that cannot be delivered due to blocked locks. At that
point we check to see whether the first waiting holder has the noexp
flag set. If the noexp lock is queued later, then we need to unfreeze
the glock at that point in time, namely, in the glock work function.
This patch was originally written by Steve Whitehouse, but since
he's on holiday, I'm submitting it. It's been well tested with a
complex recovery test called revolver.
Regards,
Bob Peterson
Red Hat GFS
Signed-off-by: Steve Whitehouse <swhiteho@redhat.com>
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
--
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index ddcdbf4..dbab3fd 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -706,8 +706,18 @@ static void glock_work_func(struct work_struct *work)
{
unsigned long delay = 0;
struct gfs2_glock *gl = container_of(work, struct gfs2_glock, gl_work.work);
+ struct gfs2_holder *gh;
int drop_ref = 0;
+ if (unlikely(test_bit(GLF_FROZEN, &gl->gl_flags))) {
+ spin_lock(&gl->gl_spin);
+ gh = find_first_waiter(gl);
+ if (gh && (gh->gh_flags & LM_FLAG_NOEXP) &&
+ test_and_clear_bit(GLF_FROZEN, &gl->gl_flags))
+ set_bit(GLF_REPLY_PENDING, &gl->gl_flags);
+ spin_unlock(&gl->gl_spin);
+ }
+
if (test_and_clear_bit(GLF_REPLY_PENDING, &gl->gl_flags)) {
finish_xmote(gl, gl->gl_reply);
drop_ref = 1;
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [Cluster-devel] [GFS2 Patch] GFS2: recovery stuck on transaction lock
2010-06-23 15:44 ` [Cluster-devel] [GFS2 Patch] GFS2: recovery stuck on transaction lock Bob Peterson
@ 2010-06-25 9:53 ` Steven Whitehouse
0 siblings, 0 replies; 2+ messages in thread
From: Steven Whitehouse @ 2010-06-25 9:53 UTC (permalink / raw)
To: cluster-devel.redhat.com
Hi,
Now in the -nmw tree. Thanks,
Steve.
On Wed, 2010-06-23 at 11:44 -0400, Bob Peterson wrote:
> Hi,
>
> This patch fixes bugzilla bug #590878: GFS2: recovery stuck on
> transaction lock. We set the frozen flag on the glock when we receive
> a completion that cannot be delivered due to blocked locks. At that
> point we check to see whether the first waiting holder has the noexp
> flag set. If the noexp lock is queued later, then we need to unfreeze
> the glock at that point in time, namely, in the glock work function.
>
> This patch was originally written by Steve Whitehouse, but since
> he's on holiday, I'm submitting it. It's been well tested with a
> complex recovery test called revolver.
>
> Regards,
>
> Bob Peterson
> Red Hat GFS
>
> Signed-off-by: Steve Whitehouse <swhiteho@redhat.com>
> Signed-off-by: Bob Peterson <rpeterso@redhat.com>
> --
> diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
> index ddcdbf4..dbab3fd 100644
> --- a/fs/gfs2/glock.c
> +++ b/fs/gfs2/glock.c
> @@ -706,8 +706,18 @@ static void glock_work_func(struct work_struct *work)
> {
> unsigned long delay = 0;
> struct gfs2_glock *gl = container_of(work, struct gfs2_glock, gl_work.work);
> + struct gfs2_holder *gh;
> int drop_ref = 0;
>
> + if (unlikely(test_bit(GLF_FROZEN, &gl->gl_flags))) {
> + spin_lock(&gl->gl_spin);
> + gh = find_first_waiter(gl);
> + if (gh && (gh->gh_flags & LM_FLAG_NOEXP) &&
> + test_and_clear_bit(GLF_FROZEN, &gl->gl_flags))
> + set_bit(GLF_REPLY_PENDING, &gl->gl_flags);
> + spin_unlock(&gl->gl_spin);
> + }
> +
> if (test_and_clear_bit(GLF_REPLY_PENDING, &gl->gl_flags)) {
> finish_xmote(gl, gl->gl_reply);
> drop_ref = 1;
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-06-25 9:53 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1988721810.775501277307620580.JavaMail.root@zmail06.collab.prod.int.phx2.redhat.com>
2010-06-23 15:44 ` [Cluster-devel] [GFS2 Patch] GFS2: recovery stuck on transaction lock Bob Peterson
2010-06-25 9:53 ` Steven Whitehouse
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).