]> git.ipfire.org Git - thirdparty/mdadm.git/log
thirdparty/mdadm.git
15 years agofname_as_uuid: print uuids msb first
Dan Williams [Thu, 2 Oct 2008 01:50:43 +0000 (18:50 -0700)] 
fname_as_uuid: print uuids msb first

The sha1 routines store the uuids in little endian byte-order, so always
print from msb to lsb. This allows imsm containers to be assembled with
-As.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agomdmon: periodically retry to create the socket
Dan Williams [Thu, 2 Oct 2008 01:50:43 +0000 (18:50 -0700)] 
mdmon: periodically retry to create the socket

If initial socket creation fails, EROFS, set a periodic alarm to wake up
the manager and retry.  Include a kernel patch that will wake us up if
the mount flags are changed.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agosysfs_open leaks devnum2devname() result
Dan Williams [Thu, 2 Oct 2008 01:49:53 +0000 (18:49 -0700)] 
sysfs_open leaks devnum2devname() result

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agonon-trivial warn_unused_result fix, prepare_update
Dan Williams [Sun, 28 Sep 2008 19:12:08 +0000 (12:12 -0700)] 
non-trivial warn_unused_result fix, prepare_update

If an allocation fails in ->prepare_update we need to catch it in
->process_update.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agonon-trivial warn_unused_result fixes, activate_spare
Dan Williams [Sun, 28 Sep 2008 19:12:08 +0000 (12:12 -0700)] 
non-trivial warn_unused_result fixes, activate_spare

Both super-ddf and super-intel ignore memory allocation failures during
->activate_spare.  Fix these up by cancelling the activation.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agonon-trivial warn_unused_result fixes, write_init_super_ddf
Dan Williams [Sun, 28 Sep 2008 19:12:08 +0000 (12:12 -0700)] 
non-trivial warn_unused_result fixes, write_init_super_ddf

When a write fails just move on to the next disk.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agotrivial warn_unused_result squashing
Dan Williams [Sun, 28 Sep 2008 19:12:07 +0000 (12:12 -0700)] 
trivial warn_unused_result squashing

Made the mistake of recompiling the F9 mdadm rpm which has a patch to
remove -Werror and add "-Wp,-D_FORTIFY_SOURCE -O2" which turns on lots
of errors:

config.c:568: warning: ignoring return value of asprintf
Assemble.c:411: warning: ignoring return value of asprintf
Assemble.c:413: warning: ignoring return value of asprintf
super0.c:549: warning: ignoring return value of posix_memalign
super0.c:742: warning: ignoring return value of posix_memalign
super0.c:812: warning: ignoring return value of posix_memalign
super1.c:692: warning: ignoring return value of posix_memalign
super1.c:1039: warning: ignoring return value of posix_memalign
super1.c:1155: warning: ignoring return value of posix_memalign
super-ddf.c:508: warning: ignoring return value of posix_memalign
super-ddf.c:645: warning: ignoring return value of posix_memalign
super-ddf.c:696: warning: ignoring return value of posix_memalign
super-ddf.c:715: warning: ignoring return value of posix_memalign
super-ddf.c:1476: warning: ignoring return value of posix_memalign
super-ddf.c:1603: warning: ignoring return value of posix_memalign
super-ddf.c:1614: warning: ignoring return value of posix_memalign
super-ddf.c:1842: warning: ignoring return value of posix_memalign
super-ddf.c:2013: warning: ignoring return value of posix_memalign
super-ddf.c:2140: warning: ignoring return value of write
super-ddf.c:2143: warning: ignoring return value of write
super-ddf.c:2147: warning: ignoring return value of write
super-ddf.c:2150: warning: ignoring return value of write
super-ddf.c:2162: warning: ignoring return value of write
super-ddf.c:2169: warning: ignoring return value of write
super-ddf.c:2172: warning: ignoring return value of write
super-ddf.c:2176: warning: ignoring return value of write
super-ddf.c:2181: warning: ignoring return value of write
super-ddf.c:2686: warning: ignoring return value of posix_memalign
super-ddf.c:2690: warning: ignoring return value of write
super-ddf.c:3070: warning: ignoring return value of posix_memalign
super-ddf.c:3254: warning: ignoring return value of posix_memalign
bitmap.c:128: warning: ignoring return value of posix_memalign
mdmon.c:94: warning: ignoring return value of write
mdmon.c:221: warning: ignoring return value of pipe
mdmon.c:327: warning: ignoring return value of write
mdmon.c:330: warning: ignoring return value of chdir
mdmon.c:335: warning: ignoring return value of dup
monitor.c:415: warning: rv may be used uninitialized in this function

