[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);
}