[DRBD-cvs] svn commit by phil - r2060 - trunk/user - * The is_attached() function of drbdmeta was not workin

drbd-cvs at lists.linbit.com drbd-cvs at lists.linbit.com
Tue Feb 7 22:19:26 CET 2006


Author: phil
Date: 2006-02-07 22:19:25 +0100 (Tue, 07 Feb 2006)
New Revision: 2060

Modified:
   trunk/user/drbdadm_scanner.fl
   trunk/user/drbdadm_usage_cnt.c
   trunk/user/drbdmeta.c
   trunk/user/drbdtool_common.c
   trunk/user/drbdtool_common.h
Log:
* The is_attached() function of drbdmeta was not working right. FIXED.
* drbdadm will create /var/lib/drbd when it is needed for storing
  /var/lib/drbd/node_id .
* Two keywords were missing from drbdadm_scanner.fl (cram-hmac-alg and
  shared-secret)


Modified: trunk/user/drbdadm_scanner.fl
===================================================================
--- trunk/user/drbdadm_scanner.fl	2006-02-05 20:51:49 UTC (rev 2059)
+++ trunk/user/drbdadm_scanner.fl	2006-02-07 21:19:25 UTC (rev 2060)
@@ -75,6 +75,8 @@
 max-buffers		{ DP; CP; RC(MAX_BUFFERS); return TK_NET_OPTION;}
 sndbuf-size		{ DP; CP; RC(SNDBUF_SIZE); return TK_NET_OPTION;}
 connect-int		{ DP; CP; RC(CONNECT_INT); return TK_NET_OPTION;}
+cram-hmac-alg		{ DP; CP; return TK_NET_OPTION;		}
+shared-secret		{ DP; CP; return TK_NET_OPTION;		}
 max-epoch-size		{ DP; CP; RC(MAX_EPOCH_SIZE); return TK_NET_OPTION;}
 after-sb-[012]pri	{ DP; CP; return TK_NET_OPTION;		}
 allow-two-primaries	{ DP; CP; return TK_NET_SWITCH;		}

Modified: trunk/user/drbdadm_usage_cnt.c
===================================================================
--- trunk/user/drbdadm_usage_cnt.c	2006-02-05 20:51:49 UTC (rev 2059)
+++ trunk/user/drbdadm_usage_cnt.c	2006-02-07 21:19:25 UTC (rev 2060)
@@ -47,7 +47,8 @@
 #define HTTP_PORT 80
 #define HTTP_HOST "usage.drbd.org"
 #define HTTP_ADDR "212.69.162.23"
-#define NODE_ID_FILE "/var/lib/drbd/node_id"
+#define DRBD_LIB_DIR "/var/lib/drbd"
+#define NODE_ID_FILE DRBD_LIB_DIR"/node_id"
 
 struct node_info {
 	u64	node_uuid;
@@ -108,6 +109,11 @@
 	struct node_info_od on_disk;
 
 	fd = open(NODE_ID_FILE,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
+	if( fd == -1 && errno == ENOENT) {
+		mkdir(DRBD_LIB_DIR,S_IRWXU);
+		fd = open(NODE_ID_FILE,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
+	}
+
 	if( fd == -1) {
 		perror("Creation of "NODE_ID_FILE" failed.");
 		exit(20);

Modified: trunk/user/drbdmeta.c
===================================================================
--- trunk/user/drbdmeta.c	2006-02-05 20:51:49 UTC (rev 2059)
+++ trunk/user/drbdmeta.c	2006-02-07 21:19:25 UTC (rev 2060)
@@ -2222,19 +2222,20 @@
 int is_attached(int minor)
 {
 	FILE *pr;
-	char line[120], cs[40],st[40],ds[40];
-	int m,rv=0;
+	char token[40];
+	int rv=1;
+	long m,cm=-1;
+	char *p;
 
 	pr = fopen("/proc/drbd","r");
-	if(!pr) return rv;
+	if(!pr) return 0;
 
-	while(fgets(line,120,pr)) {
-		if(sscanf(line,"%2d: %s %s %s",&m,cs,st,ds)) {
-			if( m == minor ) {
-				rv = strcmp(cs,"Unconfigured");
-				if(rv) rv = strncmp(ds,"ds:Diskless/",11);
-				break;
-			}
+	while(fget_token(token,40,pr) != EOF) {
+		m=strtol(token,&p,10);
+		if(*p==':' && p-token == (long)strlen(token)-1 ) cm=m;
+		if( cm == minor ) {
+			if(!strcmp(token,"cs:Unconfigured")) rv = 0;
+			if(!strncmp(token,"ds:Diskless",11)) rv = 0;
 		}
 	}
 	fclose(pr);

Modified: trunk/user/drbdtool_common.c
===================================================================
--- trunk/user/drbdtool_common.c	2006-02-05 20:51:49 UTC (rev 2059)
+++ trunk/user/drbdtool_common.c	2006-02-07 21:19:25 UTC (rev 2060)
@@ -356,3 +356,23 @@
 "         -<  Node was in the progress of setting all bits in the bitmap  >--+\n"
 "\n");
 }
+
+int fget_token(char *s, int size, FILE* stream)
+{
+	int c;
+	char* sp = s;
+
+	do { // eat white spaces in front.
+		c = getc(stream);
+		if( c == EOF) return EOF;
+	} while (!isgraph(c));
+
+	do { // read the first word into s
+		*sp++ = c;
+		c = getc(stream);
+		if ( c == EOF) break;
+	} while (isgraph(c) && --size);
+
+	*sp=0;
+	return 1;
+}

Modified: trunk/user/drbdtool_common.h
===================================================================
--- trunk/user/drbdtool_common.h	2006-02-05 20:51:49 UTC (rev 2059)
+++ trunk/user/drbdtool_common.h	2006-02-07 21:19:25 UTC (rev 2060)
@@ -35,5 +35,6 @@
 extern void dt_pretty_print_gc(const __u32* gen_cnt);
 extern void dt_print_uuids(const __u64* uuid, unsigned int flags);
 extern void dt_pretty_print_uuids(const __u64* uuid, unsigned int flags);
+extern int fget_token(char *s, int size, FILE* stream);
 
 #endif



More information about the drbd-cvs mailing list