Yeah:)

I'd like to work on this. Here are my first observations:
- We need to call vdev_op_asize method with additonal 'offset' argument,
- We need to move data to new disk starting from the very begining, so
  we can't reuse scrub/resilver code which does tree-walk through the
  data.

Below you can see how I imagine to extend RAIDZ. Here is the legend:
<< >> - block boundaries
D<x> - data block
P<x> - parity block
N<x> - new parity block
U - unused
* - if offset in I/O request is less that this marker we use four
    disks only, if greater - we use five disks

After adding 'NewDisk' to RAIDZ vdev, we have something like this:
 
        Disk0   Disk1   Disk2   Disk3   NewDisk

        <<P00     D00     D01     D02     U
          P01     D03     D04     D05     U
          P02     D06>> <<P03     D07>>   U
        <<P04     D08>> <<P05     D09     U
          P06     D10     D11     D12>>   U
        <<P07     D13     D14     D15>>   U

Then we start moving data, but we need to beging from the start:
 
        Disk0   Disk1   Disk2   Disk3   NewDisk

        <<N00     D00     D01     D02     D03
          N01     D04     D05     D06>> <<P03
          D07>> * U       U       U       U
        <<P04     D08>> <<P05     D09     U
          P06     D10     D11     D12>>   U
        <<P07     D13     D14     D15>>   U
 
At the end we have something like this (free space at the end):

        Disk0   Disk1   Disk2   Disk3   NewDisk

        <<N00     D00     D01     D02     D03
          N01     D04     D05     D06>> <<P03
          D07>> <<P04     D08>> <<N03     D09
          D10     D11     D12>> <<N04     D13
          D14     D15>>   U       U       U
          U       U       U       U       U

The biggest problem for me is a method to traverse allocated blocks
sorted by offset. Any hints how to do it?

-- 
Pawel Jakub Dawidek                       http://www.wheel.pl
pjd at FreeBSD.org                           http://www.FreeBSD.org
FreeBSD committer                         Am I Evil? Yes, I Am!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
URL: 
<http://mail.opensolaris.org/pipermail/zfs-code/attachments/20070807/8d7c4e22/attachment.bin>

Reply via email to