]> git.ipfire.org Git - thirdparty/mdadm.git/log
thirdparty/mdadm.git
12 years agoimsm: FIX: Correct make everything and variable initialization
Adam Kwolek [Thu, 8 Dec 2011 13:47:17 +0000 (14:47 +0100)] 
imsm: FIX: Correct make everything and variable initialization

make everything doesn't compile (again) due to not used function warning
and uninitialized variable.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Use definitions for migration record disk operations
Adam Kwolek [Tue, 13 Dec 2011 01:54:18 +0000 (12:54 +1100)] 
imsm: FIX: Use definitions for migration record disk operations

Add definition:
  MIGR_REC_BUF_SIZE
  MIGR_REC_POSITION
to super-intel.c and do not use magic numbers

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Use first map only in migration record disk operations
Adam Kwolek [Mon, 12 Dec 2011 11:07:53 +0000 (12:07 +0100)] 
imsm: FIX: Use first map only in migration record disk operations

This patch is addition to patch:
    "imsm: FIX: Limit migration record operation by disk slot not by index"
Location of migration record (2 first slots) should be taken on up to date
information. It is in first map.
Change slot verification to use first map only.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Limit migration record operation by disk slot not by index
Adam Kwolek [Mon, 12 Dec 2011 11:07:45 +0000 (12:07 +0100)] 
imsm: FIX: Limit migration record operation by disk slot not by index

imsm should store migration record in to 2 first disks in array.
This should be evaluated based on disk slots, not on disks index.
It is not guaranteed that indexes are equal to slots.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Use defines for device map access
Adam Kwolek [Wed, 7 Dec 2011 12:58:46 +0000 (13:58 +0100)] 
imsm: FIX: Use defines for device map access

Maps should not be accessed using "magic numbers" /0, 1,-1/.
Add proper definitions and change all map access to use them.
Change present definitions /MAP_0/MAP_1/ to values already used
in code /0, 1, -1//

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Check correct slots on disk failure
Adam Kwolek [Wed, 7 Dec 2011 12:58:38 +0000 (13:58 +0100)] 
imsm: FIX: Check correct slots on disk failure

When changes are made to 2nd map, slot in second map should be tested
instead first one /as change will be applied to second map).

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Finish rebuild and initialization when missing drive is handled
Adam Kwolek [Wed, 7 Dec 2011 12:58:30 +0000 (13:58 +0100)] 
imsm: FIX: Finish rebuild and initialization when missing drive is handled

When missing device is handled for rebuild or initialization
end_migration() should be called to merge ords in case additional
degradation.

I've removed this call to end_migration() as it was called
for migration also.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Mark failure for rebuild
Adam Kwolek [Wed, 7 Dec 2011 12:58:22 +0000 (13:58 +0100)] 
imsm: FIX: Mark failure for rebuild

Allow for marking failures in second map during rebuild and initialization
also (not during migration only)

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Add array map state transition for failures during initialization
Adam Kwolek [Wed, 7 Dec 2011 12:58:15 +0000 (13:58 +0100)] 
imsm: FIX: Add array map state transition for failures during initialization

During initialization disk failure can occur also. Add code for such case
in imsm_set_disk() to support such event.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Do not allow spare activation during rebuild
Adam Kwolek [Wed, 7 Dec 2011 12:58:07 +0000 (13:58 +0100)] 
imsm: FIX: Do not allow spare activation during rebuild

Do not allow for spare device activation while rebuild is in progress,
when additional degradation occur.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: Function imsm_set_disk() rework
Adam Kwolek [Wed, 7 Dec 2011 12:57:59 +0000 (13:57 +0100)] 
imsm: Function imsm_set_disk() rework

Rework is needed to map state transition part to allow easier code reading.
After rework it is easy to find out what can happen in what map state
transition.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Correct ords merging in end_migration()
Adam Kwolek [Wed, 7 Dec 2011 12:57:51 +0000 (13:57 +0100)] 
imsm: FIX: Correct ords merging in end_migration()

Ord's merging should occur when rebuild finishes and final state is other
than expected only /additional failures occur during rebuild/.
Exclude array initialization.
Merging ords on migration finish should never happen.
Any failure during migration should be immediately placed in first
/current/ map, so no merge is necessary.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Remove longer map request
Adam Kwolek [Wed, 7 Dec 2011 12:57:43 +0000 (13:57 +0100)] 
imsm: FIX: Remove longer map request

