create metadata from DMRAID

Heinz Mauelshagen mauelshagen at redhat.com
Thu Jul 5 16:31:32 UTC 2007


On Tue, Jul 03, 2007 at 10:18:12AM -0700, Kulkarni, Sunil A wrote:
>  
> 
> >-----Original Message-----
> >From: ataraid-list-bounces at redhat.com 
> >[mailto:ataraid-list-bounces at redhat.com] On Behalf Of Heinz Mauelshagen
> >Sent: Tuesday, July 03, 2007 8:31 AM
> >To: Fang, Ying
> >Cc: ATARAID (eg, Promise Fasttrak, Highpoint 370) related discussions
> >Subject: Re: create metadata from DMRAID
> >
> >On Mon, Jul 02, 2007 at 04:51:24PM -0700, Fang, Ying wrote:
> >> >
> >> >The data structure already exist: raid_set and raid_dev.
> >> >For one-level sets, a raid_set structure with multiple raid_dev
> >> >structures hanging off.
> >> >For 2-level sets (eg. RAID10), a top-level raid_set 
> >structure, multiple
> >> >bottom level raid_set structures hanging off it and 
> >multiple raid_dev
> >> >structures hanging off the bottom level ones.
> >> >
> >> >You got to check, if the properties (ie. the structure mebers) are
> >> >sufficient or if we need to add some.
> >> >
> >> >> Then it calls .create of an
> >> >> appropriate handler to build and write metadata to each 
> >hard device
> >> of
> >> >> the raid set.
> >> >
> >> >It calls a) .create and of that succeeds it'll call b) .write
> >> >in a followup step.
> >> 
> >> You mean the metadata creation procedure is the reverse path 
> >of building
> >> a raidset from metadata:
> >> 1. create a raid set (struct raid_set) and its subsets
> >> 2. create a list of raid devices for all subsets
> >
> >Yes, a list of raid devices for each lowest level subset.
> >
> >> 3. call .create for each raid device to generate a complete metadata
> >> attached to the device (struct raid_dev)
> >
> >Right, that's where we got to think about needing any additional
> >members in structs raid_set and raid_dev in case we can't store 
> >enough RAID set or RAID device properties.
> >
> 
> The parameters we need to be passed to isw are:
>  - Volume name
>  - RAID level
>  - stripe size
>  - size of the volume
>  - list of devices 
> 
> Of these all except the stripe size can be sent through raid_dev. Stripe
> size is available only in raid_set. If we can send the stripe size
> through raid_dev structure, that will be the only structure we need to
> send to isw. Also in case of RAID 10, we need to send the top level
> also. So, if we can accommodate these two parameters, we can do away
> with building and sending raid_set structure.

Yes, change .create prototype to:

int (*create)(struct lib_context *lc, struct raid_set *rs);

and have all properties at the hand of the metadata format handler.

> I am assuming we can send the volume size through sectors field of
> raid_dev, eventhough that field actually indicates total sectors on the
> disk. 

No, it actually indicates the amount of sectors belonging to the volume
on the disk. offset indicates the offset where the segment of size sectors
starts on the disk.
So both should be usable to pass in what you want.

> 
> >> 4. call .write to write metadata to each hard drive.
> >
> >Correct.
> >
> 
> I feel there is no need to make an extra call to .write after .create.

No, like Darrick already mentioned on this threads those operations
are orthogonal:

.create called once and .write per disk.

> The create function does all the creation of the metadata and all that
> is left is just write it to the disks. If you want to use extra .write
> function to write this, it will cause confusion as to write the
> previously created data with .create or write new data as the .write
> function is used currently.

Well, that isn't confusing, because on case you create, you write over
any give metadata anyway, hence it is a question of deciding which
metadata to pass into the .write calls.

Heinz

> 
> >> 
> >> 
> >> >>
> >> >> How about manual and auto rebuilding? Should updating 
> >metadata status
> >> be
> >> >> handled by DMRAID or device drivers?
> >> >
> >> >By dmraid using dmeventd, which is part of libdevmapper.
> >> >You got to create a dmraid DSO for dmeventd to make that happen.
> >> >Look at the mirror DSO for dmeventd for an example.
> >> >
> >> 
> >> Is it to call dm_event_handler_create, and 
> >dm_event_registered_device to
> >> create a dmraid DSO? I didn't find the mirror DSO. Could you 
> >give me the
> >> name of the file? 
> >
> >It is part of liblvm2:
> >lib/mirror/mirror.c
> >
> >Heinz
> >
> >> 
> >> Thanks,
> >> Ying
> >
> >_______________________________________________
> >Ataraid-list mailing list
> >Ataraid-list at redhat.com
> >https://www.redhat.com/mailman/listinfo/ataraid-list




More information about the Ataraid-list mailing list