From: David Teigland <teigland@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH 13/17] dlm: fix _can_be_granted() for lock at the head of covert queue.
Date: Wed, 9 Aug 2017 13:48:03 -0500 [thread overview]
Message-ID: <20170809184803.GE21204@redhat.com> (raw)
In-Reply-To: <20170809164144.GD21204@redhat.com>
On Wed, Aug 09, 2017 at 11:41:44AM -0500, David Teigland wrote:
> On Wed, Aug 09, 2017 at 05:51:37AM +0000, tsutomu.owa at toshiba.co.jp wrote:
> > If there is a lock resource conflict on multiple nodes, the lock on
> > convert queue may not be granted forever.
> >
> > EX.)
> > grant queue:
> > node0 grmode NL / rqmode IV
> > node1 grmode NL / rqmode IV
> >
> > convert queue:
> > node2 grmode NL / rqmode EX
> > node3 grmode PR / rqmode EX
> >
> > wait queue:
> > node4 grmode IV / rqmode PR
> > node5 grmode IV / rqmode PR
> >
> > When the lock conversion (node PR -> NL) of node 0 is completed, the lock
> > of node 2 should be grantable. However, __can_be_granted() returns 0
> > because the grmode of the lock on node 3 in convert queue is PR.
> >
> > When checking the lock at the head of convert queue, exclude
> > queue_conflict() targeting convert queue.
>
> This example doesn't look right. node2's NL->EX cannot be granted because
> it conflicts with the PR lock held by node3. (The grmode is still valid
> when a lock is on the convert queue.)
After looking more closely, this is a subtle form of conversion deadlock,
and this exact case is described in the comment here:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/dlm/lock.c#n2218
This should be handled by the dlm canceling one of the converting locks
(returning it to the grant queue with IV rqmode) and returning -EDEADLK to
the application. There is a FIXME in the code highlighting a case you
could be hitting:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/dlm/lock.c#n2504
If you are running into that FIXME, you should see these log messages:
if (deadlk) {
log_print("WARN: pending deadlock %x node %d %s",
lkb->lkb_id, lkb->lkb_nodeid, r->res_name);
dlm_dump_rsb(r);
continue;
}
next prev parent reply other threads:[~2017-08-09 18:48 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-09 5:51 [Cluster-devel] [PATCH 13/17] dlm: fix _can_be_granted() for lock at the head of covert queue tsutomu.owa
2017-08-09 16:41 ` David Teigland
2017-08-09 18:48 ` David Teigland [this message]
2017-08-17 23:40 ` tsutomu.owa
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=20170809184803.GE21204@redhat.com \
--to=teigland@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.