We shouldn't use longer map. mdadm should know what map is accessed
at the moment.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agofix: imsm: validate strip size - tuned up
Hawrylewicz Czarnowski, Przemyslaw [Wed, 7 Dec 2011 01:15:55 +0000 (12:15 +1100)] 
fix: imsm: validate strip size - tuned up

Neil's proposal seems more reasonable and shows what is really going on
here.

Signed-off-by: Przemyslaw Czarnowski <przemyslaw.hawrylewicz.czarnowski@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoReport raid level type to syslog on RebuildFinished event.
Sergey B Kirpichev [Tue, 6 Dec 2011 21:41:57 +0000 (08:41 +1100)] 
Report raid level type to syslog on RebuildFinished event.

Thus, for RAID1/RAID10 this can be filtered out in logcheck.

Relates-to: Debian bug 599821
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agomonitor: don't unblock a device that isn't blocked.
NeilBrown [Tue, 6 Dec 2011 21:39:39 +0000 (08:39 +1100)] 
monitor: don't unblock a device that isn't blocked.

When we see a failed device, we both unblock and remove it (after
updating the metadata).
However it might not be blocked as there can be a delay between
unblocking and the device being free to be removed.

If this happens the clearing of 'blocked' succeeds so md sends a sysfs
notification and mdmon checks again and tries to clear 'blocked'
again.
Thus it enters a busy-loop until the 'remove' succeeds.

To avoid this, only try to unblock if the device was blocked.

Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoFIX: resolve make everything compilation error
Adam Kwolek [Tue, 6 Dec 2011 00:44:46 +0000 (11:44 +1100)] 
FIX: resolve make everything compilation error

When mdadm is compiled using e.g. 'everything' option, mdasseble
compilation is broken.

Change code to enable mdasseble compilation

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Just created redundant array is not in uninitialized state
Adam Kwolek [Tue, 6 Dec 2011 00:44:07 +0000 (11:44 +1100)] 
imsm: FIX: Just created redundant array is not in uninitialized state

When redundant array (e.g. raid5) is created metadata shows it is in
normal state. Initialization process is showed in metadata as rebuild from normal
to normal state. Redundant array should be initially in uninitialized state
before it's initialization.

Add code to put array in uninitialized state upon array creation.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: fix: does not allow to use invalid chunk size
Przemyslaw Czarnowski [Tue, 6 Dec 2011 00:41:27 +0000 (11:41 +1100)] 
imsm: fix: does not allow to use invalid chunk size

Only least significant bit of chunk size provided by user has been used
in test with OROM capabilities. This way user could pass value which is
not a power of 2.

Signed-off-by: Przemyslaw Czarnowski <przemyslaw.hawrylewicz.czarnowski@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Check maximum allowed degradation level in recover_backup_imsm()
Adam Kwolek [Tue, 6 Dec 2011 00:40:58 +0000 (11:40 +1100)] 
imsm: FIX: Check maximum allowed degradation level in recover_backup_imsm()

Any degradation during backup recovery causes error and array assembly
failure.

Allow for degradation during backup recovery.
This allows for degraded array assembly.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Check maximum allowed degradation level in open_backup_targets()
Adam Kwolek [Tue, 6 Dec 2011 00:39:58 +0000 (11:39 +1100)] 
imsm: FIX: Check maximum allowed degradation level in open_backup_targets()

Any degradation during opening any backup device can causes error
and array assembly failure.

Allow for degradation during opening backup devices.
This allows for degraded array assembly.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Function rework - imsm_count_failed()
Adam Kwolek [Tue, 6 Dec 2011 00:37:16 +0000 (11:37 +1100)] 
imsm: FIX: Function rework - imsm_count_failed()

imsm_count_failed() assumes that on the same positions in both maps
the same disk indexes are kept. This is not always true /e.g. rebuild/
It can occur that disk taken for rebuild fails at once.
Degradation on the same positions in both maps refers to different disks.
Sum of both ords can point on not failed disk. This can cause wrong
failed disk counting.

Check both maps independently. This allows for getting real degradation
information.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Manage second map state on array degradation
Adam Kwolek [Tue, 6 Dec 2011 00:36:30 +0000 (11:36 +1100)] 
imsm: FIX: Manage second map state on array degradation

When degradation during migration occurs second map state is not set
to degraded value (map are updated correctly).