...some of these like the write() ones are not so trivial so save those
fixes for the next patch.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: determine failed indexes from the most up-to-date disk
Dan Williams [Sun, 28 Sep 2008 19:12:07 +0000 (12:12 -0700)] 
imsm: determine failed indexes from the most up-to-date disk

load_imsm_disk() currently notices if spares missed their activation
update, but we allow a stale failed disk back in to the array because its
serial number is clobbered in the most up-to-date disk.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: manage a list of missing disks
Dan Williams [Sun, 28 Sep 2008 19:12:07 +0000 (12:12 -0700)] 
imsm: manage a list of missing disks

If a drive is removed while mdmon is not running we need a way to
identify what is missing and mark that disk as failed in the metadata.
At ->load_super() time create a list of missing disks defined as a disk
that is marked in-sync yet does not appear in super->disks.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: fix mpb_size calculation in write_super_imsm
Dan Williams [Sun, 28 Sep 2008 19:12:07 +0000 (12:12 -0700)] 
imsm: fix mpb_size calculation in write_super_imsm

Spotted a thinko... raid devices are dynamically sized, disks are not.
The space for disks is always mpb->num_disks * sizeof(struct imsm_disk).

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: enable checkpointing of migration (resync/rebuild)
Dan Williams [Sun, 28 Sep 2008 19:12:06 +0000 (12:12 -0700)] 
imsm: enable checkpointing of migration (resync/rebuild)

When the array is shutdown, or when mdadm --wait-clean is called, any
active resync process will be idled allowing mdmon to record the current
resync position.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoExtend --wait-clean to checkpoint resync
Dan Williams [Sun, 28 Sep 2008 19:12:06 +0000 (12:12 -0700)] 
Extend --wait-clean to checkpoint resync

Root file systems backed by external metadata arrays need to be
explicitly checkpointed near the time the rootfs is marked readonly as
userspace will not have an opportunity to react to the final shutdown of
the array.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years ago--wait-clean: shorten timeout
Dan Williams [Sun, 28 Sep 2008 19:12:06 +0000 (12:12 -0700)] 
--wait-clean: shorten timeout

Set the safemode timeout to a small value to get the array marked clean as
soon as possible.  We don't write 'clean' directly as it may cause mdmon to
miss a 'write-pending' event.

Include a couple fixes to sysfs_set_safemode():
1/ 0 pad the milliseconds field
2/ workaround input truncation in the kernel

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agomonitor: protect against CONFIG_LBD=n
Dan Williams [Sun, 28 Sep 2008 19:12:06 +0000 (12:12 -0700)] 
monitor: protect against CONFIG_LBD=n

md/resync_start reports different terminal values depending on kernel
configuration (~0UL versus ~0ULL).  Make detection of the
resync-complete state more robust by comparing against array size.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: trust sector reservation from metadata
Dan Williams [Sun, 28 Sep 2008 19:12:03 +0000 (12:12 -0700)] 
imsm: trust sector reservation from metadata

On ich6r the option-rom appears to reserve only 432 sectors rather than
the 418+4096 of newer implementations.  For compatibility trust the
metadata in these cases.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agosysfs: dprintf when we fail to write a sysfs file
Dan Williams [Wed, 24 Sep 2008 12:58:02 +0000 (05:58 -0700)] 
sysfs: dprintf when we fail to write a sysfs file

When arrays do not startup correctly it would be nice to know why.  Need
to move the dprintf definition to mdadm.h

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: confirm raid10 layout, fix up handling raid10 failures
Dan Williams [Wed, 15 Oct 2008 21:15:47 +0000 (14:15 -0700)] 
imsm: confirm raid10 layout, fix up handling raid10 failures

1/ near-2 indeed matches how the Windows driver lays out the data
2/ update imsm_check_degraded to check for rebuilding disks in the
   raid10 case

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: more serial handling fixups
Dan Williams [Wed, 15 Oct 2008 20:12:17 +0000 (13:12 -0700)] 
imsm: more serial handling fixups

zero-initialize the serial buffer to handle cases where the response is
less than MAX_RAID_SERIAL_LEN.

Tested-by: Jacek Danecki <jacek.danecki@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoUpdates version numbers for 3.0-devel1 release.
NeilBrown [Thu, 18 Sep 2008 07:27:49 +0000 (17:27 +1000)] 
Updates version numbers for 3.0-devel1 release.

15 years agoDon't try to set_array_info when -I find new devices for an array.
NeilBrown [Thu, 18 Sep 2008 07:05:02 +0000 (17:05 +1000)] 
Don't try to set_array_info when -I find new devices for an array.

