mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Fix zdb_read_block using zio after it is destroyed
The checksum display code of zdb_read_block uses a zio to read in the block and then calls zio_checksum_compute. Use a new zio in the call to zio_checksum_compute not the zio from the read which has been destroyed by zio_wait. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Igor Kozhukhov <igor@dilos.org> Signed-off-by: Paul Zuchowski <pzuchowski@datto.com> Closes #9644 Closes #9657
This commit is contained in:
		
							parent
							
								
									388ef045b2
								
							
						
					
					
						commit
						73b5231187
					
				| @ -5859,13 +5859,18 @@ zdb_read_block(char *thing, spa_t *spa) | ||||
| 			} | ||||
| 			error = zio_wait(czio); | ||||
| 			if (error == 0 || error == ECKSUM) { | ||||
| 				zio_checksum_compute(czio, ck, pabd, lsize); | ||||
| 				zio_t *ck_zio = zio_root(spa, NULL, NULL, 0); | ||||
| 				ck_zio->io_offset = | ||||
| 				    DVA_GET_OFFSET(&bp->blk_dva[0]); | ||||
| 				ck_zio->io_bp = bp; | ||||
| 				zio_checksum_compute(ck_zio, ck, pabd, lsize); | ||||
| 				printf("%12s\tcksum=%llx:%llx:%llx:%llx\n", | ||||
| 				    zio_checksum_table[ck].ci_name, | ||||
| 				    (u_longlong_t)bp->blk_cksum.zc_word[0], | ||||
| 				    (u_longlong_t)bp->blk_cksum.zc_word[1], | ||||
| 				    (u_longlong_t)bp->blk_cksum.zc_word[2], | ||||
| 				    (u_longlong_t)bp->blk_cksum.zc_word[3]); | ||||
| 				zio_wait(ck_zio); | ||||
| 			} else { | ||||
| 				printf("error %d reading block\n", error); | ||||
| 			} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Paul Zuchowski
						Paul Zuchowski