Author: arekm                        Date: Thu Mar  8 21:15:08 2012 GMT
Module: packages                      Tag: HEAD
---- Log message:
- rel 3; fix but when activating bitmap on array fails sometimes

---- Files affected:
packages/mdadm:
   mdadm.spec (1.115 -> 1.116) , mdadm-bitmap.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/mdadm/mdadm.spec
diff -u packages/mdadm/mdadm.spec:1.115 packages/mdadm/mdadm.spec:1.116
--- packages/mdadm/mdadm.spec:1.115     Thu Feb 16 06:40:45 2012
+++ packages/mdadm/mdadm.spec   Thu Mar  8 22:15:03 2012
@@ -9,7 +9,7 @@
 Summary(pl.UTF-8):     Narzędzie do tworzenia i obsługi programowych macierzy 
RAID
 Name:          mdadm
 Version:       3.2.3
-Release:       2
+Release:       3
 License:       GPL v2+
 Group:         Base
 Source0:       
http://www.kernel.org/pub/linux/utils/raid/mdadm/%{name}-%{version}.tar.bz2
@@ -21,6 +21,7 @@
 Source5:       %{name}-initramfs-hook
 Source6:       %{name}-initramfs-local-top
 Patch0:                %{name}-segv.patch
+Patch1:                %{name}-bitmap.patch
 URL:           http://www.kernel.org/pub/linux/utils/raid/mdadm/
 BuildRequires: groff
 BuildRequires: rpmbuild(macros) >= 1.213
@@ -80,6 +81,7 @@
 %prep
 %setup -q
 %patch0 -p1
+%patch1 -p1
 
 %build
 %if %{with initrd}
@@ -195,6 +197,9 @@
 All persons listed below can be reached at <cvs_login>@pld-linux.org
 
 $Log$
+Revision 1.116  2012/03/08 21:15:03  arekm
+- rel 3; fix but when activating bitmap on array fails sometimes
+
 Revision 1.115  2012/02/16 05:40:45  arekm
 - rel 2; fix segv at assemble (sometimes only)
 

================================================================
Index: packages/mdadm/mdadm-bitmap.patch
diff -u /dev/null packages/mdadm/mdadm-bitmap.patch:1.1
--- /dev/null   Thu Mar  8 22:15:09 2012
+++ packages/mdadm/mdadm-bitmap.patch   Thu Mar  8 22:15:03 2012
@@ -0,0 +1,83 @@
+commit 6ef89052d85b8137b8a7100f761d896ae6f61001
+Author: NeilBrown <[email protected]>
+Date:   Tue Feb 7 11:55:18 2012 +1100
+
+    super1: make aread/awrite always use an aligned buffer.
+    
+    A recently change to write_bitmap1 meant awrite would sometimes
+    write from a non-aligned buffer which of course break.
+    
+    So change awrite (and aread) to always use their own aligned
+    buffer to ensure safety.
+    
+    Reported-by: Alexander Lyakas <[email protected]>
+    Signed-off-by: NeilBrown <[email protected]>
+
+diff --git a/super1.c b/super1.c
+index d23d6e8..cfa237a 100644
+--- a/super1.c
++++ b/super1.c
+@@ -143,17 +143,19 @@ static int aread(int fd, void *buf, int len)
+        * the full sector and copy relevant bits into
+        * the buffer
+        */
+-      int bsize;
++      int bsize, iosize;
+       char *b;
+       int n;
+-      if (ioctl(fd, BLKSSZGET, &bsize) != 0 ||
+-          bsize <= len)
+-              return read(fd, buf, len);
+-      if (bsize > 4096)
++      if (ioctl(fd, BLKSSZGET, &bsize) != 0)
++              bsize = 512;
++
++      if (bsize > 4096 || len > 4096)
+               return -1;
+       b = (char*)(((long)(abuf+4096))&~4095UL);
+ 
+-      n = read(fd, b, bsize);
++      for (iosize = 0; iosize < len; iosize += bsize)
++              ;
++      n = read(fd, b, iosize);
+       if (n <= 0)
+               return n;
+       lseek(fd, len - n, 1);
+@@ -171,22 +173,27 @@ static int awrite(int fd, void *buf, int len)
+        * than the write.
+        * The address must be sector-aligned.
+        */
+-      int bsize;
++      int bsize, iosize;
+       char *b;
+       int n;
+-      if (ioctl(fd, BLKSSZGET, &bsize) != 0 ||
+-          bsize <= len)
+-              return write(fd, buf, len);
+-      if (bsize > 4096)
++      if (ioctl(fd, BLKSSZGET, &bsize) != 0)
++              bsize = 512;
++      if (bsize > 4096 || len > 4096)
+               return -1;
+       b = (char*)(((long)(abuf+4096))&~4095UL);
+ 
+-      n = read(fd, b, bsize);
+-      if (n <= 0)
+-              return n;
+-      lseek(fd, -n, 1);
++      for (iosize = 0; iosize < len ; iosize += bsize)
++              ;
++
++      if (len != iosize) {
++              n = read(fd, b, iosize);
++              if (n <= 0)
++                      return n;
++              lseek(fd, -n, 1);
++      }
++
+       memcpy(b, buf, len);
+-      n = write(fd, b, bsize);
++      n = write(fd, b, iosize);
+       if (n <= 0)
+               return n;
+       lseek(fd, len - n, 1);
================================================================

---- CVS-web:
    
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/mdadm/mdadm.spec?r1=1.115&r2=1.116&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to