Commit Graph

160 Commits

Author SHA1 Message Date
Dan Williams
a67dd8cc58 Allow metadata handlers to communicate desired safemode delay via mdinfo
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-09-15 20:58:42 -07:00
Neil Brown
2c514b7120 Pass 'verbose' flag to validate_geometry
That way it can be silent when we are just trying to figure out
which metadata to use, and noisy when detecting a real problem.
2008-07-12 20:28:38 +10:00
Neil Brown
6416d5275d Use O_DIRECT for all IO to devices.
Using buffered IO risks non-atomic updates to parts of the
device that we don't actually want to write to.  This isn't in
general safe.
So switch to O_DIRECT for all that IO and make sure we have
properly aligned buffers.
2008-07-12 20:28:33 +10:00
Neil Brown
ba7eb04f71 Remove silly convention that major='-1' means 'zero superblock'.
Use 'info pointer is NULL' instead.
2008-07-12 20:27:39 +10:00
Neil Brown
d2ca644994 Remove getinfo_super_n and do some other cleaning up.
Getting close to a sensible description of what some of the
superswitch methods are supposed to do!
2008-07-12 20:27:39 +10:00
Neil Brown
f7e7067b47 Add subarray field to supertype.
When loading the metadata for a subarray (super_by_fd), we set
->subarray to be the name read from md/metadata_version so that
getinfo_super can return info about the correct array.

With this we can differentiate between a container and
an array within the container by looking at ->subarray[0].
2008-07-12 20:27:38 +10:00
Neil Brown
b8ac196795 Remove 'major' from superswitch.
It isn't generally meaningful.
2008-07-12 20:27:37 +10:00
Neil Brown
1522c538b1 Use text_version in map_file rather than major.minor. 2008-07-12 20:27:37 +10:00
Neil Brown
a0c8a17f66 Fix write_init_super usage when hot-adding a spare
Using write_init_super to add a spare to an active array is quite
different to how it is used when creating an array.

It mostly works, but if we are adding two devices to an array,
then when we add the second, there are still traces of the first
which confuse write_init_super.

So get write_init_super to ignore those traces.  Longer term, we
probably want to do this differently as for DDF, hot-adding to
an active array will have to be quite different - it will want to
write to all metadata, possibly via mdmon.
2008-07-12 20:27:36 +10:00
Neil Brown
ef60947720 Always initialise a struct super_type to zero 2008-07-12 20:27:36 +10:00
Neil Brown
111d01fcc7 Change write_init_super to be called only once.
The current model for creating arrays involves writing
a superblock to each device in the array.
With containers (as with DDF), that model doesn't work.
Every device in the container may need to be updated
for an array made from just some the devices in a container.

So instead of calling write_init_super for each device,
we call it once for the array and have it iterate over
all the devices in the array.

To help with this, ->add_to_super now passes in an 'fd' and name for
the device.  These get saved for use by write_init_super.  So
add_to_super takes ownership of the fd, and write_init_super will
close it.
This information is stored in the new 'info' field of supertype.

As part of this, write_init_super now removes any old traces of raid
metadata rather than doing this in common code.
2008-05-15 16:48:12 +10:00
Neil Brown
17f25ca6fb Add 'container' level and ->validate_geometry method.
These will be used for ddf.
2008-05-15 16:47:41 +10:00
Kay Sievers
0d726f17e1 add --export option to --examine
From: Kay Sievers <kay.sievers@vrfy.org>

Cc: David Zeuthen <david@fubar.dk>
Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
2008-05-06 10:02:38 +10:00
Neil Brown
519561f73f Fix possible bug with bitmap space allocation with v1.0 metadata
When adding a device to an array, make sure we don't reserve
so much space for the bitmap that there isn't room for the data.
2008-04-29 17:13:53 +10:00
Neil Brown
3da92f272d Drop the superblock arg from all metadata methods.
It is now in the 'supertype'
2007-12-14 20:14:33 +11:00
Neil Brown
64557c3391 Fix compare_super to take supertype instead of a superblock.
As this function takes 2 superblocks, the change is a bit more subtle,
so is done separately.
2007-12-14 20:14:27 +11:00
Neil Brown
68c7d6d790 Add 'supertype' arg to almost all metadata methods.
The 'superblock' will be moved into this structure soon.
2007-12-14 20:14:16 +11:00
Neil Brown
df37ffc039 Allow metadata handlers to free their own superblock.
As the metadata handler allocates the superblock, it should free it
too.  DDF will have a more complex 'superblock' which needs more complex
freeing.
2007-12-14 20:14:00 +11:00
Neil Brown
5cda096425 Clarify the avail/used devices sizes with version1 superblock.
Not all of the device may be available.  Of that, not all may be used
(if devices are of different sizes).
2007-10-17 10:28:38 +10:00
Jérémy Bobbio
cc4c7f14b1 Also use &tst instead of st later on when loading v1 superblocks 2007-10-01 09:17:06 +01:00
martin f. krafft
cf3370c7a7 Fix segfault on assembly on amd64 with v1 superblocks
Commit a40b4fe introduced a temporary supertype variable tst, instead of
manipulating st directly. However, it was forgotton to pass &tst into the
recursive load_super1 call, causing an infinite recursion.

