All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sunil Mushran <sunil.mushran@oracle.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [nov 28] question of dlm_get_lock_resource()
Date: Tue, 02 Dec 2008 13:31:06 -0800	[thread overview]
Message-ID: <4935A91A.7090300@oracle.com> (raw)
In-Reply-To: <49358998.9040401@oracle.com>

On second thoughts, I should elaborate further. I'll do so sometime 
later today.

Sunil Mushran wrote:
> Read the purge_lockres code, the only place where we set this flag.
>
> Coly Li wrote:
>   
>> Sunil Mushran Wrote:
>>   
>>     
>>> No. dlm->spinlock prevents it racing the dlm_thread. Secondly, lookup
>>> also does a get.
>>>
>>> What scenario are you envisioning?
>>>     
>>>       
>> IMHO, locking dlm->spinlock does not mean protecting to tmpres. Even line 727 gets false, how can we
>> make sure in line 749 res->state is not modified to DLM_LOCK_RES_DROPPING_REF by other process ?
>>
>> I can not find the magic which make everything work in order, something important must be missed by me.
>>
>> Thanks.
>>
>>   
>>     
>>> Coly Li wrote:
>>>     
>>>       
>>>> Hi list,
>>>>
>>>> When I read code of dlm_get_lock_resource(), there is something not
>>>> clear to me.
>>>>
>>>>  719 lookup:
>>>>  720         spin_lock(&dlm->spinlock);
>>>>  721         tmpres = __dlm_lookup_lockres_full(dlm, lockid, namelen,
>>>> hash);
>>>>  722         if (tmpres) {
>>>>  723                 int dropping_ref = 0;
>>>>  724
>>>>  725                 spin_lock(&tmpres->spinlock);
>>>>  726                 if (tmpres->owner == dlm->node_num) {
>>>>  727                         BUG_ON(tmpres->state &
>>>> DLM_LOCK_RES_DROPPING_REF);
>>>>  728                         dlm_lockres_grab_inflight_ref(dlm, tmpres);
>>>>  729                 } else if (tmpres->state &
>>>> DLM_LOCK_RES_DROPPING_REF)
>>>>  730                         dropping_ref = 1;
>>>>  731                 spin_unlock(&tmpres->spinlock);
>>>>  732                 spin_unlock(&dlm->spinlock);
>>>>  733
>>>>  734                 /* wait until done messaging the master, drop our
>>>> ref to allow
>>>>  735                  * the lockres to be purged, start over. */
>>>>  736                 if (dropping_ref) {
>>>>  737                         spin_lock(&tmpres->spinlock);
>>>>  738                         __dlm_wait_on_lockres_flags(tmpres,
>>>> DLM_LOCK_RES_DROPPING_REF);
>>>>  739                         spin_unlock(&tmpres->spinlock);
>>>>  740                         dlm_lockres_put(tmpres);
>>>>  741                         tmpres = NULL;
>>>>  742                         goto lookup;
>>>>  743                 }
>>>>  744
>>>>  745                 mlog(0, "found in hash!\n");
>>>>  746                 if (res)
>>>>  747                         dlm_lockres_put(res);
>>>>  748                 res = tmpres;
>>>>  749                 goto leave;
>>>>  750         }
>>>>
>>>> If at line 721 tmpres found from hash, and its state is not
>>>> DLM_LOCK_RES_DROPPING_REF (dropping_ref
>>>> is 0), between line 733 and 748, is it possible to set tmpres->state
>>>> to DLM_LOCK_RES_DROPPING_REF ?
>>>>
>>>> I don't see any protection for this race, maybe there is something I
>>>> missed. Can anybody give me a
>>>> hint ?
>>>>       
>>>>         
>>   
>>     
>
>
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel
>   

      reply	other threads:[~2008-12-02 21:31 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-28 13:03 [Ocfs2-devel] [nov 28] question of dlm_get_lock_resource() Coly Li
2008-12-02  2:43 ` Sunil Mushran
2008-12-02 16:49   ` Coly Li
2008-12-02 19:16     ` Sunil Mushran
2008-12-02 21:31       ` Sunil Mushran [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=4935A91A.7090300@oracle.com \
    --to=sunil.mushran@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.