- Fix Monitor mode sometimes crashes when a resync completes - Fix missing symlink for mdadm container device when incremental creates the array - Make sure when creating a second array in a container that the second array uses all available space since leaving space for a third array is invalid - Validate the number of imsm volumes per controller - Fix issues with imsm arrays and disks larger than 2TB - Add support for expanding imsm arrays/containers - The support for expanding imsm arrays/containers was accepted upstream, update to the official patches from there - Fix for the issue of --add not being very smart - Fix an issue causing rebuilds to fail to restart on reboot (data corrupter level problem) - Reset the bad flag on map file updates - Correctly fix failure when trying to add internal bitmap to 1.0 arrays - Resolves: bz817023 (f17) bz817024 (f17) bz817026 (f17) bz817028 (f17) - Resolves: bz817029 (f17) bz817032 (f17) bz817038 (f17) bz808774 (f17) - Resolves: bz817039 (f17) bz817042 (f17) Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
		
			
				
	
	
		
			63 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 7ce05701813496571e1f7f79c726aa6e4868bd5f Mon Sep 17 00:00:00 2001
 | |
| From: Lukasz Dorau <lukasz.dorau@intel.com>
 | |
| Date: Fri, 20 Apr 2012 13:45:02 +0200
 | |
| Subject: [PATCH 2/3] imsm: fix: rebuild does not continue after reboot
 | |
| 
 | |
| If system is rebooted during rebuild, md driver changes sync_action
 | |
| from 'recover' to 'idle' (during stopping all md devices).
 | |
| If mdmon is still running then, it detects the change of sync_action state,
 | |
| finishes rebuild and writes metadata to disks. After computer's restart
 | |
| the RAID volume is in Normal state in OROM and rebuild seems to be finished.
 | |
| After system's start-up RAID volume is in auto-read-only state
 | |
| and metadata is in Dirty state. Rebuild seems to be finished but it is not.
 | |
| Data is inconsistent (out-of-sync).
 | |
| 
 | |
| When mdmon detects the change of sync_action from 'recover' to 'idle',
 | |
| it has to check if rebuild is really finished. Appropriate test was added.
 | |
| Now mdmon examines each volume's member if it is being rebuilt.
 | |
| 
 | |
| Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
 | |
| Signed-off-by: NeilBrown <neilb@suse.de>
 | |
| ---
 | |
|  super-intel.c |   17 +++++++++++++++++
 | |
|  1 files changed, 17 insertions(+), 0 deletions(-)
 | |
| 
 | |
| diff --git a/super-intel.c b/super-intel.c
 | |
| index e405d97..1ad5e47 100644
 | |
| --- a/super-intel.c
 | |
| +++ b/super-intel.c
 | |
| @@ -7273,6 +7273,8 @@ static void imsm_set_disk(struct active_array *a, int n, int state)
 | |
|  	struct imsm_dev *dev = get_imsm_dev(super, inst);
 | |
|  	struct imsm_map *map = get_imsm_map(dev, MAP_0);
 | |
|  	struct imsm_disk *disk;
 | |
| +	struct mdinfo *mdi;
 | |
| +	int recovery_not_finished = 0;
 | |
|  	int failed;
 | |
|  	__u32 ord;
 | |
|  	__u8 map_state;
 | |
| @@ -7313,6 +7315,21 @@ static void imsm_set_disk(struct active_array *a, int n, int state)
 | |
|  		dprintf("normal: ");
 | |
|  		if (is_rebuilding(dev)) {
 | |
|  			dprintf("while rebuilding");
 | |
| +			/* check if recovery is really finished */
 | |
| +			for (mdi = a->info.devs; mdi ; mdi = mdi->next)
 | |
| +				if (mdi->recovery_start != MaxSector) {
 | |
| +					recovery_not_finished = 1;
 | |
| +					break;
 | |
| +				}
 | |
| +			if (recovery_not_finished) {
 | |
| +				dprintf("\nimsm: Rebuild has not finished yet, "
 | |
| +						"state not changed");
 | |
| +				if (a->last_checkpoint < mdi->recovery_start) {
 | |
| +					a->last_checkpoint = mdi->recovery_start;
 | |
| +					super->updates_pending++;
 | |
| +				}
 | |
| +				break;
 | |
| +			}
 | |
|  			end_migration(dev, super, map_state);
 | |
|  			map = get_imsm_map(dev, MAP_0);
 | |
|  			map->failed_disk_num = ~0;
 | |
| -- 
 | |
| 1.7.7.6
 | |
| 
 |