Greg, > The current calculation for pi_bytes{out,in} assumes a 512 byte logical > block size and a protection interval exponent of 0, i.e. 512 bytes data > + 8 bytes PI. The block layer always deals with units of 512 bytes. Regardless of the underlying logical block size. > When run on a 4 KiB logical block size device with a protection > interval exponent of 0, i.e. 4096 bytes data + 8 bytes PI, the driver > miscalculates the pi_bytes{out,in} by a factor of 8x (64 bytes). > @@ -513,12 +513,12 @@ static void virtio_scsi_init_hdr_pi(struct virtio_device *vdev, > > if (sc->sc_data_direction == DMA_TO_DEVICE) > cmd_pi->pi_bytesout = cpu_to_virtio32(vdev, > - blk_rq_sectors(rq) * > - bi->tuple_size); > + bio_integrity_bytes(bi, > + blk_rq_sectors(rq))); The formatting/alignment could be improved here. Otherwise OK. Acked-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx> -- Martin K. Petersen Oracle Linux Engineering