Commit Graph

1559 Commits

Author SHA1 Message Date
NeilBrown
f94c116f56 detail/wait: better handling of monitoring sync action.
Detail: report reshape and check as well as resync and recovery
Wait: if the resync is pending or delayed, wait for that too.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-11-22 19:35:25 +11:00
NeilBrown
8453e70430 Manage: be more careful about --add attempts.
If an --add is requested and a re-add looks promising but fails or
cannot possibly succeed, then don't try the add.  This avoids
inadvertently turning devices into spares when an array is failed but
the devices seem to actually work.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-11-22 19:35:25 +11:00
NeilBrown
b9b004ebc7 policy: don't try to get policy when path == NULL.
config_rules_has_path, we fail if path==NULL, so we should when
config_rules doesn't has_path too.

Signed-Off-By: NeilBrown <neilb@suse.de>
2010-11-22 19:35:25 +11:00
NeilBrown
37194990aa Fix error in pol_sort.
pol_sort could go into an infinite loop.

The proof of this patch is left as a exercise for the reader :-)

Reported-by: "Hawrylewicz Czarnowski, Przemyslaw" <przemyslaw.hawrylewicz.czarnowski@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
2010-11-22 19:35:25 +11:00
NeilBrown
1e2b276535 Report error in --update string is not recognised.
If an --update is requested by the relevant metadata doesn't
understand it, print a useful message rather than silently ignoring
the issue.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-11-22 19:35:24 +11:00
John Robinson
cd19c0cf1c mdadm.8: man page improvements concerning reshape and metadata types.
- other differences between 0.90 and 1.x metadata explained
- reshape text enhanced to properly acknowledge shrinks and in-place
  reshapes, particularly in the context of --backup-file.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-11-02 23:08:00 -04:00
NeilBrown
a2ce5a1af1 Fix byte-order conversion in update_super1("assemble")
This code is wrong is several ways, and failed on big-endian machines.
Put in correct endian coversions: 'want' is cpu-order, dev_roles[] is little-endian,
16 bit.

Reported-by: Doug Nazar <nazard.michi@gmail.com>
Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-16 20:58:31 +10:00
NeilBrown
4e8d9f0a16 Convert 'auto' config line to policy statements 2010-09-06 11:26:28 +10:00
NeilBrown
61018da020 Add support for auto-partitioning base devices.
If a device is bare and policy suggests that it can be used as a spare
for virtual 'partitions' array, find an appropriate partition table
and write it to the device.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:26:28 +10:00
NeilBrown
54887ad8cb Add guess_super_type
This can select to only guess array types,
or only guess partition types.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:26:28 +10:00
NeilBrown
73c9c47c70 Factor out path_policy functon.
Allow disk-policy to be computed given the path and
disk type explicitly.  This can be used when hunting through
/dev/disk/by-path for something interesting.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:26:28 +10:00
NeilBrown
56e8be854a First steps to supporting auto-spare-add to groups of partitioned devices.
Adding a spare to a group of partitioned devices is quite different
from adding one to an array.  So detect which option is worth trying
based on policy and then try one or the other - or possibly both - as
appropriate.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:26:28 +10:00
NeilBrown
0592faeb5e Add gpt pseudo-metadata
This allows mdadm to work with gpt metadata to a limited extent.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:26:28 +10:00
NeilBrown
0f22b998fb Add mbr pseudo metadata handler.
To support incorpating a new bare device into a collection of arrays -
one partition each - mdadm needs a modest understanding of partition
tables.
The main needs to be able to recognise a partition table on one device
and copy it onto another.

This will be done using pseudo metadata types 'mbr' and 'gpt'.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:26:28 +10:00
NeilBrown
64436f0628 intel: Don't try to read from tiny devices.
If a device is less than 1K, avoid even trying to seek to 1K before
the end.
The seek will fail anyway so this is a fairly cosmetic fix.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:26:28 +10:00
NeilBrown
f08605b3ad Allow --incremental to add a device as a spare if policy allows.
If policy allows act_spare or act_force_spare, -I will add a
bare device as a spare to an appropriate array.

We don't support adding non-bare devices as spares yet.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:26:27 +10:00
NeilBrown
7e83544bc4 Use action policy to keep recently-disconnected devices in the array.
When we find a device that was recently part of the array but is now
out of date (based on the event count) we might want to add it back in
(like --re-add) if the likely cause was a connection problem or we
might not if the likely cause was device failure.

So make this a policy issue: if action=re-add or better, try to re-add
any device that looks like it might be part of the array.

This applies:
  when we assemble the array:  old devices will be evicted by the
     kernel and need to be re-added.
  when we assemble the array during --incr for the same reason.
  when we find a device that could be added to a running array.

This doesn't affect arrays with external metadata at all.
For such arrays:
 When the container is assembled, the most recent instance of each
 device is included without reference to whether it is too old or not.
 Then the metadata handler must which slices of which devices to
 include in which array and with what state.  So the
 ->container_content should probably check the policy and compare the
 sequence numbers/event counts.
 When a device is added (--add) to a container with active arrays
 we only add as a 'spare'. --re-add doesn't seem to be an option.
 When a device is added with -I ->container_content gets another
 chance to assess things again.  So again it should check the policy.


Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:26:27 +10:00
NeilBrown
15d4a7e447 Introduce single-exit pattern for Incremental
All exits should goto the end for clean-up.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:26:27 +10:00
NeilBrown
f5f12c84ac Add domain policy support.
A device can be in a number of domains.

