mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 03:52:43 +00:00 
			
		
		
		
	block: allow resizing of images residing on host devices
Allow to resize images that reside on host devices up to the available space. This allows to grow images after resizing the device manually or vice versa. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									ebffe2afce
								
							
						
					
					
						commit
						55b949c847
					
				| @ -649,10 +649,24 @@ static void raw_close(BlockDriverState *bs) | ||||
| static int raw_truncate(BlockDriverState *bs, int64_t offset) | ||||
| { | ||||
|     BDRVRawState *s = bs->opaque; | ||||
|     if (s->type != FTYPE_FILE) | ||||
|         return -ENOTSUP; | ||||
|     if (ftruncate(s->fd, offset) < 0) | ||||
|     struct stat st; | ||||
| 
 | ||||
|     if (fstat(s->fd, &st)) { | ||||
|         return -errno; | ||||
|     } | ||||
| 
 | ||||
|     if (S_ISREG(st.st_mode)) { | ||||
|         if (ftruncate(s->fd, offset) < 0) { | ||||
|             return -errno; | ||||
|         } | ||||
|     } else if (S_ISCHR(st.st_mode) || S_ISBLK(st.st_mode)) { | ||||
|        if (offset > raw_getlength(bs)) { | ||||
|            return -EINVAL; | ||||
|        } | ||||
|     } else { | ||||
|         return -ENOTSUP; | ||||
|     } | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| @ -1178,6 +1192,7 @@ static BlockDriver bdrv_host_device = { | ||||
| 
 | ||||
|     .bdrv_read          = raw_read, | ||||
|     .bdrv_write         = raw_write, | ||||
|     .bdrv_truncate      = raw_truncate, | ||||
|     .bdrv_getlength	= raw_getlength, | ||||
|     .bdrv_get_allocated_file_size | ||||
|                         = raw_get_allocated_file_size, | ||||
| @ -1299,6 +1314,7 @@ static BlockDriver bdrv_host_floppy = { | ||||
| 
 | ||||
|     .bdrv_read          = raw_read, | ||||
|     .bdrv_write         = raw_write, | ||||
|     .bdrv_truncate      = raw_truncate, | ||||
|     .bdrv_getlength	= raw_getlength, | ||||
|     .bdrv_get_allocated_file_size | ||||
|                         = raw_get_allocated_file_size, | ||||
| @ -1400,6 +1416,7 @@ static BlockDriver bdrv_host_cdrom = { | ||||
| 
 | ||||
|     .bdrv_read          = raw_read, | ||||
|     .bdrv_write         = raw_write, | ||||
|     .bdrv_truncate      = raw_truncate, | ||||
|     .bdrv_getlength     = raw_getlength, | ||||
|     .bdrv_get_allocated_file_size | ||||
|                         = raw_get_allocated_file_size, | ||||
| @ -1521,6 +1538,7 @@ static BlockDriver bdrv_host_cdrom = { | ||||
| 
 | ||||
|     .bdrv_read          = raw_read, | ||||
|     .bdrv_write         = raw_write, | ||||
|     .bdrv_truncate      = raw_truncate, | ||||
|     .bdrv_getlength     = raw_getlength, | ||||
|     .bdrv_get_allocated_file_size | ||||
|                         = raw_get_allocated_file_size, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Christoph Hellwig
						Christoph Hellwig