ocfs2: add clustername to cluster connection
This is an effort of removing ocfs2_controld.pcmk and getting ocfs2 DLM handling up to the times with respect to DLM (>=4.0.1) and corosync (2.3.x). AFAIK, cman also is being phased out for a unified corosync cluster stack. fs/dlm performs all the functions with respect to fencing and node management and provides the API's to do so for ocfs2. For all future references, DLM stands for fs/dlm code. The advantages are: + No need to run an additional userspace daemon (ocfs2_controld) + No controld device handling and controld protocol + Shifting responsibilities of node management to DLM layer For backward compatibility, we are keeping the controld handling code. Once enough time has passed we can remove a significant portion of the code. This was tested by using the kernel with changes on older unmodified tools. The kernel used ocfs2_controld as expected, and displayed the appropriate warning message. This feature requires modification in the userspace ocfs2-tools. The changes can be found at: https://github.com/goldwynr/ocfs2-tools branch: nocontrold Currently, not many checks are present in the userspace code, but that would change soon. This patch (of 6): Add clustername to cluster connection. Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Reviewed-by: Mark Fasheh <mfasheh@suse.de> Cc: Joel Becker <jlbec@evilplan.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
ff8fb33522
commit
c74a3bdd9b
@ -2996,6 +2996,8 @@ int ocfs2_dlm_init(struct ocfs2_super *osb)
|
|||||||
|
|
||||||
/* for now, uuid == domain */
|
/* for now, uuid == domain */
|
||||||
status = ocfs2_cluster_connect(osb->osb_cluster_stack,
|
status = ocfs2_cluster_connect(osb->osb_cluster_stack,
|
||||||
|
osb->osb_cluster_name,
|
||||||
|
strlen(osb->osb_cluster_name),
|
||||||
osb->uuid_str,
|
osb->uuid_str,
|
||||||
strlen(osb->uuid_str),
|
strlen(osb->uuid_str),
|
||||||
&lproto, ocfs2_do_node_down, osb,
|
&lproto, ocfs2_do_node_down, osb,
|
||||||
|
@ -387,6 +387,7 @@ struct ocfs2_super
|
|||||||
u8 osb_stackflags;
|
u8 osb_stackflags;
|
||||||
|
|
||||||
char osb_cluster_stack[OCFS2_STACK_LABEL_LEN + 1];
|
char osb_cluster_stack[OCFS2_STACK_LABEL_LEN + 1];
|
||||||
|
char osb_cluster_name[OCFS2_CLUSTER_NAME_LEN + 1];
|
||||||
struct ocfs2_cluster_connection *cconn;
|
struct ocfs2_cluster_connection *cconn;
|
||||||
struct ocfs2_lock_res osb_super_lockres;
|
struct ocfs2_lock_res osb_super_lockres;
|
||||||
struct ocfs2_lock_res osb_rename_lockres;
|
struct ocfs2_lock_res osb_rename_lockres;
|
||||||
|
@ -309,6 +309,8 @@ int ocfs2_plock(struct ocfs2_cluster_connection *conn, u64 ino,
|
|||||||
EXPORT_SYMBOL_GPL(ocfs2_plock);
|
EXPORT_SYMBOL_GPL(ocfs2_plock);
|
||||||
|
|
||||||
int ocfs2_cluster_connect(const char *stack_name,
|
int ocfs2_cluster_connect(const char *stack_name,
|
||||||
|
const char *cluster_name,
|
||||||
|
int cluster_name_len,
|
||||||
const char *group,
|
const char *group,
|
||||||
int grouplen,
|
int grouplen,
|
||||||
struct ocfs2_locking_protocol *lproto,
|
struct ocfs2_locking_protocol *lproto,
|
||||||
@ -342,8 +344,10 @@ int ocfs2_cluster_connect(const char *stack_name,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(new_conn->cc_name, group, grouplen);
|
strlcpy(new_conn->cc_name, group, GROUP_NAME_MAX + 1);
|
||||||
new_conn->cc_namelen = grouplen;
|
new_conn->cc_namelen = grouplen;
|
||||||
|
strlcpy(new_conn->cc_cluster_name, cluster_name, CLUSTER_NAME_MAX + 1);
|
||||||
|
new_conn->cc_cluster_name_len = cluster_name_len;
|
||||||
new_conn->cc_recovery_handler = recovery_handler;
|
new_conn->cc_recovery_handler = recovery_handler;
|
||||||
new_conn->cc_recovery_data = recovery_data;
|
new_conn->cc_recovery_data = recovery_data;
|
||||||
|
|
||||||
@ -386,8 +390,9 @@ int ocfs2_cluster_connect_agnostic(const char *group,
|
|||||||
|
|
||||||
if (cluster_stack_name[0])
|
if (cluster_stack_name[0])
|
||||||
stack_name = cluster_stack_name;
|
stack_name = cluster_stack_name;
|
||||||
return ocfs2_cluster_connect(stack_name, group, grouplen, lproto,
|
return ocfs2_cluster_connect(stack_name, NULL, 0, group, grouplen,
|
||||||
recovery_handler, recovery_data, conn);
|
lproto, recovery_handler, recovery_data,
|
||||||
|
conn);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(ocfs2_cluster_connect_agnostic);
|
EXPORT_SYMBOL_GPL(ocfs2_cluster_connect_agnostic);
|
||||||
|
|
||||||
|
@ -45,6 +45,9 @@ struct file_lock;
|
|||||||
*/
|
*/
|
||||||
#define GROUP_NAME_MAX 64
|
#define GROUP_NAME_MAX 64
|
||||||
|
|
||||||
|
/* This shadows OCFS2_CLUSTER_NAME_LEN */
|
||||||
|
#define CLUSTER_NAME_MAX 16
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ocfs2_protocol_version changes when ocfs2 does something different in
|
* ocfs2_protocol_version changes when ocfs2 does something different in
|
||||||
@ -97,8 +100,10 @@ struct ocfs2_locking_protocol {
|
|||||||
* locking compatibility.
|
* locking compatibility.
|
||||||
*/
|
*/
|
||||||
struct ocfs2_cluster_connection {
|
struct ocfs2_cluster_connection {
|
||||||
char cc_name[GROUP_NAME_MAX];
|
char cc_name[GROUP_NAME_MAX + 1];
|
||||||
int cc_namelen;
|
int cc_namelen;
|
||||||
|
char cc_cluster_name[CLUSTER_NAME_MAX + 1];
|
||||||
|
int cc_cluster_name_len;
|
||||||
struct ocfs2_protocol_version cc_version;
|
struct ocfs2_protocol_version cc_version;
|
||||||
struct ocfs2_locking_protocol *cc_proto;
|
struct ocfs2_locking_protocol *cc_proto;
|
||||||
void (*cc_recovery_handler)(int node_num, void *recovery_data);
|
void (*cc_recovery_handler)(int node_num, void *recovery_data);
|
||||||
@ -239,6 +244,8 @@ struct ocfs2_stack_plugin {
|
|||||||
|
|
||||||
/* Used by the filesystem */
|
/* Used by the filesystem */
|
||||||
int ocfs2_cluster_connect(const char *stack_name,
|
int ocfs2_cluster_connect(const char *stack_name,
|
||||||
|
const char *cluster_name,
|
||||||
|
int cluster_name_len,
|
||||||
const char *group,
|
const char *group,
|
||||||
int grouplen,
|
int grouplen,
|
||||||
struct ocfs2_locking_protocol *lproto,
|
struct ocfs2_locking_protocol *lproto,
|
||||||
|
@ -2223,10 +2223,9 @@ static int ocfs2_initialize_super(struct super_block *sb,
|
|||||||
if (ocfs2_clusterinfo_valid(osb)) {
|
if (ocfs2_clusterinfo_valid(osb)) {
|
||||||
osb->osb_stackflags =
|
osb->osb_stackflags =
|
||||||
OCFS2_RAW_SB(di)->s_cluster_info.ci_stackflags;
|
OCFS2_RAW_SB(di)->s_cluster_info.ci_stackflags;
|
||||||
memcpy(osb->osb_cluster_stack,
|
strlcpy(osb->osb_cluster_stack,
|
||||||
OCFS2_RAW_SB(di)->s_cluster_info.ci_stack,
|
OCFS2_RAW_SB(di)->s_cluster_info.ci_stack,
|
||||||
OCFS2_STACK_LABEL_LEN);
|
OCFS2_STACK_LABEL_LEN + 1);
|
||||||
osb->osb_cluster_stack[OCFS2_STACK_LABEL_LEN] = '\0';
|
|
||||||
if (strlen(osb->osb_cluster_stack) != OCFS2_STACK_LABEL_LEN) {
|
if (strlen(osb->osb_cluster_stack) != OCFS2_STACK_LABEL_LEN) {
|
||||||
mlog(ML_ERROR,
|
mlog(ML_ERROR,
|
||||||
"couldn't mount because of an invalid "
|
"couldn't mount because of an invalid "
|
||||||
@ -2235,6 +2234,9 @@ static int ocfs2_initialize_super(struct super_block *sb,
|
|||||||
status = -EINVAL;
|
status = -EINVAL;
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
|
strlcpy(osb->osb_cluster_name,
|
||||||
|
OCFS2_RAW_SB(di)->s_cluster_info.ci_cluster,
|
||||||
|
OCFS2_CLUSTER_NAME_LEN + 1);
|
||||||
} else {
|
} else {
|
||||||
/* The empty string is identical with classic tools that
|
/* The empty string is identical with classic tools that
|
||||||
* don't know about s_cluster_info. */
|
* don't know about s_cluster_info. */
|
||||||
|
Loading…
Reference in New Issue
Block a user