block: fix wrong order in live block migration setup
The function init_blk_migration is better to be called before set_dirty_tracking as the reasons below. If we want to track dirty blocks via dirty_maps on a BlockDriverState when doing live block-migration, its correspoding 'BlkMigDevState' should be added to block_mig_state.bmds_list first for subsequent processing. Otherwise set_dirty_tracking will do nothing on an empty list than allocating dirty_bitmaps for them. And bdrv_get_dirty_count will access the bmds->dirty_maps directly, then there would be a segfault triggered. If the set_dirty_tracking fails, qemu_savevm_state_cancel will handle the cleanup of init_blk_migration automatically. Reviewed-by: Fam Zheng <famz@redhat.com> Signed-off-by: chai wen <chaiw.fnst@cn.fujitsu.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
		
							parent
							
								
									b15446fdbf
								
							
						
					
					
						commit
						1ac362cdbd
					
				| @ -629,6 +629,7 @@ static int block_save_setup(QEMUFile *f, void *opaque) | ||||
|             block_mig_state.submitted, block_mig_state.transferred); | ||||
| 
 | ||||
|     qemu_mutex_lock_iothread(); | ||||
|     init_blk_migration(f); | ||||
| 
 | ||||
|     /* start track dirty blocks */ | ||||
|     ret = set_dirty_tracking(); | ||||
| @ -638,8 +639,6 @@ static int block_save_setup(QEMUFile *f, void *opaque) | ||||
|         return ret; | ||||
|     } | ||||
| 
 | ||||
|     init_blk_migration(f); | ||||
| 
 | ||||
|     qemu_mutex_unlock_iothread(); | ||||
| 
 | ||||
|     ret = flush_blks(f); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 chai wen
						chai wen