From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11022092.outbound.protection.outlook.com [52.101.66.92]) by lore.virtuozzo.com (Postfix) with ESMTPS id 1E9A380266 for ; Fri, 4 Sep 2026 15:33:28 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=e52gd3RbFYt0XqMZkNfr0pIc6MZ+Gc4PaC6IPpcur38xCIaMV7Q0/dJHZOiaRRi9dym9HOUhURzkNZz7hdiXiqO9OsIyqUARKSFwIfjNyexr5ZtTGF+x5hAScBfPqz87US0IS+S9eeWLqeC352sCLuOUuNzgoiJVezL9S76XH2I35gh5kbPG+dZLOZoSOhCSEdZHRgphLXGc4cjPU3SA35CzPCeWAqGdbxuID+9Y4pyunFk6bb68rrGeizoaWqaBAl8gotLDDbBOLMvtkLIhYlsNx+dZEYA2JF5e2qGzt4E/kkqmc26a5t/PmTOrId2PYgWkIA1EQVEGO/Ws+xXhLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=18wIoRM99AVAdefjGAKq+6H+IgkaoiXkwXo1vcJGxR8=; b=kMYCezH67BgF2E7cvf7VLuBj5dY+N2AeWisSS6EgTrW2kBipgRCnOeIFxfriFj1vA+iWqc6KkQfHSqK1UMadfL3KJ+ctl8S0AseNiTWRS0506h6vdsvCNBunzkBiYkCvZ7vcwkYP2DxF4+XbMqLhp+qqFAmTgHtN+AplN+PHueLd/5QBxtClBgGLUwH5P6LNPO8FXS7UIqN3Apuh/jvSuN37QCp8abbr3AYBfNZVAdCNHJ+x4+JN46qLclJL6Wo2lGoBonKh3PnGY81aHgF/0e1Xlzu+wFGNjojEXSIkt55EGl0Xt3dLeizqJnySs2PM5fEkb1+EQZGz16GnJqStHw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=18wIoRM99AVAdefjGAKq+6H+IgkaoiXkwXo1vcJGxR8=; b=ZQWU//kdigWSAmLD6/e44TXaV1r2cpBHMxU1apfLkBlnCf0U1WCN2dzpuQ3e7yuUVjtZK5bnCoogiIumFluuydFXnQW1WdlPhHwfkEriczDpa7wqXWLgGVUDotg0OrhlLvzm5lEtpbfJGTQKaQmOAKNJZlL+xcx1oK3ADv9AlRhD+TFgR76OGwUgqm382s9SI5Rq5UfLNoky6KyYqgu9Zo+kJb0mfOKK4lgKvPfarqNrEQy4Sg3LelyKpC7d5QQaFcQoHli3AzwSbZDJN2F2Jag6qCz/VMq+D5L2QD6EIAuBjoDfXp7DuztXm6dsRIaFhZEKqipV5eN6ZkRMvNYdMg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by VE1PR08MB5678.eurprd08.prod.outlook.com (2603:10a6:800:1a0::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Fri, 4 Sep 2026 15:33:25 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0382.007; Fri, 4 Sep 2026 15:33:23 +0000 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Subject: Re: [QEMU HCI-8.0 PATCH v2 2/5] vhost-blk: change backend setup From: Andrey Drobyshev To: Andrey Zhadchenko Cc: svt-core@virtuozzo.com, den@openvz.org, andrey.drobyshev@virtuozzo.com In-Reply-To: <20260904132155.180581-3-andrey.zhadchenko@virtuozzo.com> References: <20260904132155.180581-1-andrey.zhadchenko@virtuozzo.com> <20260904132155.180581-3-andrey.zhadchenko@virtuozzo.com> Date: Fri, 04 Sep 2026 18:33:18 +0300 Message-Id: <178853599893.728973.15714535938820004430.b4-review@b4> X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR09CA0127.eurprd09.prod.outlook.com (2603:10a6:803:12c::11) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|VE1PR08MB5678:EE_ X-MS-Office365-Filtering-Correlation-Id: 76928ed0-e042-4155-4183-08df0a99db3e List-Id: svt-core@virtuozzo.com X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-Transport-Rules-Loop: 1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|52116014|6133799003|5113699003|18002099003|22082099003|56012099006|10067099003|4143699003|38350700014; X-Microsoft-Antispam-Message-Info: dFsdRvO8XJE2U72+xCL8JSx7MGYdB1zXQ2ysYA+5wFxPrqzkhZgI7nceNU4NYIZhT4rv3hj7262zmz2y3uyY4wNcmD2m9jBK3a8JZqMgJTM0G5LptMfpWHcOFT9S8IAOHBulE1Vx8W5hStxT5Obr91jbwS7INV1Y4hBjLvgBHDo+oxOnLkbk0Pew0znkQVbyhYp/31gMoLO7rRP/KFdqsSefXbw2OnlfID6yuQCOdmBVLa2j7YjdmD6ip+oZ3D4O8YBPipSPMNvA7XyFQoCSfACx3AOfUtaIWPbt+QZ01XS/tTkCamSY9XX7WakpyWa8YwM43fHf22aIDOrmxTgXqwagU5u9pjBBXkBj1pPxa/Cpu0upa7jYvdZ5gWb1t5kiniXEPgchP3wcNmbD9bTjrYuPk1Ar/0VpMnPUtmbfRCy+BdmaF+EQRgBWK0q2XMOqNvw1pdV5wYSOhj29SzpS7ku3Cu3eLDoZMX0NfP1TmQJ8j8X5YMLnyvrxSQovnNnlL6SU6044n9ScJMTfJtDpNx2krZ7fotnYaM+t+E1nwrsgdBgE/JKdeK2OMmGyPPm7800WhlkSzbAIfa1lu18oRN11o68QLejEnhFRzLPJBNuGYlYrJ4hiA05PrbyCBzCfbHYiBwkmwGiFFMtiYf8BoT5nmAG8eBXrTQrYmFcFtTaDRPt1wCzNUOvhThBmM6s4f1Qjnv8ocmeBBTmKfidM/kGZdjIapqigXfLHJVozZA8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB10656.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(52116014)(6133799003)(5113699003)(18002099003)(22082099003)(56012099006)(10067099003)(4143699003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TTA5WkJUNzJqSVFHRHJsNnR5SXB1L3ZpZzMrVWR6WHRuMEpTeDYvVVQ2Vkxu?= =?utf-8?B?YitsNDVialJiNmp2M1EwTTFFbWdhL0ROVlcvWisrMWJJWkxqRCtjNHRTMitL?= =?utf-8?B?WmFTUksxb2xKdzBuY2lwSktRN3JtQkxJUll5UDUrNkY0Q3pvRUNaa0N6RVp6?= =?utf-8?B?eHpvdzdhSFhRZTQyUWFsc0N3cFV5NG1Lc2FDS2l3a2ROMFJ6aHZDU0tqUWIy?= =?utf-8?B?T3JVRVVLWDAwdHJaZlFHeVBoSEFTcS9URjMwR1h0TUdONUZZdGVSYWtTZHp0?= =?utf-8?B?dytRZXRoUXJ6WWdLV1hqVlREeGRRV0tYOVhYUlU5SHkrV2s4Tk41UlgxRytH?= =?utf-8?B?UXZpNTY1MkY0bytrQ3ZRclZkMHlzYWd4c2lJbHpRWXYyN2hGaElJaXJPaC9F?= =?utf-8?B?WG9jNm1sc3d3MjBFeCtlaUlKNnVtU01vbStvT2pZcFd3Z2R5NE9mMWxPZVhK?= =?utf-8?B?blFqdVkya3ZEVytBYVUvcTlwcVlDT2RZOVFiWnVGc1hPaXBQUEdTdFFTeVFX?= =?utf-8?B?a3pZZW5mUjI3Yzd4Q2trRXFMR21oM2QwVUxTcDlZV0dXbmN0N2lnYmkweHU5?= =?utf-8?B?cmFuUDdXZzUvUFBRY1I0ckQ0WUQ5Y1dEeThNL0RUOGpQNHFDWHFCWHJDYUZY?= =?utf-8?B?VlM5TWRXai9MRnhaMlVnZWxTT2x2YkJ6MkFxeVh1WXc0bmIvV0pJWDRsV3NH?= =?utf-8?B?YlJJeUVkN2NoOFBLRkZWNmZWY1lvRTNNaG85bGxRdW5TVEFPcmd1T3UwRlpG?= =?utf-8?B?cWlDUUJDOHdsb25aVVlLY1dWL1pZdVdBRWp2Wk5uUmo1dEw2WnlNQ20wanlx?= =?utf-8?B?UFlST0RLYmhYTG9ONGZZeFdjYnZnQWZoc0NoNkdFK3RpYjcyR09CZFo0N3la?= =?utf-8?B?MEY1dDVSOE5rVmZNVUZYUGVwOTI5ekt1SXFUVE9aOFowQ3VPVUVOWjR5bWFp?= =?utf-8?B?Y2hWS0txZDBBbHRZc1JSRDhoMEk2bTIxOTFwSlNSOWcxY0RtMGx2VHRwRkFP?= =?utf-8?B?V3QzOHIvQ2dkYklCLzRVbXptZUhKd1A0emgxRklCZklyMUxDT1lSRnZSMXRk?= =?utf-8?B?Ynozem9uekhKcjJTczhyK3JWMHp5MmFsNURWV2Y3eS9hNE9xTjZBSGZZZlVI?= =?utf-8?B?YzZCb2hLT2FFZzZBa2VoSmt6dWFVOUlDQTFvWVhlK2tyRis2Vnl1V21xcHJE?= =?utf-8?B?dW1zaHV5dWMxYnNMNlRWc3NIVzg2Uk8yZGtKQTlmbDBZczF1cFNEQnlnbkhY?= =?utf-8?B?QXl4YkF6ZTM5WUttaE5VUFhhOHR6a1dvWmk2b0IxRW04YVdVbXlGbSswdUVK?= =?utf-8?B?TXROYkNnZjZhNE5yU0FmQUJBYmRVZ0wxMVE4ZjBabFUxTFhvTWpBZGlORFVr?= =?utf-8?B?NjAwVWlyUG5DNVVObFhDdzlOVGVmOXY4K2JwbWdMSmpkZkNPTzV1V1AwOUs5?= =?utf-8?B?Qy9GSnVPRFhGY1J5aE1zQWhhcnBzb3pNK3RPTjdjRHRtWGVaT0pGcm5hV2tP?= =?utf-8?B?czMxZmNOVE9vMGhJcjU5NzdvVWlHb2dpNEVKa3NIOHZ3eFNjOExWbGxwY0Zz?= =?utf-8?B?T1NWbmpJMWc0SDVSL0pmTXFmdll5MnF3SS9nL0lLQzA5MVppbWI0cUFtY1J1?= =?utf-8?B?UUFoNjV1MWR2UEc0S21xeGFiSjhrRUwwWUFJdDNXLzF6c0VLNktPYVlHblV3?= =?utf-8?B?emt2d3N2MHowRmRGUW1XRTh4UHF1K2o4Y0F5eGF1bTlmS0R1ZjNTUFdzanQ5?= =?utf-8?B?OUluenJUQ3dUTU9pZ3JHdzFPR2Q1LzJFaE1MK2hkRG5NSWZHT3hBdnljUHNE?= =?utf-8?B?WkpKWHQ0WU5UY3lHSUUvQWFONWRZeUNoWGh2VzNMM1VndDlIVkRuZ1VweTNY?= =?utf-8?B?UjRZRHJUSVVMaElVVlBSS2JVb2FhRlYyT3cvVHdIREVJeC96YmFoUUlOelkx?= =?utf-8?B?azZrN09xYTBWbjZDSExDRUY0dVJLSmpZNXF0ZE5UVVRMN1IvYktmbi96YXBB?= =?utf-8?B?dmRtalQ5R1Y2MWRJY0RoUHV5cXhpbEUwdmF1dVo5cDhGTWU3SS8zRHpPTDBN?= =?utf-8?B?TTRBdVJhbExDb25hd3VQRjBJelFMQkFIVHhOc0dkQnlqMFhPMEFFQkEzUjhx?= =?utf-8?B?cFZEY3J1U25mVW8wcW5oVFhKNFd3cFREdVpPS1JYWjlnbE1tL1FMZGN6RDR3?= =?utf-8?B?ZGUrQzRDalczQVZ4N25ieXY2ZlZiZlRJRVVyaS82bDJnd3BFaTZGY042REpP?= =?utf-8?B?VUUyNjRCVFd3dEdjREo0ekFDUEJwYTM3dk5IaVRSc2VvVjNTMDNDb20rdTZW?= =?utf-8?B?RHhCY1YrSUtRd0hmYzN0L1pSL01JQ1U4MDBaaHZKc0hyMUY2OFR3M3p4dTh3?= =?utf-8?Q?LR9TCJWCYDIFrDwU=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 76928ed0-e042-4155-4183-08df0a99db3e X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Sep 2026 15:33:23.5654 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bF5nkC7Th4EvnggRa6gT1QM4/pps7ME+Ic0NE9U25VX28UpctvPHqSbxkhRzpTL6OetzN/PTEW4GlM/Dj7qjFVW6h7gZ1+4VjLgQpOjaNBs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5678 > Previously we used very ugly and incapsulation-breaking assignment > fd = blk_bs(s->conf.conf.blk)->file->bs->opaque; > It is wrong in a many ways, so let's rework this. > > Patch changes default `drive` to new `devpath` option so device fd > is managed by vhost-blk itself. Unfortunately this way we need a > bit more preparational work: finding out disk length, etc. Don't > be too broad and just do the minimal work. Drop the generic block > device properties along with the block node: the kernel module > does all IO in terms of 512 sectors, so simply report 512 byte > logical/physical block size to the guest. > Also we lose resize, as this is tied to the block node, which is > now have no place in the setup. We will add this in the next > patches as well as RO mode. > > https://virtuozzo.atlassian.net/browse/VSTOR-143437 > Signed-off-by: Andrey Zhadchenko > > diff --git a/hw/block/vhost-blk.c b/hw/block/vhost-blk.c > index 9bd49fef2da..24f4fbe2b68 100644 > --- a/hw/block/vhost-blk.c > +++ b/hw/block/vhost-blk.c > @@ -24,23 +24,17 @@ > #include "system/system.h" > #include "linux-headers/linux/vhost.h" > #include > -#include Nit: next patch brings this header back, just keep it here. > -#include "include/block/block_int-common.h" > #include "system/runstate.h" > > static int vhost_blk_start(VirtIODevice *vdev) > { > VHostBlk *s = VHOST_BLK(vdev); > struct vhost_vring_file backend; > - int ret, i, nworkers, *fd; > + int ret, i, nworkers; > BusState *qbus = BUS(qdev_get_parent_bus(DEVICE(vdev))); > VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus); > char serial[VIRTIO_BLK_ID_BYTES] = {0}; > > - bdrv_graph_rdlock_main_loop(); > - fd = blk_bs(s->conf.conf.blk)->file->bs->opaque; > - bdrv_graph_rdunlock_main_loop(); > - > if (!k->set_guest_notifiers) { > error_report("vhost-blk: binding does not support guest notifiers"); > return -ENOSYS; > @@ -92,7 +86,7 @@ static int vhost_blk_start(VirtIODevice *vdev) > > memset(&backend, 0, sizeof(backend)); > backend.index = 0; > - backend.fd = *fd; > + backend.fd = s->backend_fd; > if (ioctl(s->vhostfd, VHOST_BLK_SET_BACKEND, &backend)) { > error_report("vhost-blk: unable to set backend"); > ret = -errno; > @@ -208,29 +202,69 @@ static void vhost_blk_vm_state(void *opaque, bool running, RunState state) > } > } > > -static void vhost_blk_resize_cb(void *opaque) > +static int vhost_blk_update_size(VHostBlk *s, bool *changed, Error **errp) > { > - VirtIODevice *vdev = opaque; > + BlockConf *conf = &s->conf.conf; > + uint64_t length; > + > + if (ioctl(s->backend_fd, BLKGETSIZE64, &length) < 0) { > + int error = errno; This is redundant, error_setg_errno() preserves errno value. > + > + error_setg_errno(errp, error, > + "vhost-blk: unable to determine size of '%s'", > + s->conf.devpath); > + return -error; This is wrong error handling. Let this function return 'bool changed'. Then callers of vhost_blk_update_size() should check whether Error **errp was set to smth, and either process the error themselves or propagate it further. That's how it's usually done in QEMU codebase. > + } > + > + *changed = s->length != length; > + s->length = length; > + conf->heads = 16; > + conf->secs = 63; > + conf->cyls = s->length / BDRV_SECTOR_SIZE / > + (conf->heads * conf->secs); > + conf->cyls = MIN(MAX(conf->cyls, 2U), 16383U); > > - assert(qemu_get_current_aio_context() == qemu_get_aio_context()); > - virtio_notify_config(vdev); > + return 0; > } > > -static void vhost_blk_resize(void *opaque) > +static bool vhost_blk_open_backend(VHostBlk *s, Error **errp) > { > - VirtIODevice *vdev = VIRTIO_DEVICE(opaque); > + BlockConf *conf = &s->conf.conf; > + struct stat st; > + bool changed; > > - /* > - * virtio_notify_config() needs to acquire the global mutex, > - * so it can't be called from an iothread. Instead, schedule > - * it to be run in the main context BH. > - */ > - aio_bh_schedule_oneshot(qemu_get_aio_context(), vhost_blk_resize_cb, vdev); > -} > + s->backend_fd = qemu_open(s->conf.devpath, O_RDWR, errp); > + if (s->backend_fd < 0) { > + error_prepend(errp, "vhost-blk: unable to open backend: "); > + return false; > + } > > -static const BlockDevOps vhost_blk_block_ops = { > - .resize_cb = vhost_blk_resize, > -}; > + if (fstat(s->backend_fd, &st) < 0) { > + error_setg_errno(errp, errno, "vhost-blk: unable to stat '%s'", > + s->conf.devpath); > + goto fail; > + } > + > + if (!S_ISBLK(st.st_mode)) { > + error_setg(errp, "vhost-blk: '%s' is not a block device", > + s->conf.devpath); > + goto fail; > + } > + > + if (vhost_blk_update_size(s, &changed, errp) < 0) { > + goto fail; > + } > + > + conf->logical_block_size = BDRV_SECTOR_SIZE; > + conf->physical_block_size = BDRV_SECTOR_SIZE; > + > + return true; > + > +fail: > + qemu_close(s->backend_fd); > + s->backend_fd = -1; > + return false; > +} > > static void vhost_blk_device_realize(DeviceState *dev, Error **errp) > { > @@ -239,13 +273,8 @@ static void vhost_blk_device_realize(DeviceState *dev, Error **errp) > VhostBlkConf *conf = &s->conf; > int i, ret; > > - if (!conf->conf.blk) { > - error_setg(errp, "vhost-blk: drive property not set"); > - return; > - } > - > - if (!blk_is_inserted(conf->conf.blk)) { > - error_setg(errp, "vhost-blk: device needs media, but drive is empty"); > + if (!conf->devpath) { > + error_setg(errp, "vhost-blk: devpath property must be set"); > return; > } > > @@ -273,17 +302,7 @@ static void vhost_blk_device_realize(DeviceState *dev, Error **errp) > return; > } > > - if (!blkconf_apply_backend_options(&conf->conf, > - !blk_supports_write_perm(conf->conf.blk), > - true, errp)) { > - return; > - } > - > - if (!blkconf_geometry(&conf->conf, NULL, 65535, 255, 255, errp)) { > - return; > - } > - > - if (!blkconf_blocksizes(&conf->conf, errp)) { > + if (!vhost_blk_open_backend(s, errp)) { > return; > } > > @@ -311,8 +330,6 @@ static void vhost_blk_device_realize(DeviceState *dev, Error **errp) > goto cleanup; > } > > - blk_set_dev_ops(s->conf.conf.blk, &vhost_blk_block_ops, s); > - > ret = vhost_dev_init(&s->dev, (void *)((size_t)s->vhostfd), > VHOST_BACKEND_TYPE_KERNEL, 0, NULL); > if (ret < 0) { > @@ -334,6 +351,10 @@ cleanup: > close(s->vhostfd); > s->vhostfd = -1; > } > + if (s->backend_fd >= 0) { > + qemu_close(s->backend_fd); > + s->backend_fd = -1; > + } > for (i = 0; i < conf->num_queues; i++) { > virtio_del_queue(vdev, i); > } > @@ -349,6 +370,10 @@ static void vhost_blk_device_unrealize(DeviceState *dev) > qemu_del_vm_change_state_handler(s->mighand); > vhost_blk_set_status(vdev, 0); > vhost_dev_cleanup(&s->dev); > + if (s->backend_fd >= 0) { > + qemu_close(s->backend_fd); > + s->backend_fd = -1; > + } > g_free(s->dev.vqs); > virtio_cleanup(vdev); > } > @@ -381,10 +406,6 @@ static uint64_t vhost_blk_get_features(VirtIODevice *vdev, > > virtio_add_feature(&features, VIRTIO_F_VERSION_1); > > - if (!blk_is_writable(s->conf.conf.blk)) { > - virtio_add_feature(&features, VIRTIO_BLK_F_RO); > - } > - > if (s->conf.num_queues > 1) { > virtio_add_feature(&features, VIRTIO_BLK_F_MQ); > } > @@ -403,7 +424,9 @@ static void vhost_blk_update_config(VirtIODevice *vdev, uint8_t *config) > int64_t length; > int blk_size = conf->logical_block_size; > > - blk_get_geometry(s->conf.conf.blk, &capacity); > + length = s->length; > + capacity = length / BDRV_SECTOR_SIZE; > + > memset(&blkcfg, 0, sizeof(blkcfg)); > virtio_stq_p(vdev, &blkcfg.capacity, capacity); > virtio_stl_p(vdev, &blkcfg.seg_max, s->conf.queue_size - 2); > @@ -411,7 +434,6 @@ static void vhost_blk_update_config(VirtIODevice *vdev, uint8_t *config) > virtio_stl_p(vdev, &blkcfg.blk_size, blk_size); > blkcfg.geometry.heads = conf->heads; > > - length = blk_getlength(s->conf.conf.blk); > if (length > 0 && length / conf->heads / conf->secs % blk_size) { > unsigned short mask; > > @@ -430,7 +452,7 @@ static void vhost_blk_update_config(VirtIODevice *vdev, uint8_t *config) > } > > static const Property vhost_blk_properties[] = { > - DEFINE_BLOCK_PROPERTIES(VHostBlk, conf.conf), Removing these props currently results into: error: Failed to start domain Property 'vhost-blk-pci.physical_block_size' not found I understand we also patch libvirt so that it doesn't send those block_size props, as well as write-cache etc. Let's mention that in commit message. > + DEFINE_PROP_STRING("devpath", VHostBlk, conf.devpath), > DEFINE_PROP_UINT16("num-queues", VHostBlk, conf.num_queues, > VHOST_BLK_AUTO_NUM_QUEUES), > DEFINE_PROP_UINT16("queue-size", VHostBlk, conf.queue_size, 256), > @@ -475,6 +497,8 @@ static void vhost_blk_instance_init(Object *obj) > { > VHostBlk *s = VHOST_BLK(obj); > > + s->vhostfd = -1; Nit: ideally belongs to patch #1. Not a big deal, but if you do a respin - put it there. Andrey -- Andrey Drobyshev