NeilBrown: Grow: fix recent breakage - lseek return status.
    Martin F. Krafft 
    madduck at alioth.debian.org
       
    Mon May 24 09:21:18 UTC 2010
    
    
  
Module: mdadm
Branch: upstream
Commit: a847575aa1ff0cffe85a1bf224b284ed6b8e2cc1
URL:    http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=a847575aa1ff0cffe85a1bf224b284ed6b8e2cc1
Author: NeilBrown <neilb at suse.de>
Date:   Wed Mar 10 15:21:18 2010 +1100
Grow: fix recent breakage - lseek return status.
Recent fix to check lseek64 return status got it badly wrong.
It doesn't return 0 on success!!
Fix it.
Signed-off-by: NeilBrown <neilb at suse.de>
---
 Grow.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/Grow.c b/Grow.c
index 62c67d0..6264996 100644
--- a/Grow.c
+++ b/Grow.c
@@ -1337,10 +1337,13 @@ int grow_backup(struct mdinfo *sra,
 			bsb.sb_csum2 = bsb_csum((char*)&bsb,
 						((char*)&bsb.sb_csum2)-((char*)&bsb));
 
-		rv |= lseek64(destfd[i], destoffsets[i] - 4096, 0);
+		if (lseek64(destfd[i], destoffsets[i] - 4096, 0) != destoffsets[i] - 4096)
+			rv = 1;
 		rv = rv ?: write(destfd[i], &bsb, 512);
 		if (destoffsets[i] > 4096) {
-			rv |= lseek64(destfd[i], destoffsets[i]+stripes*chunk*odata, 0);
+			if (lseek64(destfd[i], destoffsets[i]+stripes*chunk*odata, 0) !=
+			    destoffsets[i]+stripes*chunk*odata)
+				rv = 1;
 			rv = rv ?: write(destfd[i], &bsb, 512);
 		}
 		fsync(destfd[i]);
@@ -1412,7 +1415,9 @@ int wait_backup(struct mdinfo *sra,
 		if (memcmp(bsb.magic, "md_backup_data-2", 16) == 0)
 			bsb.sb_csum2 = bsb_csum((char*)&bsb,
 						((char*)&bsb.sb_csum2)-((char*)&bsb));
-		rv |= lseek64(destfd[i], destoffsets[i]-4096, 0);
+		if (lseek64(destfd[i], destoffsets[i]-4096, 0) !=
+		    destoffsets[i]-4096)
+			rv = 1;
 		rv = rv ?: write(destfd[i], &bsb, 512);
 		fsync(destfd[i]);
 	}
    
    
More information about the pkg-mdadm-commits
mailing list