When -I get a new device for a container and tries to incrementally
assemble the container array, it calls sysfs_set_array to create the
array without first checking if it already exists.  This produces
unpleasant error messages.

So check first.

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agoRemove .sock file when removing .pid file for mdmon
NeilBrown [Thu, 18 Sep 2008 06:43:59 +0000 (16:43 +1000)] 
Remove .sock file when removing .pid file for mdmon

15 years agoAdd support for assembling specific subarrays.
NeilBrown [Thu, 18 Sep 2008 06:21:08 +0000 (16:21 +1000)] 
Add support for assembling specific subarrays.

This normally isn't needed as --incremental does all the work.
But it is needed to recognise member= and container= in mdadm.conf

15 years agoUse common code to report MD_UUID for --detail --export
NeilBrown [Thu, 18 Sep 2008 06:12:28 +0000 (16:12 +1000)] 
Use common code to report MD_UUID for --detail --export

As we need to be able to extract a UUID from any superblock
for matching, use that as the MD_UUID as it will probably be
used for array matching too.

15 years agoReport uuid in --detail --brief for ddf and intel
NeilBrown [Thu, 18 Sep 2008 06:11:40 +0000 (16:11 +1000)] 
Report uuid in --detail --brief for ddf and intel

The uuid is slightly fictitious but needed for array matching.

15 years agoUse uuid as /dev name when assembling array of uncertain origin.
NeilBrown [Thu, 18 Sep 2008 06:08:10 +0000 (16:08 +1000)] 
Use uuid as /dev name when assembling array of uncertain origin.

If we aren't sure that the array belongs to 'this' host, use the
uuid to choose a name to avoid any conflict.

15 years agoAdd uuid support for super-intel.
NeilBrown [Thu, 18 Sep 2008 06:07:32 +0000 (16:07 +1000)] 
Add uuid support for super-intel.

'imsm' does not provide any real uuid, so we synthesise one
from various stable bits of the superblock.

15 years agoAllow metadata handler to report that it doesn't record homehost.
NeilBrown [Thu, 18 Sep 2008 06:06:41 +0000 (16:06 +1000)] 
Allow metadata handler to report that it doesn't record homehost.

For now, this means that the lack of a homehost doesn't always prevent
assembly.
Soon we will allow assembly anyway, but have different messages if
homehost isn't supported.

15 years agoDon't allow spares when creating 'external' arrays.
NeilBrown [Thu, 18 Sep 2008 06:03:08 +0000 (16:03 +1000)] 
Don't allow spares when creating 'external' arrays.

It is meaningless when creating the container, and for
subarrays, the container is responsible for assigning
spares.

Also, don't do the 'spare' fiddle for raid5 as we cannot
set up a spare at this point yet.  Later maybe just create
the array degraded and let the container sort it out.

15 years agoLots of fixes to make incremental assembly of containers work.
NeilBrown [Thu, 18 Sep 2008 06:03:05 +0000 (16:03 +1000)] 
Lots of fixes to make incremental assembly of containers work.

So:
  mdadm -I /dev/whatever

will (if appropriate) add whatever to a container, then start
any arrays inside the container.

15 years agoHandle incremental assembly of containers.
NeilBrown [Thu, 18 Sep 2008 06:01:57 +0000 (16:01 +1000)] 
Handle incremental assembly of containers.

 mdadm -I /dev/part-of-container

should add that to a container, creating if it needed,
and then try to assemble any arrays in the container.

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agoMove calls to SET_ARRAY_INFO to common helper.
NeilBrown [Thu, 18 Sep 2008 06:01:55 +0000 (16:01 +1000)] 
Move calls to SET_ARRAY_INFO to common helper.

When we assemble an array, there are three different approaches
depending on whether metadata is internal or external, and on
kernel version.

Move all this to a common helper instead of duplicating in 3 places.

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agoFactor out add-disk code
NeilBrown [Thu, 18 Sep 2008 05:13:32 +0000 (15:13 +1000)] 
Factor out add-disk code

The variety of approaches to 'add_disk' are factored out into
a separate function, and Incremental mode benefits by being
closer to supporting the assembly of containers.

Also remove the adding-to-array-data-structure out of sysfs_add_disk
and into add_disk.

And add some tests for --incremental mode to make sure we don't break it.

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agoIgnore leading zeros in version number information.
NeilBrown [Thu, 18 Sep 2008 05:07:45 +0000 (15:07 +1000)] 
Ignore leading zeros in version number information.

--detail sometimes generates leading zero which are just noise.