The domains of an array is the union of the domains of all devices.

A device is allowed to join an array when its set of domains is a
subset of the array's domains.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:26:27 +10:00
NeilBrown
e3bb5f144b Add policy_action support
Add code for easy working 'action' policies.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:26:27 +10:00
NeilBrown
5527fc7462 Add policy framework.
Policy can be stated as lines in mdadm.conf like:

POLICY  type=disk path=pci-0000:00:1f.2-* action=ignore domain=onboard

This defines two distinct policies which apply to any disk (but not
partition) device reached through the pci device 0000:00:1f.2.
The policies are "action=ignore" which means certain actions will
ignore the device, and "domain=onboard" which means all such devices
as treated as being united under the name 'onboard'.

This patch just adds data structures and code to read and
manipulate them.  Future patches will actually use them.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-06 11:03:43 +10:00
NeilBrown
8efb9d16ac Fix compile error on non-x86 systems.
-z is not an option for 'gcc', it is an option for the loader!!

Reported-by: Debian build system
Signed-off-by: NeilBrown <neilb@suse.de>
2010-09-03 13:33:29 +10:00
NeilBrown
972ee7253a Release mdadm-3.1.4
bugfix/stability.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-31 17:21:13 +10:00
NeilBrown
93601c439c Fix spare migration.
Spare migration uses major:minor device names.
When we added support for kernel style names, we broke that.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-31 17:21:11 +10:00
NeilBrown
b1702f4826 Don't remove md devices with standard names.
If udev is not in use, we create device in /dev when assembling
arrays and remove them when stopping the array.

However it may not always be correct to remove the device.  If
the array was started with kernel auto-detect, them mdadm didn't
create anything and so shouldn't remove anything.

We don't record whether we created things, so just don't remove
anything with a 'standard' name.  Only remove symlinks to the
standard name as we almost certainly created those.

Reported-by: Petre Rodan <petre.rodan@avira.com>
Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-31 15:21:40 +10:00
NeilBrown
6df6a774bf Allow dev_open to work on read-only /dev
/dev could be read-only in which case we cannot make devices
there.
So dev_open should first try to use an existing device name,
and if that doesn't work try creating a node in /dev or /tmp.

Reported-by:  Paweł Sikora <pluto@agmk.net>
Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-30 08:48:48 +10:00
NeilBrown
ef83fe7cba Allow --incremental to add spares to an array.
Commit 3a6ec29ad5 stopped us from adding apparently-working devices
to an active array with --incremental as there is a good chance that they
are actually old/failed devices.

Unfortunately it also stopped spares from being added to an active
array, which is wrong.  This patch refines the test to be more
careful.

Reported-by: <fibreraid@gmail.com>
Analysed-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-12 11:41:41 +10:00
Dan Williams
172356c93a Incremental: accept '--no-degraded' as a deprecated option
Commit 3288b419 (Revert "Incremental: honor --no-degraded to delay assembly")
killed the --no-degraded flag since commit 97b4d0e9 (Incremental: honor
an 'enough' flag from external handlers) made this the default behavior
of -I, and brought -I usage for external/container formats in line with
native metadata.  However, this breaks existing usages of '-I
--no-degraded', so allow it as a deprecated option.

Starting a degraded container, like the native metadata case, requires -R.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Reported-by: Ignacy Kasperowicz <ignacy.kasperowicz@intel.com>
2010-08-12 11:20:16 +10:00
Dan Williams
fd4c9ba491 Incremental: return success in 'container not enough' case
Commit 97b4d0e9 "Incremental: honor an 'enough' flag from external
handlers" introduced a regression in that it changed the error return
code for successful invocations.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Reported-by: Ignacy Kasperowicz <ignacy.kasperowicz@intel.com>
2010-08-10 08:44:45 -07:00
NeilBrown
5d40884d6b Don't link mdadm with pthreads
Only mdmon needs pthreads, so link accordingly.

Signed-off-by: NeilBrown <neilb@suse.de>
Reported-by: martin f krafft <madduck@madduck.net>
2010-08-06 20:11:43 +10:00
NeilBrown
cdbe98cd54 Fix compiler warning concering bad use of snprintf.
Signed-off-by: NeilBrown <neilb@suse.de>
Reported-by: Mikael Abrahamsson <swmike@swm.pp.se>
2010-08-06 20:10:48 +10:00
NeilBrown
850a31783a Release mdadm-3.1.3
Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-06 16:55:23 +10:00
NeilBrown
9e751dc7a0 mapfile: just have one place to store the mapfile
Having multiple possible locations and guessing where best to put the
file is too messy, confusing and makes locking problematic.