Signed-off-by: martin f. krafft <madduck@debian.org>
2007-09-30 13:28:56 +01:00
Neil Brown
23dc1ae877 Don't corrupt 'supertype' when speculatively calling load_super1
When load_super1 is trying to see which sub-version of v1 superblock
is present, failure will cause it to clear st->ss, which is not good.

So use a temporary 'super_type' for the 'test if this version works'
calls, then copy that into 'st' on success.
2007-09-24 14:26:44 +10:00
Neil Brown
005debfc11 Fix problem with add a device to a 1.x array created with older mdadm.
When adding new disk to an array, don't reserve so much bitmap
space that the disk cannot store the required data. (Needed when
1.x array was created with older mdadm).
2007-08-20 14:14:25 +10:00
Doug Ledford
a17a3de364 Interpret "--metadata=1" with --assemble to imply any version-1, not just 1.0
From: Doug Ledford <dledford@redhat.com>

OK, this one fixes an issue where people were doing manual array
creation and specifying superblock types other than 1.0 (aka, 1.1, 1.2)
and then using mdadm -Ebs to populate their mdadm.conf file.  The
general problem is that if you specify a superblock type in the ARRAY
line (or on the command line), then you must specify the superblock type
*exactly*, including the minor version.  Unfortunately, mdadm -Ebs
prints out all version 1 superblocks, regardless of minor version, as
just plain old 1.  This breaks the mdadm.conf file for anything other
than plain version 1 superblock devices.

So, since I thought it was basically backwards that the mdadm -E output
was lax on specifying the location of the superblock where as the mdadm
-A input was strict, I reversed that.  With this patch, the mdadm -E
output is now exact for any given superblock.  But, in addition, the
mdadm -A input is now lax for any superblock that doesn't specifically
list the minor version, aka version 1 now means version 1, not version
0.90, but any minor version.  So does default/large.
2007-07-09 09:59:47 +10:00
Neil Brown
69646c1483 Update tests and add linear-add
Update the testing scripts to allow for new space calculations
for space for bitmaps.
Add a test script for adding devices to linear arrays.
2007-05-21 14:25:40 +10:00
Neil Brown
f752781f81 Fix --grow --add for linear arrays.
The new superblock needs to have a new disk.number.  This is a bit of a hack...
Fix handling of negative bitmap offsets on 64bit hosts.

The bitmap offset is a signed 32bit number, so casting to (long)
isn't sufficient.  We must cast to (int32_t).
Fix various problems with --grow --add for linear.

The code to add a drive to a live linear array had never
been tested properly and so was buggy.  This tidies it up
and means that the new regression-test passes.
2007-05-21 14:25:37 +10:00
Neil Brown
68754bd17c Fix handling of negative bitmap offsets on 64bit hosts.
The bitmap offset is a signed 32bit number, so casting to (long)
isn't sufficient.  We must cast to (int32_t).
2007-05-21 14:25:30 +10:00
Kay Sievers
54bad3644f Add --export option to --detail to use key=value pairs.
udev likes to get information about a device as key=value pairs so it
can create disk/by-id links etc.  So add --export flag which causes
the output of --detail to easily parsable.

From: Kay Sievers <kay.sievers@novell.com>
2007-05-08 17:17:33 +10:00
Neil Brown
2fb749d1b7 Fix up calculation of bitmap space when creating v1 metadata.
We have the same calculation in multiple places with subtle differences.
So unite it all.