15 years agoAllow --config in --incremental mode.
NeilBrown [Thu, 18 Sep 2008 05:05:46 +0000 (15:05 +1000)] 
Allow --config in --incremental mode.

15 years agoTeach --detail about containers and members there-of.
NeilBrown [Thu, 18 Sep 2008 05:05:20 +0000 (15:05 +1000)] 
Teach --detail about containers and members there-of.

Make --detail on a container more useful by suppressing irrelevant
detail and adding useful detail like a list of member arrays.

Ditto for members of a container: report the name of the container
array.

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agoCompile fixes, particularly moving more stuff under MDASSEMBLE
NeilBrown [Thu, 18 Sep 2008 05:04:47 +0000 (15:04 +1000)] 
Compile fixes, particularly moving more stuff under MDASSEMBLE

Now 'make everything' works again.

15 years agoDisable compilation with diet-libc
NeilBrown [Thu, 18 Sep 2008 04:33:37 +0000 (14:33 +1000)] 
Disable compilation with diet-libc

We need posix_memalign (or something similar) which diet-libc does not
provide.

15 years agoFix compile warning/error.
NeilBrown [Thu, 18 Sep 2008 04:10:42 +0000 (14:10 +1000)] 
Fix compile warning/error.

gcc said:
  error: large integer implicitly truncated to unsigned type

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agomdmon: recreate socket/pid file on SIGHUP
Dan Williams [Tue, 16 Sep 2008 03:58:43 +0000 (20:58 -0700)] 
mdmon: recreate socket/pid file on SIGHUP

Allow mdmon to start while /var/run/mdadm is readonly.  Later a SIGHUP
can trigger mdmon to drop its pid and socket once /var/run/mdadm is
writable.  Of course one needs the pid to send a HUP, that can be stored
in a distribution specific rw-init directory... For now, rely on a
killall -HUP mdmon to get the files dumped.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoping_manager() to prevent 'add' before 'remove' completes
Dan Williams [Tue, 16 Sep 2008 03:58:43 +0000 (20:58 -0700)] 
ping_manager() to prevent 'add' before 'remove' completes

It is currently possible to remove a device and re-add it without the
manager noticing, i.e. without detecting a mdstat->devcnt
container->devcnt mismatch.  Introduce ping_manager() to arrange for
mdmon to run manage_container() prior to mdadm dropping the exclusive
open() on the container.  Despite these precautions sysfs_read() may
still fail.  If this happens invalidate container->devcnt to ensure
manage_container() runs at the next event.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agosysfs: detect disks that are in the process of being removed
Dan Williams [Tue, 16 Sep 2008 03:58:43 +0000 (20:58 -0700)] 
sysfs: detect disks that are in the process of being removed

When removing a disk there is a window where the 'slot' attribute of
md/dev-$name will return -EBUSY to read attempts.  When this happens
look at the the 'block' link, if it is removed then we can be sure the
device has been removed, versus some other error.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agomonitor: clean up some debug messages
Dan Williams [Tue, 16 Sep 2008 03:58:43 +0000 (20:58 -0700)] 
monitor: clean up some debug messages

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agomdmon: resume rebuild
Dan Williams [Tue, 16 Sep 2008 03:58:43 +0000 (20:58 -0700)] 
mdmon: resume rebuild

If we started a degraded array that was previously rebuilding we may
have enough information to resume the rebuild without a trip through the
monitor.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: allow a failed disk to be readded
Dan Williams [Tue, 16 Sep 2008 03:58:42 +0000 (20:58 -0700)] 
imsm: allow a failed disk to be readded

Allow the following sequence to rebuild the array
mdadm --fail /dev/md/r1 /dev/disk
mdadm --remove /dev/imsm /dev/disk
mdadm --add /dev/imsm /dev/disk

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years ago'mdadm --wait-clean' wait for array to be marked clean
Dan Williams [Tue, 16 Sep 2008 03:58:42 +0000 (20:58 -0700)] 
'mdadm --wait-clean' wait for array to be marked clean

For use in distro shutdown scripts with a RAID root file system.
Returns immediately if the array is 'readonly', or not an externally
managed array.  It is up to the distro's scripts to make sure no new
writes hit the device after this returns 'true'.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoAdd ping_monitor() to mdadm --wait
Dan Williams [Tue, 16 Sep 2008 03:58:42 +0000 (20:58 -0700)] 
Add ping_monitor() to mdadm --wait

The action we are waiting for may not be complete until the monitor has
had a chance to take action on the result.