Correct second map state according to it's degradation level.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Restore critical section on degraded array
Adam Kwolek [Tue, 6 Dec 2011 00:30:16 +0000 (11:30 +1100)] 
imsm: FIX: Restore critical section on degraded array

When during assembly degradation occurs restoring metadata critical section
fails whole assembly.
Allow for degradation during assembly and not restore data on degraded disk.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Remove single map state limitation in getinfo
Adam Kwolek [Tue, 6 Dec 2011 00:28:04 +0000 (11:28 +1100)] 
imsm: FIX: Remove single map state limitation in getinfo

It can occur that degradation during migration occurs on disks that are not
present in both maps /e.g. degradation on just added disk during OLCE/.
This can cause that maps will be in different states (one will be in degraded
and second in normal state). In such situation getinfo_super_imsm_volume()
will not return migration information.

Remove single state limitation in both maps to allow migration information
retrieving.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Finalize degraded migration
Adam Kwolek [Tue, 6 Dec 2011 00:27:57 +0000 (11:27 +1100)] 
imsm: FIX: Finalize degraded migration

Currently mdadm for IMSM can finalize not-degraded migration only.
Add support for IMSM  for migration finalization when array
are is degraded state.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Do not end migration when missing drive is handled
Adam Kwolek [Tue, 6 Dec 2011 00:24:22 +0000 (11:24 +1100)] 
imsm: FIX: Do not end migration when missing drive is handled

Currently when degradation occurs migration is finalized. This is wrong.
Finalizing migration when it is not finished can lead to data corruption
after next array assembly.

Do not finish migration when degradation occurs.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Mark both maps on degradation while migrating
Adam Kwolek [Tue, 6 Dec 2011 00:21:23 +0000 (11:21 +1100)] 
imsm: FIX: Mark both maps on degradation while migrating

During migration degradation is set in first map only. This means that
according to second map disk is present. This is not true and not compatible
with OROM behavior.

Set disks in both maps to degraded state during migration.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: FIX: Return longer map for failure setting
Adam Kwolek [Tue, 6 Dec 2011 00:17:26 +0000 (11:17 +1100)] 
imsm: FIX: Return longer map for failure setting

When 2 maps are present, IMSM can use shorter map for setting disk
in to degraded state. It can happen that degraded disk can be not present
in shorter map.
We should use longer map for setting disk in to degraded state.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: incorrect incremental behavior because of wrong index used
Przemyslaw Czarnowski [Thu, 24 Nov 2011 05:23:21 +0000 (16:23 +1100)] 
imsm: incorrect incremental behavior because of wrong index used

Incremental in some cases prematurely assembles degraded arrays due to
wrong index used in code which counts missing disks

Signed-off-by: Przemyslaw Czarnowski <przemyslaw.hawrylewicz.czarnowski@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
12 years agofix: correct metadata's update communication
Lukasz Dorau [Fri, 18 Nov 2011 14:34:33 +0000 (15:34 +0100)] 
fix: correct metadata's update communication

The problem occurs when array under migration is assembled incrementally.
st->update_tail is not initialized in function
assemble_container_content() and during reshape
the checkpoint information in metadata is not being updated.

The value of st->update_tail is now initialized in function
assemble_container_content() and during reshape the checkpoint
information in metadata is being updated correctly on all disks.

Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: fix: correct printing value of blocks per migration unit
Lukasz Dorau [Fri, 18 Nov 2011 14:28:36 +0000 (15:28 +0100)] 
imsm: fix: correct printing value of blocks per migration unit

The value of blocks per migration unit is not printed correctly
when the metadata's content is examined using -E option on disks
without present migration record. (Migration record is present only
on 2 first disks in array due to IMSM compatibility restrictions.)

Printing the value of blocks per migration unit was corrected.
It is printed as N/A (Not Available) for disks
without the migration record.

Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: platform capabilities are not validated during level migration
Labun, Marcin [Wed, 16 Nov 2011 04:24:10 +0000 (15:24 +1100)] 
imsm: platform capabilities are not validated during level migration

Migration from RAID0 to RAID5 should be blocked on the system without
support for RAID5. No platform validation was performed in RAID
level migrations: verification for all level migrations added.

Signed-off-by: Marcin Labun <marcin.labun@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: fix: correct checking newly missing disks
Lukasz Dorau [Mon, 14 Nov 2011 14:52:52 +0000 (15:52 +0100)] 
imsm: fix: correct checking newly missing disks

