diff options
author | NeilBrown <neilb@suse.de> | 2010-03-10 15:21:18 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2010-03-10 15:21:28 +1100 |
commit | a847575aa1ff0cffe85a1bf224b284ed6b8e2cc1 (patch) | |
tree | 67c3293ab96840eff1f6bc3f23b27ea99479db3e | |
parent | 1ff98339283645a20c980d540f6c4d82693e7daf (diff) | |
download | mdadm-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.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -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]); } |