[DRBD-cvs] testing by phil; I just realized that read_gc and write_g...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Mon, 29 Mar 2004 16:25:31 +0200 (CEST)


DRBD CVS committal

Author  : phil
Project : drbd
Module  : testing

Dir     : drbd/testing


Modified Files:
      Tag: rel-0_7-branch
	read_gc.pl write_gc.pl 


Log Message:
I just realized that read_gc and write_gc were could not handle
devices with external metadata. -- Tried to fix that...
[write_gc untested]

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/testing/read_gc.pl,v
retrieving revision 1.2.2.5
retrieving revision 1.2.2.6
diff -u -3 -r1.2.2.5 -r1.2.2.6
--- read_gc.pl	17 Nov 2003 21:34:39 -0000	1.2.2.5
+++ read_gc.pl	29 Mar 2004 14:25:26 -0000	1.2.2.6
@@ -8,12 +8,12 @@
 use constant DRBD_MD_MAGIC => 0x83740267+3;
 use constant BLKFLSBUF => 0x1261; # 0x1261 is BLKFLSBUF on intel.
 
-sub read_print_gc_file($$)
+sub read_print_gc_file($$$)
   {
-    my ($ll_dev,$resource)=@_;
+    my ($md_dev,$md_index,$resource)=@_;
     my ($rr,$buffer,$pos,$md_start,$sector);
 
-    sysopen (GCF,$ll_dev,O_RDONLY)
+    sysopen (GCF,$md_dev,O_RDONLY)
       or die "can not open GC file";
 
     ioctl(GCF,BLKFLSBUF,0);
@@ -22,8 +22,12 @@
     # this we would simply the same values at subsequent calls, that
     # we saw at the first call.
 
-    $pos = sysseek(GCF, 0, SEEK_END);
-    $md_start = (int($pos / (4*1024)) * (4*1024)) - 128 *1024*1024;
+    if ($md_index == -1) {
+	$pos = sysseek(GCF, 0, SEEK_END);
+	$md_start = (int($pos / (4*1024)) * (4*1024)) - 128 *1024*1024;
+    } else {
+	$md_start = 128*1024*1024*$md_index;
+    }
 
     $rr=sysseek(GCF, $md_start, SEEK_SET);
     die "2nd seek failed rr=$rr md_start=$md_start" if ($rr != $md_start) ;
@@ -52,7 +56,7 @@
 sub main()
 {
 
-    my (@resources,$res,$disk);
+    my (@resources,$res,$disk,$index);
 
     @resources = sort(split(' ',`drbdadm sh-devices`));
 
@@ -69,8 +73,9 @@
 EOS
 
     for $res (@resources) {
-	chomp($disk = `drbdadm sh-ll-dev $res`);
-	read_print_gc_file($disk,$res);
+	chomp($disk = `drbdadm sh-md-dev $res`);
+	chomp($index = `drbdadm sh-md-idx $res`);
+	read_print_gc_file($disk,$index,$res);
     }
 }
 
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/testing/write_gc.pl,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -3 -r1.1.2.2 -r1.1.2.3
--- write_gc.pl	30 Oct 2003 10:33:57 -0000	1.1.2.2
+++ write_gc.pl	29 Mar 2004 14:25:26 -0000	1.1.2.3
@@ -22,8 +22,8 @@
 
 sub write_gc_file
 {
-    my ($ll_dev,$del_al,$Consistent,$HumanCnt,$TimeoutCnt,$ConnectedCnt,
-	$ArbitraryCnt,$lastState,$ConnectedInd) = @_;
+    my ($md_dev,$md_index,$del_al,$Consistent,$HumanCnt,$TimeoutCnt,
+	$ConnectedCnt,$ArbitraryCnt,$lastState,$ConnectedInd) = @_;
     my ($Flags,$rr,$pos,$md_start,$out);
 
     ensure_default(\$Consistent,"Consistent",1);
@@ -34,7 +34,7 @@
     ensure_default(\$lastState,"lastState",0);
     ensure_default(\$ConnectedInd,"ConnectedInd",0);
 
-    sysopen (GCF,$ll_dev,O_WRONLY)
+    sysopen (GCF,$md_dev,O_WRONLY)
 	or die "can not open GC file";
 
     ioctl(GCF,BLKFLSBUF,0);
@@ -43,8 +43,12 @@
     # this we would simply the same values at subsequent calls, that
     # we saw at the first call.
 
-    $pos=sysseek(GCF, 0, SEEK_END);
-    $md_start = (int($pos / (4*1024))) * (4*1024) - 128 *1024*1024;
+    if ($md_index == -1) {
+	$pos = sysseek(GCF, 0, SEEK_END);
+	$md_start = (int($pos / (4*1024)) * (4*1024)) - 128 *1024*1024;
+    } else {
+	$md_start = 128*1024*1024*$md_index;
+    }
 
     $rr=sysseek(GCF, $md_start+8, SEEK_SET);
     die "2nd seek failed rr=$rr md_start=$md_start" if ($rr != $md_start+8) ;
@@ -88,7 +92,7 @@
 sub main
 {
     my ($res, $opt, @other_args) = @_;
-    my ($disk,$del_al);
+    my ($disk,$index,$del_al);
 
     if(!defined($res)) {
 	print "USAGE: write_gc.pl resource-name [--del-al] counter-values...\n";
@@ -102,9 +106,10 @@
 	$del_al=0;
     }
 
-    chomp($disk = `drbdadm sh-ll-dev $res`);
+    chomp($disk = `drbdadm sh-md-dev $res`);
+    chomp($index = `drbdadm sh-md-idx $res`);
 
-    write_gc_file($disk,$del_al,@other_args);
+    write_gc_file($disk,$index,$del_al,@other_args);
 
 }