The problem occurs when RAID10 array under rebuild
(after one disk fails) is assembled incrementally.
Mdadm tries to start array just after adding the third disk
and the volume is assembled incorrectly (in degraded state).

The cause is that container_enough depends on
newly missing disks which are checked incorrectly now.
They should be checked using always the first map.

Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: fix: Allowed to create 2 volumes with total size less then maximum.
Lukasz Orlowski [Mon, 14 Nov 2011 05:41:03 +0000 (16:41 +1100)] 
imsm: fix: Allowed to create 2 volumes with total size less then maximum.

mdadm allows to create second volume on the same disk set, whose size is
less then the free space left in the container (with IMSM_NO_PLATFORM
undefined or set to 0). This is an OROM compatibility issue.
It is fixed by verifying whether IMSM_NO_PLATFORM is set and for
the second volume creation scenario, requested size is verified against
remaining available space.

Signed-off-by: Lukasz Orlowski <lukasz.orlowski@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: fix: add support for OLCE and migration to imsm_count_failed
Lukasz Dorau [Mon, 7 Nov 2011 01:23:49 +0000 (12:23 +1100)] 
imsm: fix: add support for OLCE and migration to imsm_count_failed

The problem occurs when array under OLCE (from 3 to 6 disks)
is assembled incrementally. Mdadm tries to start array
just after adding the third disk (this is equal to the number of disks
before the start of reshape). It does not succeed,
the volume does not assembly correctly.

The function counting failed disks (imsm_count_failed())
was fixed for migration case. Now all disk members in both maps
are checked when failed disks are counted correctly.

Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agofix: Allowed to assemble 2 volumes with the same names from config file.
Lukasz Orlowski [Mon, 7 Nov 2011 01:20:34 +0000 (12:20 +1100)] 
fix: Allowed to assemble 2 volumes with the same names from config file.

mdadm allowes to assemble 2 volumes with the same names based on the
config file. The issue is fixed by iterating over the list of md device
identifiers and comparing the names of md devices against each other,
detecting identical names and blocking the assembly should the same names
be found.
Now having detected duplicate names, mdadm terminates without assembling
the container, displaying appropriate prompt.

Signed-off-by: Lukasz Orlowski <lukasz.orlowski@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoFIX: Do not continue container reshape when mdmon is absent
Adam Kwolek [Mon, 7 Nov 2011 00:46:35 +0000 (11:46 +1100)] 
FIX: Do not continue container reshape when mdmon is absent

When mdmon is absent metadata is not updated, and container_reshape()
can fall in to endless loop. This can cause user data corruption.

In case when mdmon is absent do not continue container reshape process.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agomdmon: avoid using victim_sock when it is -1.
NeilBrown [Mon, 7 Nov 2011 00:44:21 +0000 (11:44 +1100)] 
mdmon: avoid using victim_sock when it is -1.

It possible that we try to use victim_sock even when we couldn't open
it.  This is never actually harmful but it looks wrong and it is best
to fix it.

Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoRevert "mdmon(): Error out if failing to connect to victim monitor"
NeilBrown [Mon, 7 Nov 2011 00:37:12 +0000 (11:37 +1100)] 
Revert "mdmon(): Error out if failing to connect to victim monitor"

This reverts commit 819c158866f466075a1c719f0dc496deb2fb3814.

Adam Kwolek reports that with this patch, mdmon sometimes doesn't start:

    When array is not clean dismounted directory /dev/.mdadm is not cleaned up.
    On array re-assembly read pid is not valid and it is not possible
    to connect to monitor. This causes mdmon to exit and array remains
    not monitored.
    Problem is introduced by fix:
       mdmon(): Error out if failing to connect to victim monitor
       819c158866f466075a1c719f0dc496deb2fb3814

    This is critical for container reshape when mdmon is should finish reshape.
    when reshape is not finished, array is reshaped again by mdadm.

As victim_sock is subsequently tested, we don't really need to test-and-fail here.

