block: check for RESIZE blocker in the QMP command, not bdrv_truncate()
If we check for the RESIZE blocker in bdrv_truncate(), that means a commit will fail if the overlay layer is larger than the base, due to the backing blocker. This is a regression in behavior from 2.0; currently, commit will try to grow the size of the base image to match the overlay size, if the overlay size is larger. By moving this into the QMP command qmp_block_resize(), it allows usage of bdrv_truncate() within block jobs. Signed-off-by: Jeff Cody <jcody@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									a760715095
								
							
						
					
					
						commit
						9c75e168bc
					
				
							
								
								
									
										4
									
								
								block.c
								
								
								
								
							
							
						
						
									
										4
									
								
								block.c
								
								
								
								
							| 
						 | 
				
			
			@ -3483,9 +3483,7 @@ int bdrv_truncate(BlockDriverState *bs, int64_t offset)
 | 
			
		|||
        return -ENOTSUP;
 | 
			
		||||
    if (bs->read_only)
 | 
			
		||||
        return -EACCES;
 | 
			
		||||
    if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_RESIZE, NULL)) {
 | 
			
		||||
        return -EBUSY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ret = drv->bdrv_truncate(bs, offset);
 | 
			
		||||
    if (ret == 0) {
 | 
			
		||||
        ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1819,6 +1819,11 @@ void qmp_block_resize(bool has_device, const char *device,
 | 
			
		|||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_RESIZE, NULL)) {
 | 
			
		||||
        error_set(errp, QERR_DEVICE_IN_USE, device);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* complete all in-flight operations before resizing the device */
 | 
			
		||||
    bdrv_drain_all();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue