Btrfs: Seed device support
authorYan Zheng <zheng.yan@oracle.com>
Tue, 18 Nov 2008 02:11:30 +0000 (21:11 -0500)
committerChris Mason <chris.mason@oracle.com>
Tue, 18 Nov 2008 02:11:30 +0000 (21:11 -0500)
commit2b82032c34ec40515d3c45c36cd1961f37977de8
treefbdfe7b13dd51983dfca4aeb75983b37ee186ff9
parentc146afad2c7fea6a366d4945c1bab9b03880f526
Btrfs: Seed device support

Seed device is a special btrfs with SEEDING super flag
set and can only be mounted in read-only mode. Seed
devices allow people to create new btrfs on top of it.

The new FS contains the same contents as the seed device,
but it can be mounted in read-write mode.

This patch does the following:

1) split code in btrfs_alloc_chunk into two parts. The first part does makes
the newly allocated chunk usable, but does not do any operation that modifies
the chunk tree. The second part does the the chunk tree modifications. This
division is for the bootstrap step of adding storage to the seed device.

2) Update device management code to handle seed device.
The basic idea is: For an FS grown from seed devices, its
seed devices are put into a list. Seed devices are
opened on demand at mounting time. If any seed device is
missing or has been changed, btrfs kernel module will
refuse to mount the FS.

3) make btrfs_find_block_group not return NULL when all
block groups are read-only.

Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
fs/btrfs/ctree.c
fs/btrfs/ctree.h
fs/btrfs/disk-io.c
fs/btrfs/extent-tree.c
fs/btrfs/ioctl.c
fs/btrfs/super.c
fs/btrfs/volumes.c
fs/btrfs/volumes.h