Skip to contentSkip to conversation

chunkd: return known to array

PATCH In review Pete Zaitcev 2 participants 2 messages Aug 5, 2009

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 chunkd: return known to array

The .known is the array management item which has no business in a list-managed struct. Phase 1: return it where it was. In phase 2 we will drop it from cldc_host. Then perhaps change array to a circular list.

server/cldu.c +14 -8
index 1e11e6c..34dd996 100644
@@ -22,13 +22,18 @@
 
 #define N_CLD		10	/* 5 * (v4+v6) */
 
+struct cld_host {
+	int known;
+	struct cldc_host h;
+};
+
 struct cld_session {
 	bool forced_hosts;		/* Administrator overrode default CLD */
 	bool sess_open;
 	struct cldc_udp *lib;		/* library state */
 
 	int actx;		/* Active host cldv[actx] */
-	struct cldc_host cldv[N_CLD];
+	struct cld_host cldv[N_CLD];
 
 	struct event ev;	/* Associated with fd */
 	char *cfname;		/* /chunk-CELL directory */
@@ -71,7 +76,7 @@ static int cldu_nextactive(struct cld_session *sp)
 			n = 0;
 	}
 	/* Full circle, end on the old actx */
-	return n;
+	return sp->actx;
 }
 
 static int cldu_setcell(struct cld_session *sp,
@@ -217,11 +222,11 @@ static int cldu_set_cldc(struct cld_session *sp, int newactive)
 	}
 
 	sp->actx = newactive;
-	hp = &sp->cldv[sp->actx];
-	if (!hp->known) {
+	if (!sp->cldv[sp->actx].known) {
 		applog(LOG_ERR, "No CLD hosts");
 		goto err_addr;
 	}
+	hp = &sp->cldv[sp->actx].h;
 
 	rc = cldc_udp_new(hp->host, hp->port, &sp->lib);
 	if (rc) {
@@ -530,8 +535,9 @@ int cld_begin(const char *thishost, const char *thiscell, uint32_t nid,
 		i = 0;
 		for (tmp = host_list; tmp; tmp = tmp->next) {
 			if (i < N_CLD) {
-				memcpy(&ses.cldv[i], tmp->data,
+				memcpy(&ses.cldv[i].h, tmp->data,
 				       sizeof(struct cldc_host));
+				ses.cldv[i].known = 1;
 				i++;
 			} else {
 				struct cldc_host *hp = tmp->data;
@@ -577,7 +583,7 @@ void cld_end(void)
 	if (!ses.forced_hosts) {
 		for (i = 0; i < N_CLD; i++) {
 			if (ses.cldv[i].known)
-				free(ses.cldv[i].host);
+				free(ses.cldv[i].h.host);
 		}
 	}
 
@@ -589,7 +595,7 @@ void cldu_add_host(const char *hostname, unsigned int port,
 		   void log(const char *fmt, ...))
 {
 	static struct cld_session *sp = &ses;
-	struct cldc_host *hp;
+	struct cld_host *hp;
 	int i;
 
 	for (i = 0; i < N_CLD; i++) {
@@ -600,7 +606,7 @@ void cldu_add_host(const char *hostname, unsigned int port,
 	if (i >= N_CLD)
 		return;
 
-	if (cldc_saveaddr(hp, 100, 100, port, strlen(hostname), hostname,
+	if (cldc_saveaddr(&hp->h, 100, 100, port, strlen(hostname), hostname,
 			  debugging, log))
 		return;
 	hp->known = 1;
#1 lore raw
Quoted 6 lines · Pete Zaitcev

The .known is the array management item which has no business in a list-managed struct. Phase 1: return it where it was. In phase 2 we will drop it from cldc_host. Then perhaps change array to a circular list.

applied 1-2