diff options
author | NeilBrown <neilb@suse.de> | 2013-07-16 08:50:47 +0200 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-07-18 06:18:01 +0200 |
commit | 7bb23c4934059c64cbee2e41d5d24ce122285176 (patch) | |
tree | e457c9dc9bfbc502f8a739749a6d6d287f2ec144 /drivers/md/dm-log-userspace-transfer.h | |
parent | Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/t... (diff) | |
download | linux-7bb23c4934059c64cbee2e41d5d24ce122285176.tar.xz linux-7bb23c4934059c64cbee2e41d5d24ce122285176.zip |
md/raid10: fix two problems with RAID10 resync.
1/ When an different between blocks is found, data is copied from
one bio to the other. However bv_len is used as the length to
copy and this could be zero. So use r10_bio->sectors to calculate
length instead.
Using bv_len was probably always a bit dubious, but the introduction
of bio_advance made it much more likely to be a problem.
2/ When preparing some blocks for sync, we don't set BIO_UPTODATE
except on bios that we schedule for a read. This ensures that
missing/failed devices don't confuse the loop at the top of
sync_request write.
Commit 8be185f2c9d54d6 "raid10: Use bio_reset()"
removed a loop which set BIO_UPTDATE on all appropriate bios.
So we need to re-add that flag.
These bugs were introduced in 3.10, so this patch is suitable for
3.10-stable, and can remove a potential for data corruption.
Cc: stable@vger.kernel.org (3.10)
Reported-by: Brassow Jonathan <jbrassow@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/dm-log-userspace-transfer.h')
0 files changed, 0 insertions, 0 deletions