Also fix up and endian problem in --examine.
2007-05-08 17:15:33 +10:00
Neil Brown
eb9199fb5e A couple of casts needed in printf statements. 2007-02-22 14:59:25 +11:00
Neil Brown
ae491d1e2c Fix a warning about an uninitialised variable.
The case that doesn't initialise it is impossible,
so just return with an error..
2007-02-22 14:59:16 +11:00
Neil Brown
350f29f90d Centralise code for copying uuid
Rather than opencoding the byteswap all the time.
2006-12-14 17:33:14 +11:00
Neil Brown
3d3dd91e38 Support --uuid= with --create to choose your own UUID. 2006-12-14 17:33:10 +11:00
Neil Brown
4855f95c70 Fix bug where v1 superblock might appear active when they should be clean.
Only happens on kernel with 32 bit sector_t.
2006-12-14 17:32:59 +11:00
Neil Brown
beae1dfe2e Central calls to ioctl BLKGETSIZE
Instead of opencoding the same thing everywhere.
2006-12-14 17:32:57 +11:00
Neil Brown
bf4fb153a4 Fix and test --update=uuid
A number of odd bugs here, but now we have a regression test as well.
2006-12-14 17:31:29 +11:00
Neil Brown
37dfc3d638 When resync finished, report the mismatch count if there is one.
This doesn't get mailed out, but will appear in syslog...
Maybe it should be mailed if it was a 'check' or 'repair' pass...
2006-12-14 17:31:25 +11:00
Neil Brown
e336254463 Change 'Device Size' to 'Used Dev Size'
because it only shows how much of each device is actually used, not
how big they are.
2006-12-14 17:31:19 +11:00
Neil Brown
583315d9c5 Give useful message if raid4/5/6 cannot be started because it is not clean and is also degraded. 2006-12-14 17:31:13 +11:00
Neil Brown
d645b91a1b Fix a misleading comment. 2006-12-14 17:31:08 +11:00
Neil Brown
bee8ec56f4 Support --update=devicesize for cases where the underlying device can change size. 2006-12-14 17:31:03 +11:00
Neil Brown
199171a297 Improve allocation and use of space for bitmaps in version1 metadata
Depending on the size of the array we reserve space for up to 128K
of bitmap, and we use it where possible.
When hot-adding to a version 1.0 we can still only use the 3K at the
end though - need a sysfs interface to improve that.

If a small chunksize is requested on Create, we don't auto-enlarge
the reserved space - this still needs to be fixed.
2006-12-14 17:31:00 +11:00
Neil Brown
b5e3d1901f Remove some unused interfaces to the metadata handlers.
This stuff has never been used (at least as far as git history can
see).  I wonder why it was there...
2006-12-14 17:30:53 +11:00
Neil Brown
67a8c82d60 Make Assemble/Force work on raid6 with 2 missing devices.
Previously it onl worked when one missing device.
Also split the "force" update_super method into two and it
is really serving two functions.
2006-12-14 17:30:51 +11:00
Neil Brown
434b77559e --update=resync did exactly the wrong thing for version1 metadata. 2006-11-13 09:12:09 +11:00
Neil Brown
b7a708af6f Fixed UUID printing in "--detail --brief" for version1 metadata. 2006-11-09 16:28:27 +11:00
Neil Brown
1746711680 Increase default size of bitmap for v1 superblocks.
It can be increased further, but that takes a bit more code
so will wait for 2.6.
2006-10-19 16:46:38 +10:00
Neil Brown
26a0b8fd7a Fix array-subscript error.
->name is sized to '33' to have room for a trailing nul,
but thhat needs to get put in position '32'.  Doh!
2006-10-19 16:38:20 +10:00
Neil Brown
c1c05f7f9a Fix typo in earlier patch.
Thanks Martin Krafft
2006-10-10 06:30:07 +10:00
Neil Brown
83205b6419 Fix some endian-ness issues with v1 superblocks. 2006-10-09 11:17:12 +10:00
Neil Brown
7eae7080e2 Work around bug in --add handling for version-1 superblocks
In 2.6.17 (and prior), the dev_number is ignored when a device
is added to an active array.  Rather the first free number is used.
So we work around this by making sure we use the first free
number for dev_number.

Description...
2006-06-26 12:26:09 +10:00
Neil Brown
c3684618b7 Add 'Array Slot' line to --examine for version-1 superblocks
to make it a bit easier to see what is happening.
2006-06-26 12:26:01 +10:00
Paul Clements
b015e6c268 Move a variable declaration to the declaration area.
While declaring variables in the middle of code withs with
newer gcc's it doesn't work with older, and it is arguably
less readable, so just do the right thing.

From: Paul Clements <paul.clements@steeleye.com>
2006-06-20 10:01:47 +10:00
Paul Clements
722966c66d Fix problem with post-increment usage in macro
Bad/bad/bad, and cause compiler error on ppc (gcc 3.2.3).

From: Paul Clements <paul.clements@steeleye.com>
2006-06-20 10:01:23 +10:00
Neil Brown
067db4dfcd Fix offsetof macro for 64bit hosts 2006-06-16 10:53:50 +10:00
Neil Brown
9fca7d6236 check return status of all write/fwrite functions as required by glibc 2.4
From: Luca Berra <bluca@vodka.it>

