[DRBD-cvs] user by phil; Tried to fix the "adjust" command of drb...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Tue, 30 Mar 2004 11:13:07 +0200 (CEST)


DRBD CVS committal

Author  : phil
Project : drbd
Module  : user

Dir     : drbd/user


Modified Files:
      Tag: rel-0_7-branch
	drbdadm_adjust.c 


Log Message:
Tried to fix the "adjust" command of drbdadm. 
[It is really terrible code, but I do not have the power to do it right
 now...]

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/user/Attic/drbdadm_adjust.c,v
retrieving revision 1.1.2.9
retrieving revision 1.1.2.10
diff -u -3 -r1.1.2.9 -r1.1.2.10
--- drbdadm_adjust.c	15 Dec 2003 15:25:53 -0000	1.1.2.9
+++ drbdadm_adjust.c	30 Mar 2004 09:13:02 -0000	1.1.2.10
@@ -114,7 +114,7 @@
   return rv;
 }
 
-int check_opt_v(FILE *in,char* name,int dm, char* unit,struct d_option* base)
+int check_opt_d(FILE *in,char* name,int dm, char* unit,struct d_option* base)
 {
   unsigned long  ul;
   struct d_option* o;
@@ -123,16 +123,36 @@
   int rv=0;
 
   sprintf(scs," %s = %%lu %s (%%[d]efault)\n",name,unit);
-  fscanf(in,scs,&ul,uu);
+  if(fscanf(in,scs,&ul,uu)>0) {
+    o=find_opt(base,name);
+    if(o) {
+      o->mentioned=1;
+      if(m_strtol(o->value,dm) != ul) rv=1;
+    } else {
+      if( uu[0] != 'd' ) rv=1;
+    }
+  }
+  //printf("check_opt_d(%s)=%d\n",name,rv);
+
+  return rv;
+}
+
+int check_opt_s(FILE *in,char* name,struct d_option* base)
+{
+  struct d_option* o;
+  char scs[200];  
+  char value[200];
+  int rv=0;
+
+  sprintf(scs," %s = %%s\n",name);
+  fscanf(in,scs,value);
   o=find_opt(base,name);
   if(o) {
     o->mentioned=1;
-    if(m_strtol(o->value,dm) != ul) rv=1;
-  } else {
-    if( uu[0] != 'd' ) rv=1;
+    if(strcmp(o->value,value)) rv=1;
   }
 
-  //printf("check_opt_v(%s)=%d\n",name,rv);
+  //printf("check_opt_s(%s)=%d [value=%s]\n",name,rv,value);
 
   return rv;
 }
@@ -181,10 +201,38 @@
     do_attach=1;
   }
 
+  rv=fscanf(in,"Meta device: %s   (%[^)])\n",str1,str2);
+  if(rv==1) {
+    if(strcmp("internal",str1)==0) {
+      if(strcmp("internal",res->me->meta_disk)) do_attach=1;
+    } 
+  }
+  if(rv==2) {
+    if(strcmp(str2,res->me->meta_disk)) do_attach=1;
+    rv=fscanf(in,"Meta index: %[0-9]\n",str1);
+    if(rv==1) {
+      if(strcmp(str1,res->me->meta_index)) do_attach=1;
+    }
+  }
+
+  /*
+res->me->meta_disk)) do_attach=1;
+  } else {
+    rv=fscanf(in,"Meta device: %*02d:%*02d   (%[^)])\n",str1);
+    if( (rv!=1) || strcmp(str1,res->me->meta_disk)) {
+      do_attach=1;
+    }
+
+    rv=fscanf(in,"Meta index: %[0-9]\n",str1);
+    if( (rv!=1) || strcmp(str1,res->me->meta_index)) {
+      do_attach=1;
+    }
+  }
+  */
   rv=fscanf(in,"Disk options%[:]\n",uu);
   if(rv==1) {
-    do_resize |= check_opt_v(in,"size",1024,"KB",res->disk_options);
-    do_attach |= check_opt_b(in,"do-panic",res->disk_options);
+    do_resize |= check_opt_d(in,"size",1024,"KB",res->disk_options);
+    do_attach |= check_opt_s(in,"on-io-error",res->disk_options);
 
     // Check if every options is also present in drbdsetup show's output.
     o=res->disk_options;
@@ -224,16 +272,19 @@
       if( uu[0] != 'd' ) do_connect=1;
     }
 
-    do_connect |= check_opt_v(in,"connect-int",1,"sec",res->net_options);
-    do_connect |= check_opt_v(in,"ping-int",1,"sec",res->net_options);
-    do_connect |= check_opt_v(in,"max-epoch-size",1,"",res->net_options);
-    do_connect |= check_opt_v(in,"max-buffers",1,"",res->net_options);
+    do_connect |= check_opt_d(in,"connect-int",1,"sec",res->net_options);
+    do_connect |= check_opt_d(in,"ping-int",1,"sec",res->net_options);
+    do_connect |= check_opt_d(in,"max-epoch-size",1,"",res->net_options);
+    do_connect |= check_opt_d(in,"max-buffers",1,"",res->net_options);
     do_connect |= complete(res->net_options);
   }
 
   rv=fscanf(in,"Syncer options%[:]\n",uu);
   if(rv==1) {
-    do_syncer |= check_opt_v(in,"rate",1024,"KB/sec",res->sync_options);
+    do_syncer |= check_opt_d(in,"rate",1024,"KB/sec",res->sync_options);
+    do_syncer |= check_opt_d(in,"group",1,"",res->sync_options);
+    do_syncer |= check_opt_d(in,"al-extents",1,"",res->sync_options);
+    do_syncer |= check_opt_b(in,"skip-sync",res->sync_options);
     do_syncer |= check_opt_b(in,"use-csums",res->sync_options);
     do_syncer |= complete(res->sync_options);
   }