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
					
				
			
		
					 5 changed files with 24 additions and 7 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Goldwyn Rodrigues
				Goldwyn Rodrigues