glibc 2.4 is pedantic on ignoring return values from fprintf, fwrite and
write, so now we check the rval and actually do something with it.
in the Grow.c case i only print a warning, since i don't think we can do
anything in case we fail invalidating those superblocks (is should never
happen, but then...)

Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-29 02:06:32 +00:00
Neil Brown
41a3b72a9c Release 2.5
Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-26 07:12:48 +00:00
Neil Brown
2998bc013c Improve names reported by --examine --brief
Instead of depending (too much) on what is in /dev,
we make names based on the content of the superblock.

Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-26 02:29:12 +00:00
Neil Brown
83b6208e89 When assembly arrays using incomplete detail, prefer arrays built for this host.
i.e. if assembling with --name or --super-minor, then if we find two
different arrays with the same apparent identity, and one was built
for 'this' host, then prefer that one instead of giving up in disgust.

Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-23 06:33:28 +00:00
Neil Brown
0237e0cafd Support --update=homehost to allow updating of homehost information.
Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-23 05:16:32 +00:00
Neil Brown
c4f12c1340 Allow --update=name to update the name during assembly.
Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-23 04:57:04 +00:00
Neil Brown
e5eac01f3d Make sure homehost is set correctly when --update=uuid
Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-23 04:51:39 +00:00
Neil Brown
a1cbd7d053 Include homehost information in --examine as appropriate
Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-19 07:19:04 +00:00
Neil Brown
b6750aa8da Include homehost information in --detail where appropriate.
Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-19 07:13:03 +00:00
Neil Brown
05697ec1e2 Make homehost information appear in superblock.
When an array is created, if the homehost is know,
the superblock gets it, either in the uuid, (via sha1)
or in the name field.

Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-19 06:56:06 +00:00
Neil Brown
4f589ad0c5 Just updaqte copyright dates and email address
Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-19 05:25:11 +00:00
Neil Brown
14263cf12c When updating uuid, update the bitmap as well - internal bitmaps.
Otherwise when you "--update==uuid" an array with an internal
bitmap, it will break, badly.

Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-16 05:52:51 +00:00
Neil Brown
b578481ca3 Support new offset layout for raid10
Requires 2.6.18.

Signed-off-by: Neil Brown <neilb@suse.de>
2006-05-15 02:46:54 +00:00
Neil Brown
c4d831e164 [PATCH] Make sure update_super returns correct value.
For 'force' and 'assemble', update_super must return true
if anything was changed.

Also fix a bug with wonly handling in super0.

Signed-off-by: Neil Brown <neilb@suse.de>

### Diffstat output
 ./super0.c |   18 ++++++++++++++----
 ./super1.c |    7 +++++++
 2 files changed, 21 insertions(+), 4 deletions(-)

diff ./super0.c~current~ ./super0.c
2006-04-28 14:10:38 +10:00
Neil Brown
ac957baa97 Fix alignment problem in version-1 superblocks.
NOTE: This is an incompatable change affecting raid5 reshape.
If you want to reshape a raid5 using version-1 superblocks,
use 2.6.17-rc2 or later, and mdadm-2.4.1 or later.

Signed-off-by: Neil Brown <neilb@suse.de>
2006-04-07 04:34:45 +00:00
Neil Brown
bed256c241 Add information about reshape to --detail
Also fix problems with dev names and symlinks

Signed-off-by: Neil Brown <neilb@suse.de>
2006-03-28 22:44:05 +00:00
Neil Brown
313176636e Remove ident arg from getinfo_super;
Add a 'name' field to 'info' to compensate.

Signed-off-by: Neil Brown <neilb@suse.de>
2006-03-27 04:34:38 +00:00
Neil Brown
353632d927 Support restarting of a reshape on --assemble
Signed-off-by: Neil Brown <neilb@suse.de>
2006-03-20 03:17:31 +00:00
Neil Brown
1e0d770c0f Release some compile fixes.
Signed-off-by: Neil Brown <neilb@suse.de>
2006-02-06 04:18:12 +00:00
Neil Brown
561832f9d4 Some little bits and pieces...
I'm obviously bored of writing changelog entries.

Signed-off-by: Neil Brown <neilb@suse.de>
2006-02-02 03:19:57 +00:00
Neil Brown
576d6d83af Prefer version-1 superblocks for v.large devices.
Signed-off-by: Neil Brown <neilb@suse.de>
2006-01-31 00:01:48 +00:00
Neil Brown
8fac0577f0 Stuff like..
- report Intent Bitmap in --detail
- report internal bitmap in --examine
- pass' --force through to --grow --bitmap
- support v.large arrays in --grow --bitmap

