From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11021101.outbound.protection.outlook.com [40.107.130.101]) by lore.virtuozzo.com (Postfix) with ESMTPS id 43C718015D for ; Tue, 8 Sep 2026 01:07:53 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IlFJfRFLLh8YJoGuAGfyB0DeqJT4tTTcDm0VnDdoJuwdcMtjK0IsMUkLWlr57WE46EDYSNTCU30b5MIkumS+CND566iq37dQ+SZmQUVrZnIgpQaHvPZmxVO8+sgdLHK8iwCdSlT+nrDfkB4mQthi2MKSMTDj1CpQ7qwM//d8AWSdGA19bebKP777T6PGjDeIeESL50+MLXbDAaNhGyq+fvi5gIwzedrrmpkVpcTj6c/aY9nYKDzANfBS09QWQw4r33Pip4VAaz8AaTJfS47+DV3RUaFOaDPQEs9vezfKQdPa1Zv9Ph/uI+OVQSSG/2pI5bOSxw+v+EwMjoaaXCZm0g== 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=jKHcQ1+0QqIXGXp3e18tQjw+BetlUpTKSHkOEsVlr2M=; b=h8Q3vtZb9Hwyqp0n/2enllzDLZMqLyEj9fvpZa11hdlkIM5ZIAe2MGWQHyNH5TKMgt3GJZT52V7D/SGSl/IV7YhPExVq8pOxIBqeI3YdOOvmnEzFinyJ/SpnCtuNn1wSwxJPmYrIoe8rVfMwxTCHWTpkAZM2BlEqApBggzg3XT6YjqkdyuuHxxC5n5MQP4qoRLTvm7h5fFx3J1YblpNwOzfGP6yPjy5DUd3K/9G/h1y+PMoki3l1cXyidTbt/jp6YNuTtmaEBtgZmbqnYQ5/RnMzIMNPEqvKjinnvNYgAKDl5R9nkl8gRNP/GKKh1P3JURB41KtuRcHMGcLR9jjWqw== 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=jKHcQ1+0QqIXGXp3e18tQjw+BetlUpTKSHkOEsVlr2M=; b=OgiUG0ocwP0J7JmScbOfhhx2ri/z9qGavXUrpwba6x+AzlUiV4h+kqlXZrqNkjQQRYjvVvRaNjN6lruz9pBpCiKtWD7ZhAsTDGerpM98DrGOBG+Qvy8mMisAo8mUigmZWofRWOLurYvMRUPzIXANbrz912LH4V+0X/4qoyNWIZiwOsRRb976tOiq0Be9duYRDqplCUlY4yckCVYq5mwawxIxLrUal5Hp2ZFB3ftFYUemE65A3rcgzomAlPr0g+mqNeOcPJtaMNRcLJxWVGJMloHlCnwuXIzeF9LYKfoORC2N+qybF15oVn5FbcauERb1bexbMT0TakVOjjcnz86luw== Received: from DU7P250CA0018.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:54f::31) by PAXPR08MB6542.eurprd08.prod.outlook.com (2603:10a6:102:158::22) 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 01:07:49 +0000 Received: from DU2PEPF00028D0E.eurprd03.prod.outlook.com (2603:10a6:10:54f:cafe::5c) by DU7P250CA0018.outlook.office365.com (2603:10a6:10:54f::31) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.382.15 via Frontend Transport; Tue, 8 Sep 2026 01:07:49 +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 DU2PEPF00028D0E.mail.protection.outlook.com (10.167.242.22) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.382.8 via Frontend Transport; Tue, 8 Sep 2026 01:07:49 +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=jKHcQ1+0QqIXGXp3e18tQjw+BetlUpTKSHkOEsVlr2M=; b=IhGU0HLij3lo NqYcRcle/BFgbIk3yBZG7tHFfQtDPhIZa1qmKTb9kdK3LBklYCDPumZlOk690LfcqBD9ha9m2zQWS K0vNNr/oR9JcPrCM05Tm48DhwswhoOpva/BpEWfO4Ugyf3Au6QnOemEtWU00S7x6OyP7iisn1bM3J 8ZmXoTkxBaAABx39sfVGQ1xrFk8bVqNp4ETcC6es73E8Z+IZVo/ZHvDXIfhsQZ8Fd8t6HmhklRijc xjj/eITqZbBjUK4IEUsPmfdrTApvHyt+XDNzudSuf/9G7XGw5qQ3idXbh6MXi+YGrIf0kHpXx6B51 ++l9G10ZRtEX7JL62vpcHg==; 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 1x3kGt-00DU8a-0f; Tue, 08 Sep 2026 03:07:39 +0200 From: Andrey Zhadchenko To: svt-core@virtuozzo.com Cc: den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [QEMU HCI-8.0 PATCH v3 3/5] vhost-blk: add read-only flag Date: Tue, 8 Sep 2026 04:04:53 +0300 Message-ID: <20260908010455.249679-4-andrey.zhadchenko@virtuozzo.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260908010455.249679-1-andrey.zhadchenko@virtuozzo.com> References: <20260908010455.249679-1-andrey.zhadchenko@virtuozzo.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PEPF00028D0E:EE_|PAXPR08MB6542:EE_ X-MS-Office365-Filtering-Correlation-Id: aedfe159-d770-4745-d870-08df0d4599b1 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|1800799024|36860700016|376014|23010399003|13003099007|5113699003|10067099003|18002099003|22082099003|57112099003; X-Microsoft-Antispam-Message-Info: FWMFyLVYaWKJlHF6JPW3hMyC1AP2vtxyUFonD5oSLbpJqjepfE8ZyOuLVgoqyTA50H5CMkdp5XF3qN5dtNG4RXiqid6JL62sq8R0AcorptT2qKzIi5kr+wsxMMykQ3BJr/WNTE1v1qhxZ2YcwovhVy8tB2fjPmVrnvv0oCm6iGOSb4CsF05gMf5peAURdBzkLZEUSJer8xL3yJfKiJAMd13+vx51sE9tQh2oW+GXdRBIaDNXBhV+9MxiS/CwNYgfAkKBC0lwyycZVj8BaC3gHwa6blL19jJpbOIMldgNlW/yJm31K5z2Gs4DGkj5P2Eqj2z4TUtTizjZTJcZlSY6hzgVoEBGfzIUTgnFgmDD3hUSmPWutcH/K1/NFi1qeb35WE6d4aaXjR/KhF50duwrNJbxRSpHer5T7R3K27gmu95cjyr7ncEcxjEFDTEdf7NPkYM1uiQekXM67Ccc9jiTdXqBSDUGGXJDqGa4C+kVIvA7YbaVfCxtT53YL1ng5cMM7S3QcCvsEBvPPFCfQaHWrNLjB/BnlYbDcd6qC+Ss9wGtpiXu2xp3FqvRhCi+6sWDreT38l/ptCAWOXsgqv6Q5KaibztTxoUrM0c4cHnwwmVrHZol/sMUAIjylPp3exVRIFeU0YC6+NnDJnVhK8sYWXDQlaS6YtcYQavcsdNle2nhDF9PygrJTYDOAOPFJJdPMMX9j5QKMiDVVScWXSMGBwWx8a2tIMKNDbxlT+l5ils2k57jzYJZJXCGI0t+6QsTYy2WFd0LMu8urwo7TQRC8x/9m+7aycCyP9WF5xVPSU8duYj8nZLGtz7xg1yyIxf7JzNjQS8ofYgcZAhzKDvB0DzANXJ/m+qIukkSJsv/DvlwL5lzrOuNaIqmpIhPitnqQM4o4AK8w9dePPxzWZYCcOEQCTiuLQKItFA+v0Yunec= 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)(82310400026)(1800799024)(36860700016)(376014)(23010399003)(13003099007)(5113699003)(10067099003)(18002099003)(22082099003)(57112099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: n/z6ohUweOWdXjubkKRjhtgZJXnyk86XC5/lHx7pniD+dKsneN0iZW8xUCjKhw+UIQ4MAT0cddWnuNaW1c+88Alllx1/aZIR/3Ja0tVSjK+XrTMLpIeE3VbaMtAUHYUqCUI2ZdWx0ALOZJLhoNL/sj0t1z/3vFrLyH9o7e1ptKqWUvh09DpV56OJHAX520+rln3kvhrfU79tGbvRjoxZVvRZ7tM/rJNqizgM0pRZ6B7Ybg3U0tB23TogEGjSc/HpixH41I0Dj5PhVWxe1Zjp1oyJe4TdWaaubsubOaaMSsltvwHCI0U/6B87fNBXd71luGf0tbjTAF5GHnG0IPjF5AilZ/urAAEIc1i7i4EiBGFECfLFr04vKY56YKpbNeuA639yrmSzDSPbr5t+OK2/sLGurzKiBG67GjErryOKV6dWVFGOcgr9wWfxzsZhq5YU X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2026 01:07:49.1887 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: aedfe159-d770-4745-d870-08df0d4599b1 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: DU2PEPF00028D0E.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6542 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 | 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 d6681235e5..797743b2c1 100644 --- a/hw/block/vhost-blk.c +++ b/hw/block/vhost-blk.c @@ -232,8 +232,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; @@ -251,6 +252,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; @@ -409,6 +427,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); } @@ -456,6 +478,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