Btrfs: account for missing devices in RAID allocation profiles
authorChris Mason <chris.mason@oracle.com>
Mon, 13 Dec 2010 19:56:23 +0000 (14:56 -0500)
committerChris Mason <chris.mason@oracle.com>
Tue, 14 Dec 2010 01:06:52 +0000 (20:06 -0500)
commitcd02dca56442e1504fd6bc5b96f7f1870162b266
tree1a38d99fc581974ba6d8136c42ca81f3b1216ea3
parent68433b73b104bff388aac376631d32abbbd872b0
Btrfs: account for missing devices in RAID allocation profiles

When we mount in RAID degraded mode without adding a new device to
replace the failed one, we can end up using the wrong RAID flags for
allocations.

This results in strange combinations of block groups (raid1 in a raid10
filesystem) and corruptions when we try to allocate blocks from single
spindle chunks on drives that are actually missing.

The first device has two small 4MB chunks in it that mkfs creates and
these are usually unused in a raid1 or raid10 setup.  But, in -o degraded,
the allocator will fall back to these because the mask of desired raid groups
isn't correct.

The fix here is to count the missing devices as we build up the list
of devices in the system.  This count is used when picking the
raid level to make sure we continue using the same levels that were
in place before we lost a drive.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/extent-tree.c
fs/btrfs/volumes.c
fs/btrfs/volumes.h