The following script can now remove the device on the first attempt,
versus a few attempts with the original Wait():
#!/bin/bash
#export MDADM_NO_MDMON=1
export IMSM_DEVNAME_AS_SERIAL=1
./mdadm -Ss
./mdadm --zero-superblock /dev/loop[0-3]
echo 2 > /proc/sys/dev/raid/speed_limit_max
./mdadm --create /dev/imsm /dev/loop[0-3] -n 4 -e imsm -a md
./mdadm --create /dev/md/r1 /dev/loop[0-3] -n 4 -l 5 --force -a mdp
./mdadm --fail /dev/md/r1 /dev/loop3
./mdadm --wait /dev/md/r1
x=0
while  ! ./mdadm --remove /dev/imsm /dev/loop3 > /dev/null 2>&1
do
        x=$((x+1))
done
echo "removed after $x attempts"
./mdadm --add /dev/imsm /dev/loop3

Include 2 small cleanups:
* remove the almost open coded fd2devnum() in Wait() by introducing a
  new utility routine stat2devnum()
* teach connect_monitor() to parse the container device from a subarray
  string

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agomonitor: don't mark dirty on resync complete
Dan Williams [Tue, 16 Sep 2008 03:58:42 +0000 (20:58 -0700)] 
monitor: don't mark dirty on resync complete

...instead look at array state to determine if the array is consistent

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agomonitor: mark clean on active-idle
Dan Williams [Tue, 16 Sep 2008 03:58:42 +0000 (20:58 -0700)] 
monitor: mark clean on active-idle

This also handles the case where 'clean' is set directly.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoHonor safemode_delay at Create() and Incremental() time
Dan Williams [Tue, 16 Sep 2008 03:58:42 +0000 (20:58 -0700)] 
Honor safemode_delay at Create() and Incremental() time

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: use ->getinfo_super() in ->container_content()
Dan Williams [Tue, 16 Sep 2008 03:58:42 +0000 (20:58 -0700)] 
imsm: use ->getinfo_super() in ->container_content()

* allows container_content() to pick up the safemode_delay
* removes some duplicate code
* fixes an endian bug setting info->array.chunk_size

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoAllow metadata handlers to communicate desired safemode delay via mdinfo
Dan Williams [Tue, 16 Sep 2008 03:58:42 +0000 (20:58 -0700)] 
Allow metadata handlers to communicate desired safemode delay via mdinfo

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoMakefile: Add mdmon header dependencies
Dan Williams [Tue, 16 Sep 2008 03:58:41 +0000 (20:58 -0700)] 
Makefile: Add mdmon header dependencies

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: fix up serial handling
Dan Williams [Tue, 16 Sep 2008 03:58:41 +0000 (20:58 -0700)] 
imsm: fix up serial handling

* Trim trailing and leading whitespace
* Allow unterminated serial numbers up to MAX_RAID_SERIAL_LEN

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: only use the device name as a fallback when IMSM_DEVNAME_AS_SERIAL=1
Dan Williams [Tue, 16 Sep 2008 03:58:41 +0000 (20:58 -0700)] 
imsm: only use the device name as a fallback when IMSM_DEVNAME_AS_SERIAL=1

Also ensure that the serial buffer is initialized.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: rectify map handling
Dan Williams [Tue, 16 Sep 2008 03:58:41 +0000 (20:58 -0700)] 
imsm: rectify map handling

The secondary map is used to reflect the migration state of the array
i.e.  from dev->vol.map[1] to dev->vol.map[0].  Ensure a rebuilding /
initializing array is marked in the second map, while normal status is
reflected in the first map.  Also mark rebuilding drives with
IMSM_ORD_REBUILD.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: fix imsm_delete()
Dan Williams [Tue, 16 Sep 2008 03:58:41 +0000 (20:58 -0700)] 
imsm: fix imsm_delete()

* fix breakage from last merge (infinite loop in imsm_process_update())
* add ability to delete by index

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: use IMSM_ORD_REBUILD instead of USABLE flag
Dan Williams [Tue, 16 Sep 2008 03:58:41 +0000 (20:58 -0700)] 
imsm: use IMSM_ORD_REBUILD instead of USABLE flag

IMSM_ORD_REBUILD is the 'insync' flag in MD terms.  USABLE is a flag to
opt-in disks for use with the Windows driver.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: introduce set_imsm_ord_tbl_ent()
Dan Williams [Tue, 16 Sep 2008 03:58:41 +0000 (20:58 -0700)] 
imsm: introduce set_imsm_ord_tbl_ent()

Collapse all the open coded occurrences.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: cleanup arguments to imsm_check_degraded
Dan Williams [Tue, 16 Sep 2008 03:58:41 +0000 (20:58 -0700)] 
imsm: cleanup arguments to imsm_check_degraded

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: cleanup get_imsm_disk_idx(), unify with get_imsm_ord_tbl_ent()
Dan Williams [Tue, 16 Sep 2008 03:58:41 +0000 (20:58 -0700)] 
imsm: cleanup get_imsm_disk_idx(), unify with get_imsm_ord_tbl_ent()

