Btrfs, replace: write dirty pages into the replace target device
authorMiao Xie <miaox@cn.fujitsu.com>
Fri, 14 Nov 2014 08:06:25 +0000 (16:06 +0800)
committerMiao Xie <miaox@cn.fujitsu.com>
Wed, 3 Dec 2014 02:18:46 +0000 (10:18 +0800)
commit8f04026f489cbaac9039c1d02ada65778858697e
treeae10c7af5f98e4b60d55676b8d59b8b543980ae8
parent6ef0ee7ebf3522ace4f242b029f09c96b68b4260
Btrfs, replace: write dirty pages into the replace target device

The implementation is simple:
- In order to avoid changing the code logic of btrfs_map_bio and
  RAID56, we add the stripes of the replace target devices at the
  end of the stripe array in btrfs bio, and we sort those target
  device stripes in the array. And we keep the number of the target
  device stripes in the btrfs bio.
- Except write operation on RAID56, all the other operation don't
  take the target device stripes into account.
- When we do write operation, we read the data from the common devices
  and calculate the parity. Then write the dirty data and new parity
  out, at this time, we will find the relative replace target stripes
  and wirte the relative data into it.

Note: The function that copying old data on the source device to
the target device was implemented in the past, it is similar to
the other RAID type.

Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
fs/btrfs/raid56.c
fs/btrfs/volumes.c
fs/btrfs/volumes.h