Reported-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agomatch_metadata_desc(): Fix memory leak
Jes Sorensen [Wed, 2 Nov 2011 21:10:08 +0000 (08:10 +1100)] 
match_metadata_desc(): Fix memory leak

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agofd2devname(): Don't dereference NULL pointer
Jes Sorensen [Wed, 2 Nov 2011 21:09:56 +0000 (08:09 +1100)] 
fd2devname(): Don't dereference NULL pointer

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoManage_ro(): Check pointer rather than dereferencing it
Jes Sorensen [Wed, 2 Nov 2011 21:09:41 +0000 (08:09 +1100)] 
Manage_ro(): Check pointer rather than dereferencing it

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agounblock_monitor(): Check sra is valid before dereferencing
Jes Sorensen [Wed, 2 Nov 2011 21:09:19 +0000 (08:09 +1100)] 
unblock_monitor(): Check sra is valid before dereferencing

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoahci_enumerate_ports(): Don't close fd that failed to open
Jes Sorensen [Wed, 2 Nov 2011 21:08:34 +0000 (08:08 +1100)] 
ahci_enumerate_ports(): Don't close fd that failed to open

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoclose_aa(): Verify file descriptors are valid before trying to close them
Jes Sorensen [Wed, 2 Nov 2011 21:08:23 +0000 (08:08 +1100)] 
close_aa(): Verify file descriptors are valid before trying to close them

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agodisk_init_and_add(): Fail if opening sysfs file descriptors fail
Jes Sorensen [Wed, 2 Nov 2011 21:08:09 +0000 (08:08 +1100)] 
disk_init_and_add(): Fail if opening sysfs file descriptors fail

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoarray_try_spare(): open_dev() returns -1 on error, not zero
Jes Sorensen [Wed, 2 Nov 2011 21:08:00 +0000 (08:08 +1100)] 
array_try_spare(): open_dev() returns -1 on error, not zero

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoget_component_size(): Check read() return value for error before using it
Jes Sorensen [Wed, 2 Nov 2011 21:07:39 +0000 (08:07 +1100)] 
get_component_size(): Check read() return value for error before using it

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agomdstat_read(): Check return value of dup() before using file descriptor
Jes Sorensen [Wed, 2 Nov 2011 21:07:21 +0000 (08:07 +1100)] 
mdstat_read(): Check return value of dup() before using file descriptor

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoping_monitor(): check file descriptor is valid before using and closing it
Jes Sorensen [Wed, 2 Nov 2011 21:07:02 +0000 (08:07 +1100)] 
ping_monitor(): check file descriptor is valid before using and closing it

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agomdadm: Rearrange option parsing for KillSubarray and UpdateSubarray
Jes Sorensen [Wed, 2 Nov 2011 21:06:47 +0000 (08:06 +1100)] 
mdadm: Rearrange option parsing for KillSubarray and UpdateSubarray

Extracting the 'subarray' arg for these options was being done at the
wrong place which lead to the code being a bit confusing and looking
wrong.

So reformat that code a bit better and move the extraction of
'subarray' down to the main parsing of these options rather than the
mode setting.

Signed-off-by: NeilBrown <neilb@suse.de>
12 years agomake_parts(): Fix case of comparing against uninitialized variables
Jes Sorensen [Tue, 1 Nov 2011 19:30:12 +0000 (20:30 +0100)] 
make_parts(): Fix case of comparing against uninitialized variables

Silencing gcc's warning of uninitialized variables was hiding a bug
where if we have /dev/md64 as a symlink, and /dev/md64p1 was a real
device node.

In this case major_num and minor_num would not get populated, but we
end up comparing against them because the stat for md64p1 succeeds.

Instead of using the int foo = foo trick, change the code to set
set the variables to invalid values so comparisons will fail.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agovalidate_geometry_imsm_volume(): Avoid NULL pointer dereference
Jes Sorensen [Tue, 1 Nov 2011 15:09:34 +0000 (16:09 +0100)] 
validate_geometry_imsm_volume(): Avoid NULL pointer dereference

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agobitmap_fd_read(): fix memory leak
Jes Sorensen [Tue, 1 Nov 2011 15:09:33 +0000 (16:09 +0100)] 
bitmap_fd_read(): fix memory leak

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoMonitor(): free allocated memory on exit
Jes Sorensen [Tue, 1 Nov 2011 15:09:32 +0000 (16:09 +0100)] 
Monitor(): free allocated memory on exit

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoManage_runstop(): Avoid memory leak
Jes Sorensen [Tue, 1 Nov 2011 15:09:31 +0000 (16:09 +0100)] 
Manage_runstop(): Avoid memory leak

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoManaga_ro(): free() mdi before exiting
Jes Sorensen [Tue, 1 Nov 2011 15:09:30 +0000 (16:09 +0100)] 
Managa_ro(): free() mdi before exiting

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoIncrementalScan(): Fix memory leak
Jes Sorensen [Tue, 1 Nov 2011 15:09:29 +0000 (16:09 +0100)] 
IncrementalScan(): Fix memory leak

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoManage_subdevs(): avoid leaking super
Jes Sorensen [Tue, 1 Nov 2011 15:09:28 +0000 (16:09 +0100)] 
Manage_subdevs(): avoid leaking super

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoenough_fd(): remember to free buffer for avail array
Jes Sorensen [Tue, 1 Nov 2011 15:09:27 +0000 (16:09 +0100)] 
enough_fd(): remember to free buffer for avail array

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoGrow_reshape(): Fix another 'sra' leak
Jes Sorensen [Tue, 1 Nov 2011 15:09:26 +0000 (16:09 +0100)] 
Grow_reshape(): Fix another 'sra' leak

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoDetail(): Remember to free 'avail'
Jes Sorensen [Tue, 1 Nov 2011 15:09:25 +0000 (16:09 +0100)] 
Detail(): Remember to free 'avail'

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoAssemble(): don't dup_super() before we need it.
Jes Sorensen [Tue, 1 Nov 2011 15:09:24 +0000 (16:09 +0100)] 
Assemble(): don't dup_super() before we need it.