Save some unnecessary calls to get_imsm_map() by teaching
get_imsm_disk_idx() to retrieve the map.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: fix up compare_super_imsm() to match family_num for populated mpb's
Dan Williams [Tue, 16 Sep 2008 03:58:40 +0000 (20:58 -0700)] 
imsm: fix up compare_super_imsm() to match family_num for populated mpb's

This allows spares to be associated with any family while not allowing
disks from different families to be assembled.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: fix up spare handling holdover in update_create_array
Dan Williams [Tue, 16 Sep 2008 03:55:40 +0000 (20:55 -0700)] 
imsm: fix up spare handling holdover in update_create_array

We used to leave SPARE_DISK unset to indicate it was available to be
assimilated into other arrays.  Now we explicitly check the size.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: mark failures like the Matrix driver
Dan Williams [Tue, 16 Sep 2008 03:55:34 +0000 (20:55 -0700)] 
imsm: mark failures like the Matrix driver

* Truncate the first character of the serial number
* Set 'scsi_id' to all f's
* Expect to find disk entries with unmatchable serial numbers, i.e.
  expect get_imsm_disk() to return NULL in some situations
* Allow discrepencies between mpb->num_disks and len(super->disks)

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: provide for a larger mpb buffer when necessary
Dan Williams [Tue, 16 Sep 2008 03:55:34 +0000 (20:55 -0700)] 
imsm: provide for a larger mpb buffer when necessary

Ensure that the mpb buffer is large enough to hold the extra imsm_map's
of migrating arrays and dynamically created raid devices.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: fix logic inversion in get_imsm_ord_tbl_ent()
Dan Williams [Tue, 16 Sep 2008 03:55:30 +0000 (20:55 -0700)] 
imsm: fix logic inversion in get_imsm_ord_tbl_ent()

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoFix alignment for backup of reshape data.
NeilBrown [Tue, 19 Aug 2008 07:55:15 +0000 (17:55 +1000)] 
Fix alignment for backup of reshape data.

Since we introduced O_DIRECT for device access we need
properly aligned buffers and IO requests.  The reshape code
missed out on the conversion.

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agoAllow an externally managed array to be marked readonly
NeilBrown [Tue, 19 Aug 2008 07:55:15 +0000 (17:55 +1000)] 
Allow an externally managed array to be marked readonly

If the metadata_version is
    -mdXXX/whatever
rather than
    /mdXXX/whatever

then the array is readonly and should be left alone by mdmon.

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agoFactor out test for subarray version string.
NeilBrown [Tue, 19 Aug 2008 07:55:15 +0000 (17:55 +1000)] 
Factor out test for subarray version string.

We are about to change the syntax of the version string
for 'subarray's.  So factor out the test into a single function.

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agoimsm: allow container assembly in the presence of failed disks
Dan Williams [Tue, 19 Aug 2008 07:55:15 +0000 (17:55 +1000)] 
imsm: allow container assembly in the presence of failed disks

For example, this allows one to still say mdadm -A /dev/sd[b-e] even
though /dev/sde has replaced /dev/sdd.  Otherwise mdadm will say:

mdadm: superblock on /dev/sdd doesn't match others - assembly aborted

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoFix bug with ddf if devices have different sizes.
NeilBrown [Tue, 19 Aug 2008 07:55:15 +0000 (17:55 +1000)] 
Fix bug with ddf if devices have different sizes.

We cannot use the header of the 'best' device to find the
sections on the other devices!!

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agoProvide ddf support for adding a device to an active container.
NeilBrown [Tue, 19 Aug 2008 07:55:15 +0000 (17:55 +1000)] 
Provide ddf support for adding a device to an active container.

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agomdadm: add device to a container
Dan Williams [Tue, 19 Aug 2008 07:19:51 +0000 (17:19 +1000)] 
mdadm: add device to a container

Adding a device updates the container and then mdmon takes action upon
noticing a change in devices.  This reuses the container version of
add_to_super to create a new record for the device.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
15 years agomdmon: remove devices from container
Dan Williams [Tue, 19 Aug 2008 04:55:12 +0000 (14:55 +1000)] 
mdmon: remove devices from container

Once the monitor thread has kicked a drive from all managed arrays mdadm
-r is permitted.  We are guaranteed that the drive is marked failed at
this point, so allow the drive to be re-added as a spare.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: delete kicked disks
Dan Williams [Tue, 19 Aug 2008 04:55:10 +0000 (14:55 +1000)] 
imsm: delete kicked disks

