summaryrefslogtreecommitdiffstats
path: root/Kbuild
diff options
context:
space:
mode:
authorOmar Sandoval <osandov@fb.com>2015-06-19 11:52:51 -0700
committerChris Mason <clm@fb.com>2015-08-09 07:34:26 -0700
commit73ff61dbe5edeb1799d7e91c8b0641f87feb75fa (patch)
treecb58fb5cbe9a3c6c0077babd130ee54135e35e8a /Kbuild
parentb4ee1782686d5b7a97826d67fdeaefaedbca23ce (diff)
downloadop-kernel-dev-73ff61dbe5edeb1799d7e91c8b0641f87feb75fa.zip
op-kernel-dev-73ff61dbe5edeb1799d7e91c8b0641f87feb75fa.tar.gz
Btrfs: fix device replace of a missing RAID 5/6 device
The original implementation of device replace on RAID 5/6 seems to have missed support for replacing a missing device. When this is attempted, we end up calling bio_add_page() on a bio with a NULL ->bi_bdev, which crashes when we try to dereference it. This happens because btrfs_map_block() has no choice but to return us the missing device because RAID 5/6 don't have any alternate mirrors to read from, and a missing device has a NULL bdev. The idea implemented here is to handle the missing device case separately, which better only happen when we're replacing a missing RAID 5/6 device. We use the new BTRFS_RBIO_REBUILD_MISSING operation to reconstruct the data from parity, check it with scrub_recheck_block_checksum(), and write it out with scrub_write_block_to_dev_replace(). Reported-by: Philip <bugzilla@philip-seeger.de> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=96141 Signed-off-by: Omar Sandoval <osandov@fb.com> Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'Kbuild')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud