summaryrefslogtreecommitdiffstats
path: root/Assemble.c (unfollow)
Commit message (Collapse)AuthorFilesLines
2008-09-16ping_manager() to prevent 'add' before 'remove' completesDan Williams4-8/+60
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>
2008-09-16sysfs: detect disks that are in the process of being removedDan Williams1-5/+24
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>
2008-09-16monitor: clean up some debug messagesDan Williams1-2/+3
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-09-16mdmon: resume rebuildDan Williams1-1/+6
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>
2008-09-16imsm: allow a failed disk to be readdedDan Williams1-17/+12
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>
2008-09-16'mdadm --wait-clean' wait for array to be marked cleanDan Williams7-32/+166
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>
2008-09-16Add ping_monitor() to mdadm --waitDan Williams5-18/+38
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>
2008-09-16monitor: don't mark dirty on resync completeDan Williams1-1/+1
...instead look at array state to determine if the array is consistent Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-09-16monitor: mark clean on active-idleDan Williams1-3/+7
This also handles the case where 'clean' is set directly. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-09-16Honor safemode_delay at Create() and Incremental() timeDan Williams4-0/+18
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-09-16imsm: use ->getinfo_super() in ->container_content()Dan Williams1-30/+16
* 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>
2008-09-16Allow metadata handlers to communicate desired safemode delay via mdinfoDan Williams5-0/+7
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-09-16Makefile: Add mdmon header dependenciesDan Williams1-1/+2
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-09-16imsm: fix up serial handlingDan Williams1-20/+34
* 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>
2008-09-16imsm: only use the device name as a fallback when IMSM_DEVNAME_AS_SERIAL=1Dan Williams1-7/+5
Also ensure that the serial buffer is initialized. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-09-16imsm: rectify map handlingDan Williams1-62/+132
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>
2008-09-16imsm: fix imsm_delete()Dan Williams1-20/+30
* 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>
2008-09-16imsm: use IMSM_ORD_REBUILD instead of USABLE flagDan Williams1-16/+21
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>
2008-09-16imsm: introduce set_imsm_ord_tbl_ent()Dan Williams1-4/+9
Collapse all the open coded occurrences. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-09-16imsm: cleanup arguments to imsm_check_degradedDan Williams1-5/+4
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-09-16imsm: cleanup get_imsm_disk_idx(), unify with get_imsm_ord_tbl_ent()Dan Williams1-32/+33
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>
2008-09-16imsm: fix up compare_super_imsm() to match family_num for populated mpb'sDan Williams1-0/+9
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>
2008-09-16imsm: fix up spare handling holdover in update_create_arrayDan Williams1-5/+3
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>
2008-09-16imsm: mark failures like the Matrix driverDan Williams1-28/+19
* 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>
2008-09-16imsm: provide for a larger mpb buffer when necessaryDan Williams1-18/+76
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>
2008-09-16imsm: fix logic inversion in get_imsm_ord_tbl_ent()Dan Williams1-2/+2
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-08-19Fix alignment for backup of reshape data.NeilBrown2-8/+9
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>
2008-08-19Allow an externally managed array to be marked readonlyNeilBrown5-9/+67
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>
2008-08-19Factor out test for subarray version string.NeilBrown5-5/+11
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>
2008-08-19imsm: allow container assembly in the presence of failed disksDan Williams1-21/+10
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>
2008-08-19Fix bug with ddf if devices have different sizes.NeilBrown1-0/+1
We cannot use the header of the 'best' device to find the sections on the other devices!! Signed-off-by: NeilBrown <neilb@suse.de>
2008-08-19Provide ddf support for adding a device to an active container.NeilBrown1-6/+53
Signed-off-by: NeilBrown <neilb@suse.de>
2008-08-19mdadm: add device to a containerDan Williams3-37/+208
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>
2008-08-19mdmon: remove devices from containerDan Williams2-2/+25
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>
2008-08-19imsm: delete kicked disksDan Williams1-11/+57
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>
2008-08-19Fix mdstat_wait_fdNeilBrown1-3/+9
It didn't necessarily wait for the fd. Signed-off-by: NeilBrown <neilb@suse.de>
2008-08-19Make metadata updates from manage to monitor 'synchronous'NeilBrown1-18/+25
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>
2008-08-19Extra option for set_array_state: you choose dirty or clean.NeilBrown4-15/+21
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>
2008-08-15mdmon: handle failures versus readauto arraysDan Williams2-4/+21
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>
2008-08-15mdmon: allow degraded arrays to be monitoredDan Williams3-3/+15
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>
2008-08-15imsm: include not synced disks in imsm_count_failedDan Williams1-0/+2
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-08-15imsm: use disk_ord_tbl to identify rebuilding disksDan Williams1-2/+22
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-08-12imsm: fix up assembly of disks that are not in-syncDan Williams1-10/+41
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>
2008-08-12imsm: fix create by mdmon-updateDan Williams1-3/+3
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>
2008-08-12imsm: write_super return 0 on successDan Williams1-5/+5
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-08-12imsm: update mpb_size in write_super_imsmDan Williams1-0/+5
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>
2008-08-12mdmon: use activate spare for re-addDan Williams2-92/+139
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>
2008-08-12imsm: fix handling of the 'migr_state' and 'migr_type' bitsDan Williams1-23/+54
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>
2008-08-11imsm: add get_imsm_map and sizeof_imsm_mapDan Williams1-37/+41
retrieve map entries from a imsm_dev, and cleanup imsm_copy_dev Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-08-11imsm: drop 'external' from imsm_examine_briefDan Williams1-4/+1
Signed-off-by: Dan Williams <dan.j.williams@intel.com>