Signed-off-by: Neil Brown <neilb@suse.de>
2006-01-30 23:23:45 +00:00
Neil Brown
91eedefcdd Report bitmap offset when examining v1 superblock.
Signed-off-by: Neil Brown <neilb@suse.de>
2006-01-30 03:09:32 +00:00
Neil Brown
21e92547e7 Work towards allowing larger internal bitmaps in version1 superblocks.
Signed-off-by: Neil Brown <neilb@suse.de>
2006-01-30 02:57:49 +00:00
Neil Brown
b674b5b869 Have --examine report reshape details.
Signed-off-by: Neil Brown <neilb@suse.de>
2006-01-27 07:28:34 +00:00
Neil Brown
5dd497eecb Enable support for v.large raid1.
clean up 'long long' usage for size of array, so that
with v-1 superblocks a raid1 larger than 2TB is possible.

Signed-off-by: Neil Brown <neilb@suse.de>
2006-01-27 06:21:06 +00:00
Neil Brown
29e766a5f4 Minor fixes
Signed-off-by: Neil Brown <neilb@suse.de>
2006-01-27 04:48:28 +00:00
Neil Brown
838acbc272 Assorted fixes...
Signed-off-by: Neil Brown <neilb@suse.de>
2006-01-27 01:44:47 +00:00
Neil Brown
d2cd3ffc02 uhm.. assort fixes, particularly for recovery offset...
Signed-off-by: Neil Brown <neilb@suse.de>
2005-12-16 01:34:49 +00:00
Neil Brown
7d99579f6a Support updating of uuid during --assemble.
Signed-off-by: Neil Brown <neilb@suse.de>
2005-12-05 05:56:33 +00:00
Neil Brown
f9c25f1d2a Support bitmaps with raid10
And a couple of other little things

Signed-off-by: Neil Brown <neilb@suse.de>
2005-11-22 03:37:14 +00:00
Neil Brown
dcec9ee547 Create version-4 bitmaps if kernel supports it.
Version-3 bitmaps are host-endian.  Version-4 are little-endian
and so more portable.

Signed-off-by: Neil Brown <neilb@suse.de>
2005-10-11 04:44:44 +00:00
Neil Brown
e478dc86ed Release 2-0
With little fix for -O2 compile

Signed-off-by: Neil Brown <neilb@suse.de>
2005-09-12 07:12:07 +00:00
Neil Brown
6d3d580468 Fix byteordr covnerion ofr 'events' that was '32' instead of '64'
Signed-off-by: Neil Brown <neilb@suse.de>
2005-09-12 05:54:52 +00:00
Neil Brown
f6d75de8e0 Fix remaining problems with hot-add bitmap to version-1 superblock
Also some more tests - r5 and r6 bitmaps

Signed-off-by: Neil Brown <neilb@suse.de>
2005-09-12 05:24:10 +00:00
Neil Brown
265e0f1731 Fix assembling of raid10 in the face of missing devices.
We now check if enough devices are present properly, so
--force can be used to good effect.

Signed-off-by: Neil Brown <neilb@suse.de>
2005-09-12 04:57:52 +00:00
Neil Brown
1bf4e2d962 Passes all tests, nearly ready for release.
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
2005-08-26 06:08:28 +00:00
Neil Brown
8431b2b286 Getting ready for 2.0 release...
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
2005-08-26 02:26:37 +00:00
Neil Brown
34163fc7cf Support internal bitmaps with format-1 superblocks.
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
2005-08-25 04:31:44 +00:00
Neil Brown
947fd4ddb5 Support nameing of version-1 arrays.
--name is recognised in --create and --assemble
name= is recognised in config file.

Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
2005-08-09 05:23:20 +00:00
Neil Brown
dfd4d8ee42 Add write-behind support
Currently this includes
  --write-behind  to set level of write-behind supported
  --write-mostly  to flag devices as write-mostly.

Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
2005-08-09 04:25:47 +00:00
Neil Brown
f277ce3671 Assorted Fixes for multiple bugs.
Assemble would crash, or just not work.
A few other problem found by a new test-suite.

Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
2005-08-04 04:41:12 +00:00
Neil Brown
fbf8a0b7a6 Document this...
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
2005-07-18 01:30:42 +00:00
Neil Brown
c7654afc29 Fix compiling of mdassemble
(again).

Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
2005-06-14 06:49:05 +00:00
Neil Brown
6fbba4c929 Stuff
Description...

Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
2006-04-17 23:42:52 +00:00