[Ocfs2-devel] [PATCH 1/1] ocfs2/cluster: Make fence method configurable

Joel Becker Joel.Becker at oracle.com
Tue Nov 17 13:43:28 PST 2009


On Tue, Nov 17, 2009 at 01:07:58PM -0800, Sunil Mushran wrote:
> By default, o2cb fences the box by calling emergency_restart(). While this
> scheme works well in production, it comes in the way during testing as it
> does not let the tester take stack/core dumps for analysis.
> 
> This patch allows user to dynamically change the fence method to panic() by:
> # echo "panic" > /sys/kernel/config/cluster/<clustername>/fence_method
> 
> Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
> ---
>  fs/ocfs2/cluster/nodemanager.c |   50 ++++++++++++++++++++++++++++++++++++++++
>  fs/ocfs2/cluster/nodemanager.h |    7 +++++
>  fs/ocfs2/cluster/quorum.c      |   14 +++++++++-
>  3 files changed, 69 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/ocfs2/cluster/nodemanager.c b/fs/ocfs2/cluster/nodemanager.c
> index 7ee6188..77cdc09 100644
> --- a/fs/ocfs2/cluster/nodemanager.c
> +++ b/fs/ocfs2/cluster/nodemanager.c
> @@ -35,6 +35,11 @@
>   * cluster references throughout where nodes are looked up */
>  struct o2nm_cluster *o2nm_single_cluster = NULL;
>  
> +char *o2nm_fence_method_desc[O2NM_FENCE_METHODS + 1] = {
> +		"reset",	/* O2NM_FENCE_RESET */
> +		"panic",	/* O2NM_FENCE_PANIC */
> +		"unknown",
> +};

	Why do you have "unknown"?  There's no point to it; we 
default to "reset" and you never allow anything about O2NM_FENCE_METHODS
to be set.

> +static ssize_t o2nm_cluster_attr_fence_method_read(
> +	struct o2nm_cluster *cluster, char *page)
> +{
> +	unsigned int i = O2NM_FENCE_METHODS;
> +
> +	if (cluster && cluster->cl_fence_method < O2NM_FENCE_METHODS)
> +		i = cluster->cl_fence_method;

	cl_fence_method should always be below O2NM_FENCE_METHODS.  You
only need to check if(cluster).  If cl_fence_method is off, we'll crash,
which is fine.

> +	switch (o2nm_single_cluster->cl_fence_method) {
> +	case O2NM_FENCE_PANIC:
> +		panic("*** ocfs2 is very sorry to be fencing this system by "
> +		      "panicing ***\n");
> +		break;
> +	case O2NM_FENCE_RESET:
> +	default:

	Why not:

+	default:
+		WARN_ON(o2nm_single_cluster->cl_fence_method >=
+			O2NM_FENCE_METHODS);
+	case O2NM_FENCE_RESET:

so that netconsole will catch a wacky cl_fence_method.

> +		printk("*** ocfs2 is very sorry to be fencing this system by "
> +		       "restarting ***\n");

	And here, print KERN_ERR so noone filters it out with low klogd
levels.

Joel

-- 

"For every complex problem there exists a solution that is brief,
     concise, and totally wrong."
                                        -Unknown

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