All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joel Becker <Joel.Becker@oracle.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH] ocfs2: fix __ocfs2_cluster_lock() dead lock
Date: Wed, 6 Jan 2010 18:00:06 -0800	[thread overview]
Message-ID: <20100107020005.GC20095@mail.oracle.com> (raw)
In-Reply-To: <201001060835.o067n0EO000623@rcsinet13.oracle.com>

On Wed, Jan 06, 2010 at 04:34:44PM +0800, Wengang Wang wrote:
> there is deadlock possibility in __ocfs2_cluster_lock().
> the case is like following.
> 
> #in time order
> 1) node A(the lock owner) is doing an up-convert(UC, PR->EX). it got the lock
> but didn't check BUSY flag again.
> 
> 2) node B requested an UC on the same lock resource. since node A has an EX on
> the lockres, a bast is issued and OCFS2_LOCK_BLOCKED flag is set to the lockres
> meanting that a DC is should be done. the DC asks for agreement of node A to
> release EX. and for now node A refuses that(still in process of getting that
> lock:) ).
> 
> 3) the UC on node A runs into the phrase of checking OCFS2_LOCK_BLOCKED flag and
> if it can continue without waiting for any DC. code is:
> 
>         if (lockres->l_flags & OCFS2_LOCK_BLOCKED &&
>             !ocfs2_may_continue_on_blocked_lock(lockres, level)) {
> 
> analysis:
> the BLOCKED flag is set in 2), and the UC can't continue to get the lock(
> ocfs2_may_continue_on_blocked_lock() returns false), so it the DC to finish.
> 
> so both UC and DC are waiting for each other --a dead lock.

1) Do you have a test case?  Have you seen this happen, or are you just
   postulating from reading the code?
2) It sure looks like you're right.
3) I hate our locking spaghetti!

Joel

-- 

"I don't know anything about music. In my line you don't have
 to."
        - Elvis Presley

Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127

  reply	other threads:[~2010-01-07  2:00 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-06  8:34 [Ocfs2-devel] [PATCH] ocfs2: fix __ocfs2_cluster_lock() dead lock Wengang Wang
2010-01-07  2:00 ` Joel Becker [this message]
2010-01-07  5:22   ` Wengang Wang
2010-01-09 18:05   ` Wengang Wang
2010-01-09 18:24     ` Sunil Mushran
2010-01-10 10:05       ` Joel Becker
2010-01-11  1:55         ` Wengang Wang
2010-01-12  1:59     ` Joel Becker
2010-01-12  3:58       ` Wengang Wang
2010-01-12 11:18         ` Joel Becker
2010-01-12 12:04           ` Wengang Wang
2010-01-12 13:01             ` Joel Becker
2010-01-12 14:30               ` Wengang Wang
2010-01-12 19:14                 ` Sunil Mushran
2010-01-13  6:15                   ` Wengang Wang
2010-01-12 19:47       ` David Teigland
2010-01-13  3:20       ` Wengang Wang
2010-01-13  7:08         ` Wengang Wang
2010-01-13  7:57         ` Joel Becker
2010-01-13  9:23           ` Wengang Wang
2010-01-13  9:31             ` Joel Becker
2010-01-13  9:36               ` Wengang Wang
2010-01-13 19:14           ` Sunil Mushran
2010-01-14  1:01             ` Joel Becker
2010-01-14  4:12               ` Wengang Wang
2010-01-21 15:30             ` David Teigland
2010-01-21 15:41               ` Sunil Mushran

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=20100107020005.GC20095@mail.oracle.com \
    --to=joel.becker@oracle.com \
    --cc=ocfs2-devel@oss.oracle.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.