diff options
author | Omar Sandoval <osandov@fb.com> | 2015-06-19 11:52:51 -0700 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2015-08-09 07:34:26 -0700 |
commit | 73ff61dbe5edeb1799d7e91c8b0641f87feb75fa (patch) | |
tree | cb58fb5cbe9a3c6c0077babd130ee54135e35e8a /Documentation/io-mapping.txt | |
parent | b4ee1782686d5b7a97826d67fdeaefaedbca23ce (diff) | |
download | talos-obmc-linux-73ff61dbe5edeb1799d7e91c8b0641f87feb75fa.tar.gz talos-obmc-linux-73ff61dbe5edeb1799d7e91c8b0641f87feb75fa.zip |
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 'Documentation/io-mapping.txt')
0 files changed, 0 insertions, 0 deletions