From: Steven Whitehouse <swhiteho@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [GFS2 Patch] GFS2: recovery stuck on transaction lock
Date: Fri, 25 Jun 2010 10:53:33 +0100 [thread overview]
Message-ID: <1277459613.2507.3.camel@localhost> (raw)
In-Reply-To: <1065407972.775941277307887194.JavaMail.root@zmail06.collab.prod.int.phx2.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;
prev parent reply other threads:[~2010-06-25 9:53 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[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 message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1277459613.2507.3.camel@localhost \
--to=swhiteho@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.