From a847575aa1ff0cffe85a1bf224b284ed6b8e2cc1 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Wed, 10 Mar 2010 15:21:18 +1100 Subject: 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 --- Grow.c | 11 ++++++++--- 1 file 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]); } -- cgit v1.2.1