[Ocfs2-devel] [nov 28] question of dlm_get_lock_resource()

Sunil Mushran sunil.mushran at oracle.com
Mon Dec 1 18:43:16 PST 2008


No. dlm->spinlock prevents it racing the dlm_thread. Secondly, lookup
also does a get.

What scenario are you envisioning?

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 ?
>
> Thanks.
>   




More information about the Ocfs2-devel mailing list