[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