Avoid resource leak in case we bail loop early

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoGrow_restart(): free() offsets after use
Jes Sorensen [Tue, 1 Nov 2011 15:09:23 +0000 (16:09 +0100)] 
Grow_restart(): free() offsets after use

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoassemble_container_content(): fix memory leak
Jes Sorensen [Tue, 1 Nov 2011 15:09:22 +0000 (16:09 +0100)] 
assemble_container_content(): fix memory leak

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoremove_devices(): readlink returns -1 on error
Jes Sorensen [Tue, 1 Nov 2011 15:09:21 +0000 (16:09 +0100)] 
remove_devices(): readlink returns -1 on error

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agosysfs_unique_holder(): Check read() return value before using as buffer index
Jes Sorensen [Tue, 1 Nov 2011 15:09:20 +0000 (16:09 +0100)] 
sysfs_unique_holder(): Check read() return value before using as buffer index

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoIncremental(): Check return value of dev_open() before trying to use it
Jes Sorensen [Tue, 1 Nov 2011 15:09:19 +0000 (16:09 +0100)] 
Incremental(): Check return value of dev_open() before trying to use it

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoGrow_addbitmap(): don't try to close a file descriptor which failed to open
Jes Sorensen [Tue, 1 Nov 2011 15:09:18 +0000 (16:09 +0100)] 
Grow_addbitmap(): don't try to close a file descriptor which failed to open

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoGrow_Add_device(): dev_open() return a negative fd on error
Jes Sorensen [Tue, 1 Nov 2011 15:09:17 +0000 (16:09 +0100)] 
Grow_Add_device(): dev_open() return a negative fd on error

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoGrow: fix check_reshape and open_code it.
NeilBrown [Tue, 1 Nov 2011 04:45:46 +0000 (15:45 +1100)] 
Grow: fix check_reshape and open_code it.

check_reshape should not try to parse the subarray string - only
metadata handlers are allowed to do that.

The common code and only interpret a subarray string by passing it to
"container_content" which will then return only the member for that
subarray.

So remove check_reshape and place similar logic explicitly at the two
call-sites.  They are different enough that it is probably clearer to
have explicit code.

Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoIncremental: Fix a merge error in recent patch
NeilBrown [Tue, 1 Nov 2011 04:17:03 +0000 (15:17 +1100)] 
Incremental: Fix a merge error in recent patch

commit  81219e70f2a9be7292046860ea15528fe5854cab required
merging and I messed it up.
The locking shouldn't be there - the caller locks now.

Reported-by: "Labun, Marcin" <Marcin.Labun@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agomdmon(): Error out if failing to connect to victim monitor
Jes Sorensen [Tue, 1 Nov 2011 03:56:28 +0000 (14:56 +1100)] 
mdmon(): Error out if failing to connect to victim monitor

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoWrite_rules(): Avoid stack corruption if using extremely long udev pathname
Jes Sorensen [Tue, 1 Nov 2011 03:56:12 +0000 (14:56 +1100)] 
Write_rules(): Avoid stack corruption if using extremely long udev pathname

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agopolicy_add(): Add missing va_end()
Jes Sorensen [Tue, 1 Nov 2011 03:56:06 +0000 (14:56 +1100)] 
policy_add(): Add missing va_end()

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoAvoid memory leak
Jes Sorensen [Tue, 1 Nov 2011 03:55:59 +0000 (14:55 +1100)] 
Avoid memory leak

