[dm-devel] Re: [PATCH] dm-striped device sizes must be multiple of chunk-size

Heinz Mauelshagen mauelshagen at redhat.com
Wed Mar 29 13:48:47 UTC 2006


Kevin,

got a fix in a central location (activate.c) which looks like it cuts the issue.
Just waiting for metadata samples of reporters to get in to confirm.

Heinz

On Tue, Mar 28, 2006 at 02:08:13PM +0200, Heinz Mauelshagen wrote:
> 
> Kevin,
> 
> I'm not convinced that a more complex mapping is needed.
> 
> Haven't seen the reported case so far with a lot of RAID0 metadata samples
> users provided to me for various ATARAID flavours.
> 
> The RAID device size (which is smaller than the underlying device)
> needs to be divisable w/o rest by the stride size IMO.
> 
> Guess I'm missing something about setting up the device size (rd->sectors)
> correctly in the metadata format handler.
> 
> Investigating...
> 
> Heinz
> 
> On Fri, Mar 24, 2006 at 10:46:25PM -0600, Kevin Corry wrote:
> > On Wed March 22 2006 11:28 pm, Joseph Yasi wrote:
> > >     I am using the dmraid utility to detect and configure my Intel
> > > Software Raid RAID0 array.  When upgrading to 2.6.16 from 2.6.15, the
> > > system failed to boot because the device-mapper array was not built.
> > > I have traced the problem to this patch that limits dm-stripe to
> > > targets that are multiples of the chunk size.  I don't know whether to
> > > consider this a problem with device-mapper or with the Intel Software
> > > Raid BIOS that built the array.  Dmraid is giving me a target of
> > > 980460038 blocks with a chunk size of 256 blocks.  Is this a problem
> > > with device-mapper, the dmraid utility or the raid bios?  Should
> > > device-mapper handle striped targets that are not multiples of the
> > > chunk size?
> > 
> > Hmm...I obviously didn't expect dmraid to be creating such devices.
> > 
> > The kernel patch that was added to 2.6.16 is definitely correct. Dm-stripe 
> > should not allow creating a device with a size that's not a multiple of the 
> > chunk-size. To do so leaves a partial chunk at the end of each device. While 
> > at first glance this might not seem like a big deal, the striping 
> > calculations in the I/O path do not handle this situation (at least, not in 
> > the way you would think it should be handled), and cause I/O errors if you 
> > try to access the end of the stripe device.
> > 
> > > dmesg gives these pertinent lines:
> > > device-mapper: dm-stripe: Target length not divisible by chunk size.
> > > device-mapper: error adding target to table.
> > >
> > > dmsetup status
> > > isw_caejhbcidd_Volume03: 0 976173660 linear
> > > isw_caejhbcidd_Volume02: 0 4209030 linear
> > > isw_caejhbcidd_Volume01: 0 64197 linear
> > > isw_caejhbcidd_Volume0: 0 980460038 striped
> > >
> > > dmraid -s
> > > *** Group superset isw_caejhbcidd
> > > --> Active Subset
> > > name   : isw_caejhbcidd_Volume0
> > > size   : 980460038
> > > stride : 256
> > > type   : stripe
> > > status : ok
> > > subsets: 0
> > > devs   : 2
> > > spares : 0
> > 
> > In your example, your stripe device is 980460038 sectors, with a 256 sector 
> > chunk-size.This means the stripe device has 3829922 chunks, with 6 sectors 
> > left over (3 on each of the two devices, presumably). I would think that the 
> > BIOS intends that these last 3 sectors on each device should be striped with 
> > an effective chunk-size of 3 sectors. To do this, dmraid should set up a 
> > device with two targets, one with a chunk-size of 256, and one with a 
> > chunk-size of 3. The map would look something like:
> > 
> > 0 980460032 striped 2 256 /dev/hda 0 /dev/hdb 0
> > 980460032 6 striped 2 3 /dev/hda /dev/hdb 490230016
> > 
> > Unfortunately, this doesn't work either, because the chunk-size must be a 
> > power-of-2. So...since we know the second target in the map really represents 
> > only one "stripe", we could treat them as a concatenation of independent 
> > linear targets. So we end up with a map like this:
> > 
> > 0 980460032 striped 2 256 /dev/hda 0 /dev/hdb 0
> > 980460032 3 linear /dev/hda 490230016
> > 980460032 3 linear /dev/hdb 490230016
> > 
> > I'm thinking that this mapping would do what the BIOS is actually intending. 
> > It ought to be relatively straight-forward to recognize this situation in 
> > dmraid and set up a mapping similar to the one above.
> > 
> > -- 
> > Kevin Corry
> > kevcorry at us.ibm.com
> > http://www.ibm.com/linux/
> > http://evms.sourceforge.net/
> > 
> > --
> > dm-devel mailing list
> > dm-devel at redhat.com
> > https://www.redhat.com/mailman/listinfo/dm-devel

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Heinz Mauelshagen                                 Red Hat GmbH
Consulting Development Engineer                   Am Sonnenhang 11
Storage Development                               56242 Marienrachdorf
                                                  Germany
Mauelshagen at RedHat.com                            PHONE +49  171 7803392
                                                  FAX   +49 2626 924446
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-




More information about the dm-devel mailing list