[Ocfs2-devel] [PATCH 01/10] ocfs2/dlm: Encapsulate adding and removing of mle from dlm->master_list
Joel Becker
Joel.Becker at oracle.com
Tue Feb 10 23:37:48 PST 2009
On Tue, Feb 03, 2009 at 12:48:15PM -0800, Sunil Mushran wrote:
> This patch encapsulates adding and removing of the mle from the
> dlm->master_list. This patch is part of the series of patches that
> converts the mle list to a mle hash.
>
> Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
sob
> ---
> fs/ocfs2/dlm/dlmcommon.h | 3 +++
> fs/ocfs2/dlm/dlmmaster.c | 34 +++++++++++++++++++++++-----------
> 2 files changed, 26 insertions(+), 11 deletions(-)
>
> diff --git a/fs/ocfs2/dlm/dlmcommon.h b/fs/ocfs2/dlm/dlmcommon.h
> index bb53714..261e265 100644
> --- a/fs/ocfs2/dlm/dlmcommon.h
> +++ b/fs/ocfs2/dlm/dlmcommon.h
> @@ -1008,6 +1008,9 @@ static inline void __dlm_wait_on_lockres(struct dlm_lock_resource *res)
> DLM_LOCK_RES_MIGRATING));
> }
>
> +void __dlm_unlink_mle(struct dlm_ctxt *dlm, struct dlm_master_list_entry *mle);
> +void __dlm_insert_mle(struct dlm_ctxt *dlm, struct dlm_master_list_entry *mle);
> +
> /* create/destroy slab caches */
> int dlm_init_master_caches(void);
> void dlm_destroy_master_caches(void);
> diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
> index 0a28139..0aa4b04 100644
> --- a/fs/ocfs2/dlm/dlmmaster.c
> +++ b/fs/ocfs2/dlm/dlmmaster.c
> @@ -318,6 +318,21 @@ static void dlm_init_mle(struct dlm_master_list_entry *mle,
> __dlm_mle_attach_hb_events(dlm, mle);
> }
>
> +void __dlm_unlink_mle(struct dlm_ctxt *dlm, struct dlm_master_list_entry *mle)
> +{
> + assert_spin_locked(&dlm->spinlock);
> + assert_spin_locked(&dlm->master_lock);
> +
> + if (!list_empty(&mle->list))
> + list_del_init(&mle->list);
> +}
> +
> +void __dlm_insert_mle(struct dlm_ctxt *dlm, struct dlm_master_list_entry *mle)
> +{
> + assert_spin_locked(&dlm->master_lock);
> +
> + list_add(&mle->list, &dlm->master_list);
> +}
>
> /* returns 1 if found, 0 if not */
> static int dlm_find_mle(struct dlm_ctxt *dlm,
> @@ -420,8 +435,7 @@ static void dlm_mle_release(struct kref *kref)
> assert_spin_locked(&dlm->master_lock);
>
> /* remove from list if not already */
> - if (!list_empty(&mle->list))
> - list_del_init(&mle->list);
> + __dlm_unlink_mle(dlm, mle);
>
> /* detach the mle from the domain node up/down events */
> __dlm_mle_detach_hb_events(dlm, mle);
> @@ -843,7 +857,7 @@ lookup:
> alloc_mle = NULL;
> dlm_init_mle(mle, DLM_MLE_MASTER, dlm, res, NULL, 0);
> set_bit(dlm->node_num, mle->maybe_map);
> - list_add(&mle->list, &dlm->master_list);
> + __dlm_insert_mle(dlm, mle);
>
> /* still holding the dlm spinlock, check the recovery map
> * to see if there are any nodes that still need to be
> @@ -1575,7 +1589,7 @@ way_up_top:
> // "add the block.\n");
> dlm_init_mle(mle, DLM_MLE_BLOCK, dlm, NULL, name, namelen);
> set_bit(request->node_idx, mle->maybe_map);
> - list_add(&mle->list, &dlm->master_list);
> + __dlm_insert_mle(dlm, mle);
> response = DLM_MASTER_RESP_NO;
> } else {
> // mlog(0, "mle was found\n");
> @@ -1967,7 +1981,7 @@ ok:
> assert->node_idx, rr, extra_ref, mle->inuse);
> dlm_print_one_mle(mle);
> }
> - list_del_init(&mle->list);
> + __dlm_unlink_mle(dlm, mle);
> __dlm_mle_detach_hb_events(dlm, mle);
> __dlm_put_mle(mle);
> if (extra_ref) {
> @@ -3159,10 +3173,8 @@ static int dlm_add_migration_mle(struct dlm_ctxt *dlm,
> tmp->master = master;
> atomic_set(&tmp->woken, 1);
> wake_up(&tmp->wq);
> - /* remove it from the list so that only one
> - * mle will be found */
> - list_del_init(&tmp->list);
> - /* this was obviously WRONG. mle is uninited here. should be tmp. */
> + /* remove it so that only one mle will be found */
> + __dlm_unlink_mle(dlm, tmp);
> __dlm_mle_detach_hb_events(dlm, tmp);
> ret = DLM_MIGRATE_RESPONSE_MASTERY_REF;
> mlog(0, "%s:%.*s: master=%u, newmaster=%u, "
> @@ -3181,7 +3193,7 @@ static int dlm_add_migration_mle(struct dlm_ctxt *dlm,
> mle->master = master;
> /* do this for consistency with other mle types */
> set_bit(new_master, mle->maybe_map);
> - list_add(&mle->list, &dlm->master_list);
> + __dlm_insert_mle(dlm, mle);
>
> return ret;
> }
> @@ -3264,7 +3276,7 @@ top:
> * list_head while in list_for_each_safe */
> __dlm_mle_detach_hb_events(dlm, mle);
> spin_lock(&mle->spinlock);
> - list_del_init(&mle->list);
> + __dlm_unlink_mle(dlm, mle);
> atomic_set(&mle->woken, 1);
> spin_unlock(&mle->spinlock);
> wake_up(&mle->wq);
> --
> 1.5.6.3
>
>
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel
--
"We'd better get back, `cause it'll be dark soon,
and they mostly come at night. Mostly."
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
More information about the Ocfs2-devel
mailing list