When we have determined that a disk is no longer of any value, remove
it from the data structure.   This is now safe because the manager
will back off while any metadata update is pending in the monitor.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
15 years agoFix mdstat_wait_fd
NeilBrown [Tue, 19 Aug 2008 04:55:07 +0000 (14:55 +1000)] 
Fix mdstat_wait_fd

It didn't necessarily wait for the fd.

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agoMake metadata updates from manage to monitor 'synchronous'
NeilBrown [Tue, 19 Aug 2008 04:55:03 +0000 (14:55 +1000)] 
Make metadata updates from manage to monitor 'synchronous'

A metadata update may modify the data structure of the metadata
including freeing things, so it is not safe of the manager to touch
the metadata while an update is pending in the monitor.
So When an update has been submitted, don't do anything else in the
manager until it is complete.

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agoExtra option for set_array_state: you choose dirty or clean.
NeilBrown [Tue, 19 Aug 2008 04:54:55 +0000 (14:54 +1000)] 
Extra option for set_array_state: you choose dirty or clean.

When we first start an array, it might be good to start recovery
straight away.  That requires setting the array to 'dirty', but
only the metadata handler can know if that is required or not.
So have a third possible 'consistent' option to set_array_state.
Either 'no' or 'yes' or 'you choose'.

Return value indicates what was chosen.

'1' (no) should be chosen unless there is a good reason.

Signed-off-by: NeilBrown <neilb@suse.de>
15 years agomdmon: handle failures versus readauto arrays
Dan Williams [Wed, 30 Jul 2008 02:25:15 +0000 (19:25 -0700)] 
mdmon: handle failures versus readauto arrays

Transition readauto arrays to active before failing drives.

Hmm... why do we keep reblocking / renotifying in the readonly case?
Need to bottom out on this, but not right now.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agomdmon: allow degraded arrays to be monitored
Dan Williams [Fri, 15 Aug 2008 17:58:43 +0000 (10:58 -0700)] 
mdmon: allow degraded arrays to be monitored

manage_new is too strict in the face of failed devices.  Teach it to
monitor degraded arrays.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: include not synced disks in imsm_count_failed
Dan Williams [Fri, 15 Aug 2008 17:58:42 +0000 (10:58 -0700)] 
imsm: include not synced disks in imsm_count_failed

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: use disk_ord_tbl to identify rebuilding disks
Dan Williams [Fri, 15 Aug 2008 17:57:19 +0000 (10:57 -0700)] 
imsm: use disk_ord_tbl to identify rebuilding disks

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: fix up assembly of disks that are not in-sync
Dan Williams [Tue, 12 Aug 2008 09:25:49 +0000 (02:25 -0700)] 
imsm: fix up assembly of disks that are not in-sync

1/ Do not assemble !in_sync or failed devices in container_content.
2/ Prevent activation of failed or configured devices in activate_spare.
3/ Be sure to avoid dirty degraded if the array was shutdown cleanly.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: fix create by mdmon-update
Dan Williams [Tue, 12 Aug 2008 09:25:49 +0000 (02:25 -0700)] 
imsm: fix create by mdmon-update

imsm_dev dynamically grows, so dev_idx needs to be moved up in the
definition to avoid getting clobbered.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: write_super return 0 on success
Dan Williams [Tue, 12 Aug 2008 09:25:49 +0000 (02:25 -0700)] 
imsm: write_super return 0 on success

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: update mpb_size in write_super_imsm
Dan Williams [Sun, 10 Aug 2008 03:28:24 +0000 (20:28 -0700)] 
imsm: update mpb_size in write_super_imsm

With dev->vol.map and mpb->disk entries entering and leaving the parameter
block write_super_imsm needs to update the size before writeback.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agomdmon: use activate spare for re-add
Dan Williams [Tue, 12 Aug 2008 09:25:46 +0000 (02:25 -0700)] 
mdmon: use activate spare for re-add

Disks that are not in-sync or failed are not assembled into member
arrays by mdadm.  Teach mdmon to resolve this situation by checking for
spares at start.  imsm_activate_spare() is updated to prefer devices
that can be re-added versus new spares.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: fix handling of the 'migr_state' and 'migr_type' bits
Dan Williams [Sun, 10 Aug 2008 03:28:24 +0000 (20:28 -0700)] 
imsm: fix handling of the 'migr_state' and 'migr_type' bits

