[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-API] [PATCH] The checksumming for meta-data of mlvm now agrees with the original lvm



# HG changeset patch
# User Matthias Goergens <matthias.goergens@xxxxxxxxxx>
# Date 1278597747 -3600
# Node ID 03a96a2679360d969de2641814559c60211d98b3
# Parent  9e891e13c6c0f2eefc26d4b73a1bcffb6b406792
The checksumming for meta-data of mlvm now agrees with the original lvm.

Signed-off-by: Matthias Goergens <matthias.goergens@xxxxxxxxxx>

diff -r 9e891e13c6c0 -r 03a96a267936 mlvm/pv.ml
--- a/mlvm/pv.ml        Thu Jul 08 15:00:49 2010 +0100
+++ b/mlvm/pv.ml        Thu Jul 08 15:02:27 2010 +0100
@@ -300,38 +300,40 @@
     if written <> Constants.sector_size then failwith "Wrote short!";
     Unix.close fd
       
-  let read_md dev mdah n =
-    (* debug *)
-    let oc = open_out "/tmp/hdr" in
-    Printf.fprintf oc "%s\n%!" (to_ascii mdah);
-    close_out oc;
+       let read_md dev mdah n =
+               (* debug *)
+               let oc = open_out "/tmp/hdr" in
+               Printf.fprintf oc "%s\n%!" (to_ascii mdah);
+               close_out oc;
 
-    let locn = List.nth mdah.mdah_raw_locns n in
-    let fd = 
-      if !Constants.dummy_mode then begin
-       Unix.openfile (dummy_fname dev "md") [Unix.O_RDONLY] 0o000
-      end else begin
-       let fd = Unix.openfile dev [Unix.O_RDONLY] 0o000 in
-       ignore(Unix.LargeFile.lseek fd (Int64.add mdah.mdah_start 
locn.mrl_offset) Unix.SEEK_SET);  
-       fd
-      end
-    in
-    let md = 
-      if(Int64.add locn.mrl_offset locn.mrl_size > mdah.mdah_size) 
-      then
-       let firstbit = Int64.to_int (Int64.sub mdah.mdah_size locn.mrl_offset) 
in
-       let firstbitstr = really_read fd firstbit in
-       let secondbit = (Int64.to_int locn.mrl_size) - firstbit - 1 in
-       if not !Constants.dummy_mode then ignore(Unix.LargeFile.lseek fd 
(Int64.add mdah.mdah_start 512L) Unix.SEEK_SET);  
-       let secondbitstr = really_read fd secondbit in
-       firstbitstr ^ secondbitstr
-      else
-       really_read fd (Int64.to_int locn.mrl_size - 1) in
-    let checksum = Crc.crc md Crc.initial_crc in
-    Unix.close fd;
-    if checksum <> locn.mrl_checksum then
-      Printf.fprintf stderr "Checksum invalid in metadata: Found %lx, 
expecting %lx\n" checksum locn.mrl_checksum;
-    md
+               let locn = List.nth mdah.mdah_raw_locns n in
+               let fd =
+                       if !Constants.dummy_mode then begin
+                               Unix.openfile (dummy_fname dev "md") 
[Unix.O_RDONLY] 0o000
+                       end else begin
+                               let fd = Unix.openfile dev [Unix.O_RDONLY] 
0o000 in
+                               ignore(Unix.LargeFile.lseek fd (Int64.add 
mdah.mdah_start locn.mrl_offset) Unix.SEEK_SET);
+                               fd
+                       end
+               in
+               let md =
+                       (* Include terminating \0 in this string.
+                        * The checksum calculation in original lvm does so, 
too.*)
+                       if(Int64.add locn.mrl_offset locn.mrl_size > 
mdah.mdah_size)
+                       then (* wrap around *)
+                               let firstbit = Int64.to_int (Int64.sub 
mdah.mdah_size locn.mrl_offset) in
+                               let firstbitstr = really_read fd firstbit in
+                               let secondbit = (Int64.to_int locn.mrl_size) - 
firstbit in
+                               if not !Constants.dummy_mode then 
ignore(Unix.LargeFile.lseek fd (Int64.add mdah.mdah_start 512L) Unix.SEEK_SET);
+                               let secondbitstr = really_read fd secondbit in
+                               firstbitstr ^ secondbitstr
+                       else
+                               really_read fd (Int64.to_int locn.mrl_size) in
+               let checksum = Crc.crc md Crc.initial_crc in
+               Unix.close fd;
+               if checksum <> locn.mrl_checksum then
+                       Printf.fprintf stderr "Checksum invalid in metadata: 
Found %lx, expecting %lx\n" checksum locn.mrl_checksum;
+               md
       
   let write_md device mdah md =
     (* Find the current raw location of the metadata, assuming there's only 
one copy *)
 mlvm/pv.ml |  64 +++++++++++++++++++++++++++++++------------------------------
 1 files changed, 33 insertions(+), 31 deletions(-)


Attachment: xen-api-libs.hg.patch
Description: Text Data

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.