So just keep it in /dev/.mdadm/map.  It is a horrible place but it is
really all we have.  System integrators can change this easily at
build time.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-06 14:54:10 +10:00
NeilBrown
925211e323 Grow: use raid_disks, not nr_disks
nr_disks is just wrong here - the arrays need room for all disk slots,
even if some are empty, plus spares, plus a possible backup file.
So raid_disks is correct.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-06 14:40:53 +10:00
NeilBrown
7204495377 Fix writing of second backup superblock during grow
There 'rv' tests were confused and sometimes wrong.
This resulted in not writing the second bsb.

Also fix the test script so the the critical section is long enough
that we have some hope of interrupting it.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-05 21:39:17 +10:00
NeilBrown
8d848be1ed udevadm settle in autodetect test
some udev activity was interfering with the partitioning.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-05 16:50:03 +10:00
NeilBrown
f21e18ca89 Compile with -Wextra by default
This produced lots of warning, some of which pointed to actual bugs.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-05 13:13:02 +10:00
NeilBrown
9aaada0530 Detail: clean up handing of the 'info' we load from superblock.
The loop for loading it was hard to follow, so restructure that
and avoid a theoretical use-before-set error.

Also there was a second 'info' structure which hid the first and was
pointless.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-05 12:10:57 +10:00
NeilBrown
c61c4dd01d Fix test for imsm prodigal member scenario
The 'container_enough' changes fliped the default from assembling
an array as soon as we possibly could, to assembling only when all
expected devices are present.
This broken 09imsm-assemble which expects the original default.
So change from "-I" to "-IR" to restore the expected behaviour.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-08-05 11:44:26 +10:00
NeilBrown
69a3f12e6e Fix tests/layouts
some attributes files now return "new (old)", so allow for that when
reading the attr file.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-07-29 14:20:35 +10:00
NeilBrown
5f6ca90a9b Fix restarting of reshaping arrays.
We cannot get stripe_cache_size until after the array have
been activated!!

Signed-off-by: NeilBrown <neilb@suse.de>
2010-07-29 13:50:15 +10:00
NeilBrown
510242aa48 Restore assembling of ddf containers.
The container_enough code change broke ddf as ddf never claimed
'enough' devices.  So change it to always claim 'enough' to
restore previous behaviour.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-07-29 13:26:26 +10:00
NeilBrown
b7e734fc22 Fix use of rv in Grow_reshape
1/ and extra local var was declared, which causes rv setting
   to be lost
2/ a -ve rv was left -ve while we should be return 1 on err.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-07-29 13:16:01 +10:00
NeilBrown
df65ac70ca Some fixes to the mapfile code.
- Update the comments
- use some defined names instead of magic numbers.
- restore /var/run/mdadm/map to have priority over /dev/.mdadm/map

Signed-off-by: NeilBrown <neilb@suse.de>
2010-07-28 17:41:39 +10:00
NeilBrown
9fdcb47192 Update man page info about files used by mdmon
A recent patch changed the location of files used by
mdmon, so update man page to match.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-07-28 17:41:36 +10:00
NeilBrown
7f5de63d51 Switch from /lib/init/rw to /dev for early-boot files.
It turns out that /lib/init/rw doesn't exist in early boot
like I thought.  So give up on that idea and just use
/dev/.mdadm/ for files that must persist from early-boot
to regular boot.

Signed-off-by: NeilBrown <neilb@suse.de>
2010-07-28 17:41:35 +10:00
NeilBrown
08415c46a8 Bugfix: mapfile locking is broken/racy
While we attempt to use a lockfile to grant exclusive access to the
mapfile, our implementation is buggy.  Specifically, we create a lockfile,
then lock it, at which point new instances can open the lockfile and
attempt to lock it, which will cause them to block.  However, when we are
ready to unlock it, we unlink the file.  This causes existing lock waiters
to get a lock on an unlinked inode while a different instance may now
create a new lockfile and get an exclusive lock on it.

There are several possible fixes.  The chosen one is to test if
->s_nlink is zero after we get the lock and to retry if it isn't.
This means:
  - failing to unlink a file doesn't leave a stale lock
  - we can block waiting to get a lock rather than busy-waiting
  - we don't need to leave a lock file permanently in place.
    
Reported-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
2010-07-28 17:40:54 +10:00
Doug Ledford
93c861ee57 Add warnings if we ever fail to get a lock on the mapfile.
Signed-off-by: Doug Ledford <dledford@redhat.com>
2010-07-22 10:16:31 -04:00
Doug Ledford
0155af90d8 Bugfix: don't issue a read larger than the buffer to hold it
Signed-off-by: Doug Ledford <dledford@redhat.com>
2010-07-22 10:16:31 -04:00
Doug Ledford
2913d9df16 udev rules: add watch option
The watch option to udev tells udev to watch our mdadm device file for
close events and on a close it rechecks the device.  This means that if,
for example, we use mdadm to --grow the array from a 4 disk to 5 disk
array, when mdadm closes the array, udev will re-read the superblock and
update its internal database with the new information.  This can also be
used to cause udev to create new device special files if, for example, a
partitioning program is used to modify the partition table on the actual
md device and that program does not call the syscall to reread the
partition table.

Signed-off-by: Doug Ledford <dledford@redhat.com>
2010-07-22 10:16:31 -04:00