The option-rom and the Matrix driver mark resyncs/rebuilds with the
migrate state bits.  Update sizeof_imsm_dev to allow allocation of
imsm_dev entries large enough to grow if migr_state is later set.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: add get_imsm_map and sizeof_imsm_map
Dan Williams [Sun, 10 Aug 2008 03:28:24 +0000 (20:28 -0700)] 
imsm: add get_imsm_map and sizeof_imsm_map

retrieve map entries from a imsm_dev, and cleanup imsm_copy_dev

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: drop 'external' from imsm_examine_brief
Dan Williams [Sun, 10 Aug 2008 03:28:24 +0000 (20:28 -0700)] 
imsm: drop 'external' from imsm_examine_brief

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: ensure 'usable' remains clear until the disk is in_sync
Dan Williams [Sun, 10 Aug 2008 03:28:24 +0000 (20:28 -0700)] 
imsm: ensure 'usable' remains clear until the disk is in_sync

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: spare devices are represented as single disk containers
Dan Williams [Wed, 6 Aug 2008 16:09:25 +0000 (09:09 -0700)] 
imsm: spare devices are represented as single disk containers

This poses a small problem for the case of handling multiple raid1 arrays
across separate disk pairs i.e. 2 mirrors on 4 disks.  The option-ROM will
configure this as two containers.  We may need the capability for one
container to ask for an unused spare in another container.  For now spares
will just maintain the affinity established at assemble time.

To support this configuration spare devices must be allowed to be assembled
into the container even though the metadata indicates the disk belongs to a
different family.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: store imsm_disk entries in the super->disks list
Dan Williams [Fri, 8 Aug 2008 06:57:50 +0000 (23:57 -0700)] 
imsm: store imsm_disk entries in the super->disks list

removes the need to lookup the disk by index in a few cases and is a
preparation step for tracking spares outside the current anchor.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agomdmon: use 'recover' instead of 'repair' when activating a spare
Dan Williams [Thu, 7 Aug 2008 18:54:09 +0000 (11:54 -0700)] 
mdmon: use 'recover' instead of 'repair' when activating a spare

Repair sets MD_RECOVERY_REQUESTED in md which may not result in the
spare device being recovered.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoMerge branch 'devel' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/mdadm...
NeilBrown [Thu, 7 Aug 2008 07:46:44 +0000 (17:46 +1000)] 
Merge branch 'devel' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/mdadm into dan

15 years agoimsm: bad block management (phase1)
Jacek Danecki [Thu, 7 Aug 2008 06:55:53 +0000 (23:55 -0700)] 
imsm: bad block management (phase1)

This is the initial defensive implementation of bad block management
support.  It simply precludes assembly if there are entries in the bad
block logs.  This is sufficient for now as the conditions that lead to
an entry in the bad block log would cause the array to be failed by MD
(as of 2.6.27).

[dan.j.williams@intel.com: general cleanups]
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: do not mark arrays 'clean' if resync still in progress
Dan Williams [Thu, 7 Aug 2008 06:53:44 +0000 (23:53 -0700)] 
imsm: do not mark arrays 'clean' if resync still in progress

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoimsm: raid5 layout is left-asymmetric
Dan Williams [Thu, 7 Aug 2008 06:53:44 +0000 (23:53 -0700)] 
imsm: raid5 layout is left-asymmetric

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoMerge branch 'master' into from-stable
NeilBrown [Thu, 7 Aug 2008 04:12:25 +0000 (14:12 +1000)] 
Merge branch 'master' into from-stable

Conflicts:

Create.c
Manage.c

15 years agomdmon: ignore inactive arrays and other manage_new() cleanups
Dan Williams [Wed, 30 Jul 2008 02:01:06 +0000 (19:01 -0700)] 
mdmon: ignore inactive arrays and other manage_new() cleanups

While mdadm is constructing an array mdmon may see an intermediate state
(some disks not yet added / redundancy attributes like sync_action not
available).  Waiting for mdstat->active == true ensures that the array
is ready to be handled.  This fixes a bug in create array via mdmon
update whereby failures are not detected in the new array.

Introduce aa_ready() to catch cases where the active_array is not
correctly initialized.  Barring a kernel bug this should never trigger,
nonetheless it precludes a class of bugs like the one mentioned above
from triggering.

Cleanup the exit paths and only call replace_array when the new array is
ready to be inserted into container->arrays.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
15 years agoCosmetic cleanup of some messages.
NeilBrown [Fri, 1 Aug 2008 06:48:08 +0000 (16:48 +1000)] 
Cosmetic cleanup of some messages.

e.g. --raid-disks is preferred over --raid-devices.

 Thanks to "Jon Nelson" <jnelson-linux-raid@jamponi.net>

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