summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2010-03-10 15:21:18 +1100
committerNeilBrown <neilb@suse.de>2010-03-10 15:21:28 +1100
commita847575aa1ff0cffe85a1bf224b284ed6b8e2cc1 (patch)
tree67c3293ab96840eff1f6bc3f23b27ea99479db3e
parent1ff98339283645a20c980d540f6c4d82693e7daf (diff)
downloadmdadm-a847575aa1ff0cffe85a1bf224b284ed6b8e2cc1.tar.gz
mdadm-a847575aa1ff0cffe85a1bf224b284ed6b8e2cc1.tar.xz
mdadm-a847575aa1ff0cffe85a1bf224b284ed6b8e2cc1.zip
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@suse.de>
-rw-r--r--Grow.c11
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]);
}