From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753082Ab0CBAJW (ORCPT ); Mon, 1 Mar 2010 19:09:22 -0500 Received: from acsinet12.oracle.com ([141.146.126.234]:26716 "EHLO acsinet12.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751340Ab0CBAJV (ORCPT ); Mon, 1 Mar 2010 19:09:21 -0500 Message-ID: <4B8C56FF.6030509@oracle.com> Date: Mon, 01 Mar 2010 16:08:31 -0800 From: Sunil Mushran User-Agent: Thunderbird 2.0.0.23 (X11/20090817) MIME-Version: 1.0 To: Joel Becker CC: ocfs2-devel@oss.oracle.com, mfasheh@suse.com, linux-kernel@vger.kernel.org Subject: Re: [Ocfs2-devel] [PATCH 11/11] ocfs2_dlmfs: Enable the use of user cluster stacks. References: <1265794074-19539-1-git-send-email-joel.becker@oracle.com> <1265794074-19539-12-git-send-email-joel.becker@oracle.com> In-Reply-To: <1265794074-19539-12-git-send-email-joel.becker@oracle.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Source-IP: acsmt354.oracle.com [141.146.40.154] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090206.4B8C572C.001C:SCFMA4539814,ss=1,fgs=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Sunil Mushran Joel Becker wrote: > Unlike ocfs2, dlmfs has no permanent storage. It can't store off a > cluster stack it is supposed to be using. So it can't specify the stack > name in ocfs2_cluster_connect(). > > Instead, we create ocfs2_cluster_connect_agnostic(), which simply uses > the stack that is currently enabled. This is find for dlmfs, which will > rely on the stack initialization. > > We add the "stackglue" capability to dlmfs's capability list. This lets > userspace know dlmfs can be used with all cluster stacks. > > Signed-off-by: Joel Becker > --- > fs/ocfs2/dlmfs/dlmfs.c | 2 +- > fs/ocfs2/dlmfs/userdlm.c | 8 ++++---- > fs/ocfs2/ocfs2_lockingver.h | 2 ++ > fs/ocfs2/stackglue.c | 18 ++++++++++++++++++ > fs/ocfs2/stackglue.h | 11 +++++++++++ > 5 files changed, 36 insertions(+), 5 deletions(-) > > diff --git a/fs/ocfs2/dlmfs/dlmfs.c b/fs/ocfs2/dlmfs/dlmfs.c > index 8697366..1b0de15 100644 > --- a/fs/ocfs2/dlmfs/dlmfs.c > +++ b/fs/ocfs2/dlmfs/dlmfs.c > @@ -87,7 +87,7 @@ struct workqueue_struct *user_dlm_worker; > * - bast : POLLIN against the file descriptor of a held lock > * signifies a bast fired on the lock. > */ > -#define DLMFS_CAPABILITIES "bast" > +#define DLMFS_CAPABILITIES "bast stackglue" > extern int param_set_dlmfs_capabilities(const char *val, > struct kernel_param *kp) > { > diff --git a/fs/ocfs2/dlmfs/userdlm.c b/fs/ocfs2/dlmfs/userdlm.c > index c1b6a56..2858ee6 100644 > --- a/fs/ocfs2/dlmfs/userdlm.c > +++ b/fs/ocfs2/dlmfs/userdlm.c > @@ -666,10 +666,10 @@ struct ocfs2_cluster_connection *user_dlm_register(struct qstr *name) > int rc; > struct ocfs2_cluster_connection *conn; > > - rc = ocfs2_cluster_connect("o2cb", name->name, name->len, > - &user_dlm_lproto, > - user_dlm_recovery_handler_noop, > - NULL, &conn); > + rc = ocfs2_cluster_connect_agnostic(name->name, name->len, > + &user_dlm_lproto, > + user_dlm_recovery_handler_noop, > + NULL, &conn); > if (rc) > mlog_errno(rc); > > diff --git a/fs/ocfs2/ocfs2_lockingver.h b/fs/ocfs2/ocfs2_lockingver.h > index 82d5eea..2e45c8d 100644 > --- a/fs/ocfs2/ocfs2_lockingver.h > +++ b/fs/ocfs2/ocfs2_lockingver.h > @@ -23,6 +23,8 @@ > /* > * The protocol version for ocfs2 cluster locking. See dlmglue.c for > * more details. > + * > + * 1.0 - Initial locking version from ocfs2 1.4. > */ > #define OCFS2_LOCKING_PROTOCOL_MAJOR 1 > #define OCFS2_LOCKING_PROTOCOL_MINOR 0 > diff --git a/fs/ocfs2/stackglue.c b/fs/ocfs2/stackglue.c > index 31db2e8..39abf89 100644 > --- a/fs/ocfs2/stackglue.c > +++ b/fs/ocfs2/stackglue.c > @@ -373,6 +373,24 @@ out: > } > EXPORT_SYMBOL_GPL(ocfs2_cluster_connect); > > +/* The caller will ensure all nodes have the same cluster stack */ > +int ocfs2_cluster_connect_agnostic(const char *group, > + int grouplen, > + struct ocfs2_locking_protocol *lproto, > + void (*recovery_handler)(int node_num, > + void *recovery_data), > + void *recovery_data, > + struct ocfs2_cluster_connection **conn) > +{ > + char *stack_name = NULL; > + > + if (cluster_stack_name[0]) > + stack_name = cluster_stack_name; > + return ocfs2_cluster_connect(stack_name, group, grouplen, lproto, > + recovery_handler, recovery_data, conn); > +} > +EXPORT_SYMBOL_GPL(ocfs2_cluster_connect_agnostic); > + > /* If hangup_pending is 0, the stack driver will be dropped */ > int ocfs2_cluster_disconnect(struct ocfs2_cluster_connection *conn, > int hangup_pending) > diff --git a/fs/ocfs2/stackglue.h b/fs/ocfs2/stackglue.h > index b1981ba..8ce7398 100644 > --- a/fs/ocfs2/stackglue.h > +++ b/fs/ocfs2/stackglue.h > @@ -246,6 +246,17 @@ int ocfs2_cluster_connect(const char *stack_name, > void *recovery_data), > void *recovery_data, > struct ocfs2_cluster_connection **conn); > +/* > + * Used by callers that don't store their stack name. They must ensure > + * all nodes have the same stack. > + */ > +int ocfs2_cluster_connect_agnostic(const char *group, > + int grouplen, > + struct ocfs2_locking_protocol *lproto, > + void (*recovery_handler)(int node_num, > + void *recovery_data), > + void *recovery_data, > + struct ocfs2_cluster_connection **conn); > int ocfs2_cluster_disconnect(struct ocfs2_cluster_connection *conn, > int hangup_pending); > void ocfs2_cluster_hangup(const char *group, int grouplen); >