In case of second posix_memalign() failing, release memory allocated
in first posix_memalign() call.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoAdd missing return in case of trying to grow sub-array
Jes Sorensen [Tue, 1 Nov 2011 03:55:14 +0000 (14:55 +1100)] 
Add missing return in case of trying to grow sub-array

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoFix memory leak
Jes Sorensen [Tue, 1 Nov 2011 03:54:56 +0000 (14:54 +1100)] 
Fix memory leak

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agopartition_try_spare() use closedir() to release DIR * returned by opendir()
Jes Sorensen [Tue, 1 Nov 2011 03:54:27 +0000 (14:54 +1100)] 
partition_try_spare() use closedir() to release DIR * returned by opendir()

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoFix memory leak of 'st3' in array_try_spare()
Jes Sorensen [Tue, 1 Nov 2011 03:51:30 +0000 (14:51 +1100)] 
Fix memory leak of 'st3' in array_try_spare()

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoFix memory leak
Jes Sorensen [Tue, 1 Nov 2011 03:51:14 +0000 (14:51 +1100)] 
Fix memory leak

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoFix memory leak
Jes Sorensen [Tue, 1 Nov 2011 03:50:44 +0000 (14:50 +1100)] 
Fix memory leak

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoFix memory leaks in reshape_array()
Jes Sorensen [Tue, 1 Nov 2011 02:33:48 +0000 (13:33 +1100)] 
Fix memory leaks in reshape_array()

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoKill: remove duplicate tests on 'force'.
NeilBrown [Tue, 1 Nov 2011 02:30:44 +0000 (13:30 +1100)] 
Kill: remove duplicate tests on 'force'.

We test 'force' twice with the second having not chance of
taking effect.
As a result a subsequent message - intended for use in the 'force'
case is never generated.

So remove the first test - it is unnecessary.

Reported-by: Jes.Sorensen@redhat.com
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoRemove duplicated code: search_mdstat and conf_match
NeilBrown [Tue, 1 Nov 2011 02:30:41 +0000 (13:30 +1100)] 
Remove duplicated code:  search_mdstat and conf_match

search_mdstat and conf_match are almost identical.

Put all the functionality in conf_match, and remove search_mdstat.

Reported-by: Jes.Sorensen@redhat.com
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agokill-subarray: fix, IMSM cannot kill-subarray with unsupported metadata
Labun, Marcin [Mon, 31 Oct 2011 00:29:46 +0000 (11:29 +1100)] 
kill-subarray: fix, IMSM cannot kill-subarray with unsupported metadata

container_content retrieves volume information from disks in the
container.  For unsupported volumes the function was not returning
mdinfo. When all volumes were unsupported the function was returning
NULL pointer to block actions on the volumes. Therefore, such volumes
were not activated in Incremental and Assembly. As side effect they
also could not be deleted using kill-subarray since "kill" function
requires to obtain a valid mdinfo from container_content.

This patch fixes the kill-subarray problem by allowing to obtain
mdinfo of all volumes types including unsupported and introducing new
array.status flags.

There are following changes:

1. Added MD_SB_BLOCK_VOLUME for blocking an array, other arrays in the
   container can be activated.

2. Added MD_SB_BLOCK_CONTAINER_RESHAPE block container wide reshapes
   (like changing disk numbers in arrays).

3. IMSM container_content handler is to load mdinfo for all volumes
   and set both blocking flags in array.state field in mdinfo of
   unsupported volumes.  In case of some errors, all volumes can be
   affected. Only blocked array is not activated (also reshaped as
   result). The container wide reshapes are also blocked since by
   metadata definition they require modifications of both arrays.

4. Incremental_container and Assemble functions check array.state and
   do not activate volumes with blocking bits set.

5. assemble_container_content is changed to check container wide reshapes
   before activating reshapes of assembled containers.

6. Grow_reshape and Grow_continue_command checks blocking bits
   before starting reshapes or continueing (-G --continue) reshapes.

7. kill-subarray ignores array.state info and can remove requested array.

Signed-off-by: Marcin Labun <marcin.labun@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoAvoid stack overflow if GPT partition entries on disk are > 128 bytes
Jes Sorensen [Sun, 30 Oct 2011 23:24:55 +0000 (10:24 +1100)] 
Avoid stack overflow if GPT partition entries on disk are > 128 bytes

