[Ocfs2-devel] [PATCH] ocfs2/dlm: remove potential deadlock -V3

Sunil Mushran sunil.mushran at oracle.com
Fri Jul 30 07:45:02 PDT 2010


You can also remove the comment that talks about the put. 

On Jul 30, 2010, at 6:53 AM, Wengang Wang <wen.gang.wang at oracle.com> wrote:

> When we need to take both dlm_domain_lock and dlm->spinlock, we should take
> them in order of: dlm_domain_lock then dlm->spinlock.
> 
> There is pathes disobey this order. That is calling dlm_lockres_put() with
> dlm->spinlock held in dlm_run_purge_list. dlm_lockres_put() calls dlm_put() at
> the ref and dlm_put() locks on dlm_domain_lock.
> 
> Fix:
> Don't grab/put the dlm when the initialising/releasing lockres.
> That grab is not required because we don't call dlm_unregister_domain()
> based on refcount.
> 
> Signed-off-by: Wengang Wang <wen.gang.wang at oracle.com>
> ---
> fs/ocfs2/dlm/dlmmaster.c |    3 ---
> 1 files changed, 0 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
> index 94b97fc..8408465 100644
> --- a/fs/ocfs2/dlm/dlmmaster.c
> +++ b/fs/ocfs2/dlm/dlmmaster.c
> @@ -511,8 +511,6 @@ static void dlm_lockres_release(struct kref *kref)
> 
>    atomic_dec(&dlm->res_cur_count);
> 
> -    dlm_put(dlm);
> -
>    if (!hlist_unhashed(&res->hash_node) ||
>        !list_empty(&res->granted) ||
>        !list_empty(&res->converting) ||
> @@ -586,7 +584,6 @@ static void dlm_init_lockres(struct dlm_ctxt *dlm,
>    res->inflight_locks = 0;
> 
>    /* put in dlm_lockres_release */
> -    dlm_grab(dlm);
>    res->dlm = dlm;
> 
>    kref_init(&res->refs);
> -- 
> 1.7.1.1
> 
> 
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel



More information about the Ocfs2-devel mailing list