Whamcloud - gitweb
snap/snap.c: snap_do_cow() fixed case with existing indirect object
[fs/lustre-release.git] / lustre / obdclass / obdcontrol
index e4eebbe..51f63df 100755 (executable)
@@ -66,6 +66,11 @@ eval 'sub OBD_SNAP_SETTABLE () { &_IOC(3, ord(\'f\'), 40, 4);}' unless
 eval 'sub OBD_SNAP_PRINTTABLE () { &_IOC(3, ord(\'f\'), 41, 4);}' unless
   defined(&OBD_SNAP_PRINTTABLE);
 
+eval 'sub OBD_SNAP_RUNIT () { &_IOC(3, ord(\'f\'), 42, 4);}' unless
+  defined(&OBD_SNAP_RUNIT);
+eval 'sub OBD_EXT2_RUNIT () { &_IOC(3, ord(\'f\'), 61, 4);}' unless
+  defined(&OBD_EXT2_RUNIT);
+
 eval 'sub ATTR_MODE () {1;}' unless defined(&ATTR_MODE);
 eval 'sub ATTR_UID () {2;}' unless defined(&ATTR_UID);
 eval 'sub ATTR_GID () {4;}' unless defined(&ATTR_GID);
@@ -103,6 +108,9 @@ my %commands =
      'snapset' => {func => "SnapSetTable", doc => "snapset tableno file" },
      'snapprint' => {func => "SnapPrint", doc => "snapprint tableno"},
 
+     'testext2iterator' => {func => "TestExt2Iterator", doc => ""},
+     'testsnapiterator' => {func => "TestSnapIterator", doc => ""},
+
      'snaptable' => {func => "SnapShotTable", doc => "snaptable: build a snapshot table (interactive)"},
      'copy' => {func => "Copy", doc => "copy srcid tgtid"},
      'migrate' => {func => "Migrate", doc => "migrate srcid tgtid"},
@@ -267,7 +275,7 @@ sub Attach {
        $datalen = 4 * 4;
     }
 
-    my $packed = pack("ipip", length($type), $type, $datalen, $data);
+    my $packed = pack("Lipip", $::client_id, length($type), $type, $datalen, $data);
 
     my $rc = ioctl(DEV_OBD, &OBD_IOC_ATTACH, $packed);
 
@@ -295,6 +303,56 @@ sub Detach {
 }
 
 
+sub TestExt2Iterator { 
+    my $err = 0;
+    my $type = "ext2_obd";
+    $data = pack("i", 4711); # bogus data
+    $datalen = 4;
+
+    my $len = length($type);
+    my $cl = length($data);
+    my $add = pack("p", $data);
+    print "type $type (len $len), datalen $datalen ($cl)\n";
+    my $packed = pack("Lipip", $::client_id, length($type), $type, $datalen, $data);
+
+    my $rc = ioctl(DEV_OBD, &OBD_EXT2_RUNIT, $packed);
+
+    if (!defined $rc) {
+       print STDERR "ioctl failed: $!\n";
+    } elsif ($rc eq "0 but true") {
+       print "Finished (success)\n";
+    } else {
+       print "ioctl returned error code $rc.\n";
+    }
+}
+
+
+sub TestSnapIterator { 
+    my $err = 0;
+    my $type = "snap_obd";
+    $data = pack("i", 4711); # bogus data
+    $datalen = 4;
+
+    my $len = length($type);
+    my $cl = length($data);
+    my $add = pack("p", $data);
+    print "type $type (len $len), datalen $datalen ($cl)\n";
+    my $packed = pack("Lipip", $::client_id, length($type), $type, $datalen, $data);
+
+    my $rc = ioctl(DEV_OBD, &OBD_SNAP_RUNIT, $packed);
+
+    if (!defined $rc) {
+       print STDERR "ioctl failed: $!\n";
+    } elsif ($rc eq "0 but true") {
+       print "Finished (success)\n";
+    } else {
+       print "ioctl returned error code $rc.\n";
+    }
+}
+
+
 sub SnapPrint { 
     my $err = 0;
     my $type = "snap_obd";
@@ -307,7 +365,7 @@ sub SnapPrint {
     my $cl = length($data);
     my $add = pack("p", $data);
     print "type $type (len $len), datalen $datalen ($cl)\n";
-    my $packed = pack("ipip", length($type), $type, $datalen, $data);
+    my $packed = pack("Lipip", $::client_id, length($type), $type, $datalen, $data);
 
     my $rc = ioctl(DEV_OBD, &OBD_SNAP_PRINTTABLE, $packed);
 
@@ -354,7 +412,7 @@ sub SnapSetTable {
     my $cl = length($data);
     my $add = pack("p", $data);
     print "type $type (len $len), datalen $datalen ($cl)\n";
-    my $packed = pack("ipip", length($type), $type, $datalen, $data);
+    my $packed = pack("Lipip", $::client_id, length($type), $type, $datalen, $data);
 
     my $rc = ioctl(DEV_OBD, &OBD_SNAP_SETTABLE, $packed);
 
@@ -378,11 +436,6 @@ sub SnapAttach {
     my $data;
     my $datalen = 0;
 
-    if ( ! -f $file ) {
-       print "No such file $file\n";
-    }
-
-    $table = ReadSnapShotTable($file);
     $data = pack("iii", $snapdev, $snapno, $tableno);
     $datalen = 3 * 4;
 
@@ -390,7 +443,7 @@ sub SnapAttach {
     my $cl = length($data);
     my $add = pack("p", $data);
     print "type $type (len $len), datalen $datalen ($cl)\n";
-    my $packed = pack("ipip", length($type), $type, $datalen, $data);
+    my $packed = pack("Lipip", $::client_id, length($type), $type, $datalen, $data);
 
     my $rc = ioctl(DEV_OBD, &OBD_IOC_ATTACH, $packed);