Per [1] GPT partition table entries are not guaranteed to be 128
bytes, in which case read() straight into a struct GPT_part_entry
would result in a buffer overflow corrupting the stack.

[1] http://en.wikipedia.org/wiki/GUID_Partition_Table

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoFIX: Close unused handle in child process during reshape restart
Adam Kwolek [Wed, 26 Oct 2011 16:16:55 +0000 (18:16 +0200)] 
FIX: Close unused handle in child process during reshape restart

When array reshape (e.g. raid0->raid5 migration) is restarted during
array assembly, file system placed on this array cannot be mounted until
reshape is finished due to "busy" error.

This is caused when reshape is executed on array for external metadata
and array handle is cloned /forked/ to child process environment but not
closed.

Handle can't be closed before executing Grow_continue() because it is
used later in code.

Close unused handle in child process /reshape_container()/.
It is similar to close fd handle in reshape_array() before calling
manage_reshape()/child_monitor() in Grow.c:2290.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoGCC compile fix: remove calculation of unused variable 'reservation'
Jes Sorensen [Thu, 6 Oct 2011 14:43:51 +0000 (16:43 +0200)] 
GCC compile fix: remove calculation of unused variable 'reservation'

gcc 4.6.1 doesn't like calculating a variable that then isn't
used. Remove it.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoutil.c: two typos fixed
Lukasz Dorau [Tue, 25 Oct 2011 13:42:25 +0000 (15:42 +0200)] 
util.c: two typos fixed

Two typos fixed.

Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: fix: Fixes metadata after migration from Raid 0 to Raid 10
root [Sat, 22 Oct 2011 00:42:16 +0000 (11:42 +1100)] 
imsm: fix: Fixes metadata after migration from Raid 0 to Raid 10

After migration from Raid 0 to Raid 10, the metadata is incorrect,
leaving one mirror disk marked as spare and one missing disk as a member
of the array.
The reason is that the metadata update code for spare activation
procedure takes into account one spare disk only, not checking
the following ones.

Signed-off-by: Lukasz Orlowski <lukasz.orlowski@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoimsm: Moves metadata update code for spare activation to separate function
Lukasz Orlowski [Sat, 22 Oct 2011 00:38:56 +0000 (11:38 +1100)] 
imsm: Moves metadata update code for spare activation to separate function

The metadata update code during spare activation is moved to a separate
function for clarity of code, as a prework for the next patch fixing
the bug.

Signed-off-by: Lukasz Orlowski <lukasz.orlowski@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoIncremental() lock error handling
Jes Sorensen [Sat, 22 Oct 2011 00:34:08 +0000 (11:34 +1100)] 
Incremental() lock error handling

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoCreate() check malloc() return value
Jes Sorensen [Sat, 22 Oct 2011 00:33:53 +0000 (11:33 +1100)] 
Create() check malloc() return value

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoCreate() don't leave the lock hanging on error
Jes Sorensen [Sat, 22 Oct 2011 00:32:52 +0000 (11:32 +1100)] 
Create() don't leave the lock hanging on error

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoarray_try_spare(): missing map_unlock()
Jes Sorensen [Sat, 22 Oct 2011 00:32:19 +0000 (11:32 +1100)] 
array_try_spare(): missing map_unlock()

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoHold the map lock while performing Assemble to avoid races with udev
Jes Sorensen [Sat, 22 Oct 2011 00:30:43 +0000 (11:30 +1100)] 
Hold the map lock while performing Assemble to avoid races with udev

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoDon't tell sysfs to launch the container as we are doing it ourselves
Jes Sorensen [Sat, 22 Oct 2011 00:30:02 +0000 (11:30 +1100)] 
Don't tell sysfs to launch the container as we are doing it ourselves

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>
12 years agoRemove race for starting container devices.
Jes Sorensen [Sat, 22 Oct 2011 00:29:47 +0000 (11:29 +1100)] 
Remove race for starting container devices.

This moves the lock handling out of Incremental_container() and relies
on the caller holding the lock. This prevents conflict with a
follow-on mdadm comment which may try and launch the device in
parallel.

This involves replacing a call to "Incremental" with an
unrolled version with just the case that calls Incremental_container
and so needs a call to ->load_container.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: NeilBrown <neilb@suse.de>