From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11022102.outbound.protection.outlook.com [52.101.66.102]) by lore.virtuozzo.com (Postfix) with ESMTPS id A78A1803C3 for ; Fri, 4 Sep 2026 13:25:00 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HABwcQ/n8LquQrFm849+TUxh1Z6Me6m6RCPFF2DHDy0IKoMVauChwEiYfRwWuM73xIKno9hqnZNAHltSYrutRmEFUPJTLDleK9quUhIc54EE01LZ1YLF9H8wBWwDaMQydw2EkyAw2NcjL3ELbsjQr7W0XDeaijdkb67GJfe1pjZYCItvWS6sLWhAL2kKkLaIYyK216V4xLQopUtH8fPSzB1uqucQDKFBorhPqwQzStk0ZsotJNiwfXJV7wWXy3Mm2FckvuByz7+/FQZOlD8K7uH8cTUs3/DGMmv2vkS29mczSbTF6jt5xsizeMXWhBGyQsuuHx251/3V2CxfWy+KXw== 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=IiS3CGM3Y1qrIHC4/3RGxQ80h4yeYs6sLer/eF0bMxs=; b=wr2Ik7bAQvN/mccRSo1im++1M5/Kpz/ZiFqx+Wip0LNY3nKS+BXthqEnJ5UZJJP9Oom0hOS7xUNjAe9O+A6g1kWaIT5Yq0yzPj4RtPYw/zCFfBdXQioit5njFOT9AkWIfUI1KuhZAUHTRhOSXqQCxZE1BLlww72THa865E/RcaZfAVc91nGEs66yL8rd6x35SkqDhPM0JySD7D2spTMfdB0FmtuWS35wRCRi1wx25noDjRuqxkkMu39xW74gX2Am4tsYHQUXXgBU7S3smxCkXUsE/adIENXDZnHiHuj7SsdQzl96BfN3Qcc0XmNsi9WfrkWt9tkr6pO0hb4xIkAZTA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 130.117.225.111) smtp.rcpttodomain=virtuozzo.com smtp.mailfrom=virtuozzo.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=virtuozzo.com; dkim=pass (signature was verified) header.d=virtuozzo.com; arc=none (0) 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=IiS3CGM3Y1qrIHC4/3RGxQ80h4yeYs6sLer/eF0bMxs=; b=c0Bhal0p3SQOFd+gIy+HMKm36/8gHpp6c8rFzJVr+Zrfbsxn25IPIU75TfIqTulDYXwVT0h7fPdecGJsz/qbR0Spnigz1Dfj3/p24ndXYUMF6IR7HhLSaiBMK8iI3KaJK2jPOv/2Ze4XcjuahVa3bFPVnQPVv7V7onzCn5XzV/my24dOHdW+CuvAPeq0GNcxE5IcoD80W9Qb+P761pX0ZzT0XJhkwSExeRWimCm6Xb2jCw2WtR4ueLx9nufezE4H500/uSMUyyo4N1KOSAmSc8/04GmGsDBK8kgi9plX7xM/ZGqCYR4RVG3KTuWalET7u5Al/TtrN1MdecLp5P3u6A== Received: from PAZP264CA0081.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:1fa::13) by GV2PR08MB11723.eurprd08.prod.outlook.com (2603:10a6:150:327::10) 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 13:24:55 +0000 Received: from ZR1PEPF0000E6B4.eurprd05.prod.outlook.com (2603:10a6:102:1fa:cafe::47) by PAZP264CA0081.outlook.office365.com (2603:10a6:102:1fa::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.382.12 via Frontend Transport; Fri, 4 Sep 2026 13:24:54 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 130.117.225.111) smtp.mailfrom=virtuozzo.com; dkim=pass (signature was verified) header.d=virtuozzo.com;dmarc=pass action=none header.from=virtuozzo.com; Received-SPF: Pass (protection.outlook.com: domain of virtuozzo.com designates 130.117.225.111 as permitted sender) receiver=protection.outlook.com; client-ip=130.117.225.111; helo=relay.virtuozzo.com; pr=C Received: from relay.virtuozzo.com (130.117.225.111) by ZR1PEPF0000E6B4.mail.protection.outlook.com (10.167.241.91) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.382.8 via Frontend Transport; Fri, 4 Sep 2026 13:24:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=MIME-Version:Message-ID:Date:Subject:From: Content-Type; bh=IiS3CGM3Y1qrIHC4/3RGxQ80h4yeYs6sLer/eF0bMxs=; b=iTdsF0lSTv+A rNSeDibddfzMFYAHPhYhR+rCpI6RcLsTbJjO5aGlC3Z40+hE8KMIUBP6CuMyb4qyueSERz1RNvnPj ooUT8ZsH1XjROfTL/UXoyma4nUma06AIb21gdsM3XHc0+ZlXTo16rD7BsWtfhjj3hwenaX1Hp/tMb 9XhC44d7uj88hTW1K5o/CzkSY8ywey2EAVy15/05V+yAGum5xLcNZ45TJ0PHUeMnDAy67+0+HTnMO hQYoAxJG5zXLDqh9+7nY36h8Rf7tRBkitbVRccJCOVe6YYIHYQ5sgR+kD6sQajOAGj0qWQlTuoxM5 1Mvzd1fUtrUIUX6z5FIthw==; Received: from [130.117.225.5] (helo=vz9-demens-1.aci.vzint.dev) by relay.virtuozzo.com with esmtp (Exim 4.96) (envelope-from ) id 1x2Ts6-004ouQ-0I; Fri, 04 Sep 2026 15:24:50 +0200 From: Andrey Zhadchenko To: svt-core@virtuozzo.com Cc: den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [QEMU HCI-8.0 PATCH v2 3/5] vhost-blk: add read-only flag Date: Fri, 4 Sep 2026 16:21:53 +0300 Message-ID: <20260904132155.180581-4-andrey.zhadchenko@virtuozzo.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260904132155.180581-1-andrey.zhadchenko@virtuozzo.com> References: <20260904132155.180581-1-andrey.zhadchenko@virtuozzo.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ZR1PEPF0000E6B4:EE_|GV2PR08MB11723:EE_ X-MS-Office365-Filtering-Correlation-Id: b672efff-2bca-4c93-33e4-08df0a87e877 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|82310400026|23010399003|376014|1800799024|36860700016|5113699003|13003099007|18002099003|57112099003|22082099003|10067099003; X-Microsoft-Antispam-Message-Info: Sxccn52JbCwiUVTQ83y0JlKpq017vR4np2dYk8Y+F9xzbNgS09ByakF1ekk0whYfiTgeh41WjToZoMQ7TRGnvCL/yqrmEMci574/S9w4jpaXusU3WXMvSRGQo1OMa8vHKLengPd5KYjzM7o+kNUbm4E4IvbkRF4lqHPNdi36Ire3AEveCpma/2LIk40IJV7QeEfCaHJW6CefE8NCwy4Oiil8ua2RXUJ3KI5YjR11MFeinKFo/egp/ez/bPZBC2XQHZ4Jh9oJXqCluO3bau8Vdiy5x7bPeswtwh24s5uU7D34Y/K/zb6l5D5fY841fTYVKLNeHsOl85njI2tbP0q9ZsbRDoDqZWAIsLtV7csWcXDHwOgjHMBWom87rIsuMmAKvxtx8En/38zZcyzPxveY+iJcdzeKC9HzbGWSzs3r57FAljyiPncAEHzasdfCfvAOuEu4nv0kOHinhL6a5+QrGFw4bHyIS/x76Cx1hlS4WgVxMJroHIBGv4SXbwkFVqpm1GBSzK5c5iDKNLvmQkDNZecmjlz1A5+zDbQa+QkIOW1l3A8hhHZnF6IFHWcZpIlLBZWSGa1HpbP4eO81fNsw2E+4P9XrIOXgwe5VtAGWQVspSbSEarUZsk1aojG582S7kWBCTBDHIrlTzFFI8By0i7NEb7zJX6Gz6fJaa1cQJ3grN5cWy2TC2hYkbprQzvZ2lAOX+BrPnrbp+Zz8UMQ6BaRfDIz8PSCNSaGg4aTotShvEZ7971wIbnJV0n90LO+4wuGQaftBgVUG61jROdRMKs4/VRxAsuGPnJUzBlY6D9O8y0wK/FC/Xqv+Iv6jTs6qbYGAtizFK3LIop5Z6PAmz2q4sS1iLO8uQoaFPzpEoxV2XeSEPy6BOy7xWNrdkNOA X-Forefront-Antispam-Report: CIP:130.117.225.111;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:relay.virtuozzo.com;PTR:relay.virtuozzo.com;CAT:NONE;SFS:(13230040)(82310400026)(23010399003)(376014)(1800799024)(36860700016)(5113699003)(13003099007)(18002099003)(57112099003)(22082099003)(10067099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +xzzt9RgopyKGCq+PDO4s45C2ApsgVPRVVn064sJcD+5dfHnypoe9hA+grzXGwYGpquYzID0XVnOfPUCqyxwCrB/PDvoTWWr6UU9A2VcymBso29JyfdUUljTJuHQ/0iL9/nI6F0pDyEYMgstWGI2PvGaVIN9cMxGr7i4/QlqTGgoRhTrEsdX4nKnT2S5Gh0YYs0YQFfyQ3d5V3a/BoTsNJd24zbvFThUJAyuL5h0XOn0uhLVSL6xJMM73KJYvvaom1Cq3HxoB48/b5qcH5Klp7OjBpVjV2OHlhHPK1/wWoNIvi+8aoQciKyLSk4RxV2KXBwOL0knOeofX4yykbjEvKeyqvw7djxebtEjn7VhDsbvFXWKeVfHyKLFoi2h4Ln1M94Nx+kC46qmh3Ody4YQmeVMVyD95bJnB8s8bqEIQHvvmV/1Z2nAZk/M/7aTIF5O X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Sep 2026 13:24:54.6195 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b672efff-2bca-4c93-33e4-08df0a87e877 X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0bc7f26d-0264-416e-a6fc-8352af79c58f;Ip=[130.117.225.111];Helo=[relay.virtuozzo.com] X-MS-Exchange-CrossTenant-AuthSource: ZR1PEPF0000E6B4.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB11723 and set RO respectively. Also compare BLKROGET with the selected mode and reject r/w if needed. https://virtuozzo.atlassian.net/browse/VSTOR-143437 Signed-off-by: Andrey Zhadchenko --- v2: - check BLKROGET only if rw was requested like posix_file hw/block/vhost-blk.c | 26 +++++++++++++++++++++++++- include/hw/virtio/vhost-blk.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/hw/block/vhost-blk.c b/hw/block/vhost-blk.c index 24f4fbe2b6..04a7013e52 100644 --- a/hw/block/vhost-blk.c +++ b/hw/block/vhost-blk.c @@ -24,6 +24,7 @@ #include "system/system.h" #include "linux-headers/linux/vhost.h" #include +#include #include "system/runstate.h" static int vhost_blk_start(VirtIODevice *vdev) @@ -232,8 +233,9 @@ static bool vhost_blk_open_backend(VHostBlk *s, Error **errp) BlockConf *conf = &s->conf.conf; struct stat st; bool changed; + int open_flags = s->conf.readonly ? O_RDONLY : O_RDWR; - s->backend_fd = qemu_open(s->conf.devpath, O_RDWR, errp); + s->backend_fd = qemu_open(s->conf.devpath, open_flags, errp); if (s->backend_fd < 0) { error_prepend(errp, "vhost-blk: unable to open backend: "); return false; @@ -251,6 +253,23 @@ static bool vhost_blk_open_backend(VHostBlk *s, Error **errp) goto fail; } + if (!s->conf.readonly) { + int readonly; + + if (ioctl(s->backend_fd, BLKROGET, &readonly) < 0) { + error_setg_errno(errp, errno, + "vhost-blk: unable to get read-only status of " + "'%s'", s->conf.devpath); + goto fail; + } + + if (readonly) { + error_setg_errno(errp, EROFS, "vhost-blk: '%s' is not writable", + s->conf.devpath); + goto fail; + } + } + if (vhost_blk_update_size(s, &changed, errp) < 0) { goto fail; } @@ -406,6 +425,10 @@ static uint64_t vhost_blk_get_features(VirtIODevice *vdev, virtio_add_feature(&features, VIRTIO_F_VERSION_1); + if (s->conf.readonly) { + virtio_add_feature(&features, VIRTIO_BLK_F_RO); + } + if (s->conf.num_queues > 1) { virtio_add_feature(&features, VIRTIO_BLK_F_MQ); } @@ -453,6 +476,7 @@ static void vhost_blk_update_config(VirtIODevice *vdev, uint8_t *config) static const Property vhost_blk_properties[] = { DEFINE_PROP_STRING("devpath", VHostBlk, conf.devpath), + DEFINE_PROP_BOOL("read-only", VHostBlk, conf.readonly, false), DEFINE_PROP_UINT16("num-queues", VHostBlk, conf.num_queues, VHOST_BLK_AUTO_NUM_QUEUES), DEFINE_PROP_UINT16("queue-size", VHostBlk, conf.queue_size, 256), diff --git a/include/hw/virtio/vhost-blk.h b/include/hw/virtio/vhost-blk.h index c194b421d9..c6646f5845 100644 --- a/include/hw/virtio/vhost-blk.h +++ b/include/hw/virtio/vhost-blk.h @@ -25,6 +25,7 @@ typedef struct VhostBlkConf { BlockConf conf; char *devpath; + bool readonly; uint16_t num_queues; uint16_t queue_size; uint16_t num_threads; -- 2.43.5