mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 12:07:31 +00:00 
			
		
		
		
	qcow2: Use qcow2_signal_corruption() for overlaps
Use the new function in case of a failed overlap check. This changes output in case of corruption, so adapt iotest 060's reference output accordingly. Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Benoît Canet <benoit.canet@nodalink.com> Message-id: 1409926039-29044-4-git-send-email-mreitz@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
		
							parent
							
								
									85186ebdac
								
							
						
					
					
						commit
						adb435522b
					
				| @ -26,8 +26,6 @@ | ||||
| #include "block/block_int.h" | ||||
| #include "block/qcow2.h" | ||||
| #include "qemu/range.h" | ||||
| #include "qapi/qmp/types.h" | ||||
| #include "qapi-event.h" | ||||
| 
 | ||||
| static int64_t alloc_clusters_noref(BlockDriverState *bs, uint64_t size); | ||||
| static int QEMU_WARN_UNUSED_RESULT update_refcount(BlockDriverState *bs, | ||||
| @ -1838,27 +1836,11 @@ int qcow2_pre_write_overlap_check(BlockDriverState *bs, int ign, int64_t offset, | ||||
|         return ret; | ||||
|     } else if (ret > 0) { | ||||
|         int metadata_ol_bitnr = ffs(ret) - 1; | ||||
|         char *message; | ||||
| 
 | ||||
|         assert(metadata_ol_bitnr < QCOW2_OL_MAX_BITNR); | ||||
| 
 | ||||
|         fprintf(stderr, "qcow2: Preventing invalid write on metadata (overlaps " | ||||
|                 "with %s); image marked as corrupt.\n", | ||||
|                 metadata_ol_names[metadata_ol_bitnr]); | ||||
|         message = g_strdup_printf("Prevented %s overwrite", | ||||
|                 metadata_ol_names[metadata_ol_bitnr]); | ||||
|         qapi_event_send_block_image_corrupted(bdrv_get_device_name(bs), | ||||
|                                               message, | ||||
|                                               true, | ||||
|                                               offset, | ||||
|                                               true, | ||||
|                                               size, | ||||
|                                               true, | ||||
|                                               &error_abort); | ||||
|         g_free(message); | ||||
| 
 | ||||
|         qcow2_mark_corrupt(bs); | ||||
|         bs->drv = NULL; /* make BDS unusable */ | ||||
|         qcow2_signal_corruption(bs, true, offset, size, "Preventing invalid " | ||||
|                                 "write on metadata (overlaps with %s)", | ||||
|                                 metadata_ol_names[metadata_ol_bitnr]); | ||||
|         return -EIO; | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -8,7 +8,7 @@ ERROR cluster 3 refcount=1 reference=3 | ||||
| 1 errors were found on the image. | ||||
| Data may be corrupted, or further writes to the image may corrupt it. | ||||
| incompatible_features     0x0 | ||||
| qcow2: Preventing invalid write on metadata (overlaps with active L1 table); image marked as corrupt. | ||||
| qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with active L1 table); further corruption events will be suppressed | ||||
| write failed: Input/output error | ||||
| incompatible_features     0x2 | ||||
| qemu-io: can't open device TEST_DIR/t.IMGFMT: IMGFMT: Image is corrupt; cannot be opened read/write | ||||
| @ -24,7 +24,7 @@ ERROR cluster 2 refcount=1 reference=2 | ||||
| 2 errors were found on the image. | ||||
| Data may be corrupted, or further writes to the image may corrupt it. | ||||
| incompatible_features     0x0 | ||||
| qcow2: Preventing invalid write on metadata (overlaps with refcount block); image marked as corrupt. | ||||
| qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with refcount block); further corruption events will be suppressed | ||||
| write failed: Input/output error | ||||
| incompatible_features     0x2 | ||||
| Repairing refcount block 0 refcount=2 | ||||
| @ -56,7 +56,7 @@ Data may be corrupted, or further writes to the image may corrupt it. | ||||
| 1 leaked clusters were found on the image. | ||||
| This means waste of disk space, but no harm to data. | ||||
| incompatible_features     0x0 | ||||
| qcow2: Preventing invalid write on metadata (overlaps with inactive L2 table); image marked as corrupt. | ||||
| qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with inactive L2 table); further corruption events will be suppressed | ||||
| write failed: Input/output error | ||||
| incompatible_features     0x2 | ||||
| Repairing cluster 4 refcount=1 reference=2 | ||||
| @ -88,7 +88,7 @@ wrote 65536/65536 bytes at offset 536870912 | ||||
| 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) | ||||
| discard 65536/65536 bytes at offset 0 | ||||
| 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) | ||||
| qcow2: Preventing invalid write on metadata (overlaps with active L2 table); image marked as corrupt. | ||||
| qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with active L2 table); further corruption events will be suppressed | ||||
| blkdebug: Suspended request '0' | ||||
| write failed: Input/output error | ||||
| blkdebug: Resuming request '0' | ||||
| @ -99,6 +99,6 @@ aio_write failed: No medium found | ||||
| Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864  | ||||
| wrote 65536/65536 bytes at offset 0 | ||||
| 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) | ||||
| qcow2: Preventing invalid write on metadata (overlaps with qcow2_header); image marked as corrupt. | ||||
| qcow2: Marking image as corrupt: Preventing invalid write on metadata (overlaps with qcow2_header); further corruption events will be suppressed | ||||
| write failed: Input/output error | ||||
| *** done | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Max Reitz
						Max Reitz