]> Git Repo - qemu.git/commitdiff
block/export: fix vhost-user-blk export sector number calculation
authorStefan Hajnoczi <[email protected]>
Tue, 23 Feb 2021 14:46:50 +0000 (14:46 +0000)
committerKevin Wolf <[email protected]>
Mon, 8 Mar 2021 13:56:54 +0000 (14:56 +0100)
The driver is supposed to honor the blk_size field but the protocol
still uses 512-byte sector numbers. It is incorrect to multiply
req->sector_num by blk_size.

VIRTIO 1.1 5.2.5 Device Initialization says:

  blk_size can be read to determine the optimal sector size for the
  driver to use. This does not affect the units used in the protocol
  (always 512 bytes), but awareness of the correct value can affect
  performance.

Fixes: 3578389bcf76c824a5d82e6586a6f0c71e56f2aa ("block/export: vhost-user block device backend server")
Signed-off-by: Stefan Hajnoczi <[email protected]>
Message-Id: <20210223144653[email protected]>
Signed-off-by: Kevin Wolf <[email protected]>
block/export/vhost-user-blk-server.c

index 2614a637918e9fcfe29d37635d590bf666ddb615..f74796241c212d3bab014706288e0d91c985447a 100644 (file)
@@ -144,7 +144,7 @@ static void coroutine_fn vu_blk_virtio_process_req(void *opaque)
             break;
         }
 
-        int64_t offset = req->sector_num * vexp->blk_size;
+        int64_t offset = req->sector_num << VIRTIO_BLK_SECTOR_BITS;
         QEMUIOVector qiov;
         if (is_write) {
             qemu_iovec_init_external(&qiov, out_iov, out_num);
This page took 0.029342 seconds and 4 git commands to generate.