block: copy over job and dirty bitmap fields in bdrv_append
While these should not be in use at the time a transaction is started, a command in the prepare phase of a transaction might have added them, so they need to be brought over. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									5c171afa4c
								
							
						
					
					
						commit
						a9fc4408e3
					
				
							
								
								
									
										15
									
								
								block.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								block.c
									
									
									
									
									
								
							@ -1027,6 +1027,16 @@ void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
 | 
				
			|||||||
    tmp.iostatus_enabled  = bs_top->iostatus_enabled;
 | 
					    tmp.iostatus_enabled  = bs_top->iostatus_enabled;
 | 
				
			||||||
    tmp.iostatus          = bs_top->iostatus;
 | 
					    tmp.iostatus          = bs_top->iostatus;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* dirty bitmap */
 | 
				
			||||||
 | 
					    tmp.dirty_count       = bs_top->dirty_count;
 | 
				
			||||||
 | 
					    tmp.dirty_bitmap      = bs_top->dirty_bitmap;
 | 
				
			||||||
 | 
					    assert(bs_new->dirty_bitmap == NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* job */
 | 
				
			||||||
 | 
					    tmp.in_use            = bs_top->in_use;
 | 
				
			||||||
 | 
					    tmp.job               = bs_top->job;
 | 
				
			||||||
 | 
					    assert(bs_new->job == NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* keep the same entry in bdrv_states */
 | 
					    /* keep the same entry in bdrv_states */
 | 
				
			||||||
    pstrcpy(tmp.device_name, sizeof(tmp.device_name), bs_top->device_name);
 | 
					    pstrcpy(tmp.device_name, sizeof(tmp.device_name), bs_top->device_name);
 | 
				
			||||||
    tmp.list = bs_top->list;
 | 
					    tmp.list = bs_top->list;
 | 
				
			||||||
@ -1051,6 +1061,11 @@ void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
 | 
				
			|||||||
    /* clear the copied fields in the new backing file */
 | 
					    /* clear the copied fields in the new backing file */
 | 
				
			||||||
    bdrv_detach_dev(bs_new, bs_new->dev);
 | 
					    bdrv_detach_dev(bs_new, bs_new->dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bs_new->job                = NULL;
 | 
				
			||||||
 | 
					    bs_new->in_use             = 0;
 | 
				
			||||||
 | 
					    bs_new->dirty_bitmap       = NULL;
 | 
				
			||||||
 | 
					    bs_new->dirty_count        = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    qemu_co_queue_init(&bs_new->throttled_reqs);
 | 
					    qemu_co_queue_init(&bs_new->throttled_reqs);
 | 
				
			||||||
    memset(&bs_new->io_base,   0, sizeof(bs_new->io_base));
 | 
					    memset(&bs_new->io_base,   0, sizeof(bs_new->io_base));
 | 
				
			||||||
    memset(&bs_new->io_limits, 0, sizeof(bs_new->io_limits));
 | 
					    memset(&bs_new->io_limits, 0, sizeof(bs_new->io_limits));
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user