[Ocfs2-devel] [PATCH 06/18] ocfs2_dlm: Link all lockres' to a tracking list

Joel Becker Joel.Becker at oracle.com
Thu Feb 28 16:31:13 PST 2008


On Mon, Feb 25, 2008 at 12:20:50PM -0800, Sunil Mushran wrote:
> This patch links all the lockres' to a tracking list in dlm_ctxt.
> We will use this in the upcoming patch that will walk the entire
> list and to dump the lockres states to a debugfs file.
> 
> Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
Signed-off-by: Joel Becker <joel.becker at oracle.com>


> ---
>  fs/ocfs2/dlm/dlmcommon.h |    4 ++++
>  fs/ocfs2/dlm/dlmdomain.c |   11 +++++++++++
>  fs/ocfs2/dlm/dlmmaster.c |   11 +++++++++++
>  3 files changed, 26 insertions(+), 0 deletions(-)
> 
> diff --git a/fs/ocfs2/dlm/dlmcommon.h b/fs/ocfs2/dlm/dlmcommon.h
> index eac1b3b..a3b22bf 100644
> --- a/fs/ocfs2/dlm/dlmcommon.h
> +++ b/fs/ocfs2/dlm/dlmcommon.h
> @@ -101,6 +101,7 @@ struct dlm_ctxt
>  	struct list_head purge_list;
>  	struct list_head pending_asts;
>  	struct list_head pending_basts;
> +	struct list_head tracking_list;
>  	unsigned int purge_count;
>  	spinlock_t spinlock;
>  	spinlock_t ast_lock;
> @@ -266,6 +267,9 @@ struct dlm_lock_resource
>  	struct list_head dirty;
>  	struct list_head recovering; // dlm_recovery_ctxt.resources list
>  
> +	/* Added during init and removed during release */
> +	struct list_head tracking;	/* dlm->tracking_list */
> +
>  	/* unused lock resources have their last_used stamped and are
>  	 * put on a list for the dlm thread to run. */
>  	unsigned long    last_used;
> diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c
> index 6d02ef5..1d382f1 100644
> --- a/fs/ocfs2/dlm/dlmdomain.c
> +++ b/fs/ocfs2/dlm/dlmdomain.c
> @@ -634,6 +634,7 @@ int dlm_shutting_down(struct dlm_ctxt *dlm)
>  void dlm_unregister_domain(struct dlm_ctxt *dlm)
>  {
>  	int leave = 0;
> +	struct dlm_lock_resource *res;
>  
>  	spin_lock(&dlm_domain_lock);
>  	BUG_ON(dlm->dlm_state != DLM_CTXT_JOINED);
> @@ -663,6 +664,15 @@ void dlm_unregister_domain(struct dlm_ctxt *dlm)
>  			msleep(500);
>  			mlog(0, "%s: more migration to do\n", dlm->name);
>  		}
> +
> +		/* This list should be empty. If not, print remaining lockres */
> +		if (!list_empty(&dlm->tracking_list)) {
> +			mlog(ML_ERROR, "Following lockres' are still on the "
> +			     "tracking list:\n");
> +			list_for_each_entry(res, &dlm->tracking_list, tracking)
> +				dlm_print_one_lock_resource(res);
> +		}
> +
>  		dlm_mark_domain_leaving(dlm);
>  		dlm_leave_domain(dlm);
>  		dlm_complete_dlm_shutdown(dlm);
> @@ -1404,6 +1414,7 @@ static struct dlm_ctxt *dlm_alloc_ctxt(const char *domain,
>  	INIT_LIST_HEAD(&dlm->reco.node_data);
>  	INIT_LIST_HEAD(&dlm->purge_list);
>  	INIT_LIST_HEAD(&dlm->dlm_domain_handlers);
> +	INIT_LIST_HEAD(&dlm->tracking_list);
>  	dlm->reco.state = 0;
>  
>  	INIT_LIST_HEAD(&dlm->pending_asts);
> diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
> index d07a30a..d10fe48 100644
> --- a/fs/ocfs2/dlm/dlmmaster.c
> +++ b/fs/ocfs2/dlm/dlmmaster.c
> @@ -642,6 +642,14 @@ static void dlm_lockres_release(struct kref *kref)
>  	mlog(0, "destroying lockres %.*s\n", res->lockname.len,
>  	     res->lockname.name);
>  
> +	if (!list_empty(&res->tracking))
> +		list_del_init(&res->tracking);
> +	else {
> +		mlog(ML_ERROR, "Resource %.*s not on the Tracking list\n",
> +		     res->lockname.len, res->lockname.name);
> +		dlm_print_one_lock_resource(res);
> +	}
> +
>  	if (!hlist_unhashed(&res->hash_node) ||
>  	    !list_empty(&res->granted) ||
>  	    !list_empty(&res->converting) ||
> @@ -709,6 +717,7 @@ static void dlm_init_lockres(struct dlm_ctxt *dlm,
>  	INIT_LIST_HEAD(&res->dirty);
>  	INIT_LIST_HEAD(&res->recovering);
>  	INIT_LIST_HEAD(&res->purge);
> +	INIT_LIST_HEAD(&res->tracking);
>  	atomic_set(&res->asts_reserved, 0);
>  	res->migration_pending = 0;
>  	res->inflight_locks = 0;
> @@ -724,6 +733,8 @@ static void dlm_init_lockres(struct dlm_ctxt *dlm,
>  
>  	res->last_used = 0;
>  
> +	list_add_tail(&res->tracking, &dlm->tracking_list);
> +
>  	memset(res->lvb, 0, DLM_LVB_LEN);
>  	memset(res->refmap, 0, sizeof(res->refmap));
>  }
> -- 
> 1.5.2.5
> 
> 
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel

-- 

Life's Little Instruction Book #222

	"Think twice before burdening a friend with a secret."

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