From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11022141.outbound.protection.outlook.com [52.101.66.141]) by lore.virtuozzo.com (Postfix) with ESMTPS id 975168015A for ; Tue, 8 Sep 2026 12:55:15 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dPBW8jWqT3f0iApW3aFyyq1og/OYg1OPGm25ENhQHA/+nRWf62xqSRRbXkPxRGywFSeCLuSxyVfdlUJVIyNwlHSDdjbB1ZSY+EiBhq9lt0QT/DbCFuiirANW87waHof3cGKBct1OKePXbqakwwbQiWdhPDNn/lnxu7cgclh7OqFqCbstlLjRMRK8au0nAfdZKM4SjmGF3DOQyHZTK2Viwwt1usxP+csj1hCNSxrjAlaEHwkpQUNIxQfiDPdIticWnUh5YSN8/KJpPtcyb46mtPfoPFM8iX1oy05H8jDyQC0iA/ksHqf4uNyeQpYD1Zrk4eCtz3i8v+3Jw6lKjwxxxQ== 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=RxAmfFksro5ZuNOLBFTZXG+r8Xtra09vZ4nZHL5oWNQ=; b=xrEv323OSEj4VZnmS9pxeg94bGo2qb/wgOOy49Mj+Y0sJmj6y77EvEIVu68Ij92G0YmVEtsN2/j6DSeZq9cM0CRS+EZ2xN8cfK+Cl1Zw/762LpuQGc5OjT0IMLq3wIkbZ44d29pgQgRiLn0rP2AA7iKOcycg5GdadK3jYgCUHoD8wy5yRDCg1DI45x7Ax9LbFWizKyiwQNWHfME8y/Kn6PN7D5KktWbPO6thjdtL1PZJAb5Ko/US5/d8vv6WZF/uzw8V9fZWrlNQDD2bYM6rRMQTQsamds+TNB5LU52+VreCthzK/pu4cFHw1ssssPnJhtLQlB6vsSqy7ApCWHUY4g== 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=RxAmfFksro5ZuNOLBFTZXG+r8Xtra09vZ4nZHL5oWNQ=; b=LzoYzFkBEL75zjbRcQFB3gnSHNdsPdrc7/rwuA3L+ngwp6KhEhIHN3SBXW8YXSYD7/UXrJPJTbi7D7TD+JkXcHxIcr/Q6+91D1HH1otLoUijZ8OVvn3iWEipbLDb8VAbo1qDi4vJq/mYQ1pHqXiEtA564LWfL8y1O2b6wNfaksj67tT6mF0+y3NuFKup4OzQzzUBc4Nzs/9uExtEZIu6GB6aRVhP5b5JyU5tViL8oS+24a57bmIxVs46Ca6T+ZOYHZy8USgfrgJnsDUJn/usGVobKAcF7TliKUon63Y6gdDKVg3FhYQeNyhkM6AionpcMLK/xPYOiYb+tDhaHx4NSQ== Received: from DUZPR01CA0069.eurprd01.prod.exchangelabs.com (2603:10a6:10:3c2::12) by PAVPR08MB9508.eurprd08.prod.outlook.com (2603:10a6:102:312::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Tue, 8 Sep 2026 12:55:12 +0000 Received: from MAD0EPF000008B0.eurprd04.prod.outlook.com (2603:10a6:10:3c2:cafe::17) by DUZPR01CA0069.outlook.office365.com (2603:10a6:10:3c2::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.406.6 via Frontend Transport; Tue, 8 Sep 2026 12:55:12 +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 MAD0EPF000008B0.mail.protection.outlook.com (10.167.241.132) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.406.5 via Frontend Transport; Tue, 8 Sep 2026 12:55:10 +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=RxAmfFksro5ZuNOLBFTZXG+r8Xtra09vZ4nZHL5oWNQ=; b=gp1wWCdfZPnb NCSvcGJSvXwSRu8qr2VTXgNL0jNJ7ILk5n3IHykprB9WnbEGREy2iR0fWmObRA6EHN5MEJjMOaZpx RMAjeY50ba84yR05XlvskPcI6gHsbjFur5NlFcQUg5bwus4Ka5FWgURMbNZL+IFXTnOx+8CPrzptH adQTIb9An8O3ioEpLFra3cZH59AczJORklcmjhfRHSj2GjRH9gwBmemi+HWJQsBGnRsC0uBRyxtCS Jj4/kVFNusgAPxB2Cm0CFhWMZiL9wO/mdQo3BZZfjbVINz+3pT+dD3Qdk/EJyCI7WF9MjhVEvpqV+ +4SQZWDMu0wj8VX9UgYZqA==; 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 1x3vJP-009opv-1E; Tue, 08 Sep 2026 14:54:59 +0200 From: Andrey Zhadchenko To: svt-core@virtuozzo.com Cc: den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [QEMU HCI-8.0 PATCH v4 3/5] vhost-blk: add read-only flag Date: Tue, 8 Sep 2026 15:52:06 +0300 Message-ID: <20260908125208.278402-4-andrey.zhadchenko@virtuozzo.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260908125208.278402-1-andrey.zhadchenko@virtuozzo.com> References: <20260908125208.278402-1-andrey.zhadchenko@virtuozzo.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MAD0EPF000008B0:EE_|PAVPR08MB9508:EE_ X-MS-Office365-Filtering-Correlation-Id: 2474b283-18c4-4777-f281-08df0da86a7a 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|82310400026|36860700016|376014|23010399003|5113699003|10067099003|18002099003|22082099003|57112099003; X-Microsoft-Antispam-Message-Info: +mRHsNnOAQQcNmYYxhwOQypJ+8ijze9nAt+w1p83ErPTXRu7tcsdLqyDDNsGU1+3QI/NSoam8anooSx18dd6EgrE0IBJ9uDZydCFewuCWV8ykuCzKUbqsoPLzlGQGaWiLJYitqILqHOM/yOHtrLvrqujFV3L+9r6bbS7J8jlbXWlQjieg7bJnvxkFS6paIB8fgwqIi7tmZpiDgJajtlDdnkGnOolDpgz2Xh4FNnySJuyojsCRW4YDsplkgHB4LVHqhaZIFhy7FZerf0idlweuo1YH4e5TJ1zpykqh60Y1shAGIhwKVtQNtL4d78Kxt37QmyeKyqb3z9Ph7DzunQRS9Ci1IdtTNWBuNWj8GbxQYmuoab6hAvt0KFiL4n4LMdryYCkuvyynr0kvQM/d/nOvNOb5uEZ0gbQ0fLbZROcIWBCflkNraI9Ez7wrmbwFxFiyQ2TCayGDmZidEDsHf7SkroAA6O8u3pSv1wNCphxk2g2Yaqo80iMZ6uMPqBpZvWqebXYNS8hnSf/JAZRCQ2cW3HaYP2vABnzHmniT1aymY40ghVwCNWf5VDAwYi2prWOfRz33iJrtITXQzAMezJZSeQf/f5ZVn/qgAiBJpxW8p3SABxBR7HR0g+CLzHhUSQrr//l/K9L9dckIbcJnBJeJXLM+InofiOcFlAlDb3Qr4fymhXhTbMFjO6qB+H/Vx8vHz7WZWNJ6rLm1Z5pxJkOzx2VObn9iWjMUo9vUkC0ihs5LTFS7VdqIpUBhfj4wYVYH5pGyJEz944ZeLXbZNmj2WhR5H+eAwK4hBRBRS6QMUhy0je3R4Qt6FgEwO6070+/4EpkAWW0XDaQh5ldgF1jqJ8mfvVOzbzCMPxmtKiVUO9wfmmhbnLnTxyE1rNPGqS9LeZ7O+8Aqis2gtqupvNgOXuySjJQjU899yM/qQ3MNC4= X-Forefront-Antispam-Report: CIP:130.117.225.111;CTRY:CH;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:relay.virtuozzo.com;PTR:relay.virtuozzo.com;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700016)(376014)(23010399003)(5113699003)(10067099003)(18002099003)(22082099003)(57112099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TqU0sd4HMoIE3HWiQ/g4qWYvxt+Bj8f1+frjVPBk2lD771cPpSO80QRzBgjzRRIv6bDprGarjPSWMT0a2cv31SRe6/uziJQjHlE+V6W0QLRr2oYoU6JiiVEAAiKfTJR358VUNK+oV6jdcQYPb9n1jrB9ZXZnGA3xoByj6HAcuX3nysY66lH12mq5+3GQDvRPFpJ/DX5M2lx/zDshXeBfS5+YE/k70ftti7A1fkM6HdetXcC+p1LcZSV+rZqZygtnPG4tiy4Azq3pHAVtcLjD5d2sgxWs1YHqunz/GnQRaKR7Uu0b4rGwf1ZavEHtxvx31vCLjXCh852BipfqZSwid/CgkUdsD5HWiQmWlq23+wkclZlELvIplwDayfF9qHKnS9KP3W3HDpme43Nj68c/Gr4s8O588qODjVt1ah3EubDst1vjKw4NG0jfVlqoECGI X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2026 12:55:10.1521 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2474b283-18c4-4777-f281-08df0da86a7a 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: MAD0EPF000008B0.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB9508 Also compare BLKROGET with the selected mode and reject r/w if needed. https://virtuozzo.atlassian.net/browse/VSTOR-143437 Reviewed-by: Andrey Drobyshev Signed-off-by: Andrey Zhadchenko --- v2: - check BLKROGET only if rw was requested like posix_file hw/block/vhost-blk.c | 25 ++++++++++++++++++++++++- include/hw/virtio/vhost-blk.h | 1 + 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/hw/block/vhost-blk.c b/hw/block/vhost-blk.c index a517c5e22b..dc21f9fbbf 100644 --- a/hw/block/vhost-blk.c +++ b/hw/block/vhost-blk.c @@ -234,8 +234,9 @@ static bool vhost_blk_open_backend(VHostBlk *s, Error **errp) ERRP_GUARD(); BlockConf *conf = &s->conf.conf; struct stat st; + 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; @@ -253,6 +254,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; + } + } + vhost_blk_update_size(s, errp); if (*errp) { goto fail; @@ -411,6 +429,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); } @@ -458,6 +480,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