From nobody Wed Aug 26 07:25:09 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1786536966; cv=none; d=zohomail.com; s=zohoarc; b=beMam58JnOiX3UphCYOEoaTG5pn1QkfNnbQ2vA/xsnWgFK9fH+1FGblVvXiVHJIYmm7uw0HzXSckwIrAVk/l1mZuY9Cut2jWcNBdOoqV8k1RhGubDRLOHGrYComb2d9vYN7ZEuhbcye1RMEfsCjFhpVxOm6Fglysv8JjaZqaGXk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786536966; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=IVJtcEPdiwg9PXALv8+qKSFQ+Lu+9GTpys8gB3I2ODs=; b=Nz8SkFaQNT0uGDpbpK8vo880+R9hlE4MgyIwllyC1q8eK8SLPxT5goUJXBkN8qudpnKmjpk0ffFMMhQfTCyXmGWh5bwxRZUEMmmr/5lTEA7dEPakIIAtGqEMX0qGf2gIzPnvn9EHouiatHOkJyaTZ75eL0EE6ezzs7aOPgYeIto= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786536966873526.6766993207791; Wed, 12 Aug 2026 05:16:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wu7rV-0001fm-3k; Wed, 12 Aug 2026 08:15:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wu7rS-0001Y1-8t for qemu-devel@nongnu.org; Wed, 12 Aug 2026 08:15:10 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wu7rO-00087d-IA for qemu-devel@nongnu.org; Wed, 12 Aug 2026 08:15:09 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-49554ebb87dso8495035e9.3 for ; Wed, 12 Aug 2026 05:15:06 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:89f2:ad10:d9bb:681e]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4997ad267c2sm49069945e9.0.2026.08.12.05.15.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 05:15:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786536905; x=1787141705; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=IVJtcEPdiwg9PXALv8+qKSFQ+Lu+9GTpys8gB3I2ODs=; b=bo/sCI8792A2TjX/HJ+/teVjvjG3rRB+mzjNNCwUx3BHTWNtWD3fZgiTmp9ZTepPYK tWmEoOcNGFTyvK7//OxNmOeBQjjQfNyug9LLv74QXDhOarfRK0ablf68bavleWhJSyov qJEXgUjPc7orSAgQUygAXyXNrV5Hz3RoThH+t2R3opuHmdbxJOh4pfbNnF1kLvqaT67d 5x5CRGc7uzAXm9KIF1wgP4DymffC5fsre8e8gZUGjuC5To6lYlVouKhH87qzKCmYUCEt k9COs6lAo9/qtR3d3vQCLjmulsrhe+OkIZN5wShLiX3htg2SJqjydlsF9vf3WORVMmwZ 7/JA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786536905; x=1787141705; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=IVJtcEPdiwg9PXALv8+qKSFQ+Lu+9GTpys8gB3I2ODs=; b=BoVtp35f5mn46v9/Am+kKvpIFsWHhha5qj8sIoe5JbanOKTjWrcePLGV89+hHZ4iXw Jx4BSMdmifurcYCTFLes5qcR+dgQJ66labNmxbQ+iH/Ozx5yNaBf8Cp8d1DbMB7wqBKd viGTeuHzbzPvzvzOHeur+eGZ97Pqk41uyenQdT7OsJ+Nutlm3+JrOiGiUJdYxpxnPcsY Y/OT/EwcnBgg4g+6uJzu5N28l8n6ZnbI8utPDE1/ta0bELEIiQBnWZRzTYSU6AM/l3zC KRjrVmD25dfI2takv+hylP6abxYhuD+nm+bgvLCIeLsN9CM9WAP7pCFfRNW7cwgtMbve tqlQ== X-Gm-Message-State: AOJu0Yw308Fr1hU+k06k4b14L2uH1fejqYe7ikOUP4GUNX/c/6/nGVea n8UYl5+jcarQpERP+RJBwLtAAUF8Jvj0pup1uXXF8goWWde5/uYXlNSpLkoU/PrRmzYKBrpiU1X UId7m X-Gm-Gg: AR+sD13Q5P8hto6ijxtw9E6hdF7kMBFcEi8wBLBNFVZQjut/lbm20qtaCU7B1q06HCs weEQLWQK6bvEwXK3en8L3YvsXJgf0CVllpU4mq/C/QqSWfNhB64FQno+t8fVuxY/I99X5+BSXMb ShFyXJX9nKZwiVaFmAANonfY+JZy/tYhmxwGc1A0jX8FM3XYAU1QhTCzJ0L4hFDKL9AU//i5Exd 3XkVakpkz1GmHKCKwy96E4ssLKQuodJYSGu19K0zGnv2LYEquzJ9C1/mONBqedUJGHyCae4qNHW snGIC+z5c4AIadNT/O54AMw1h2yN5duK4tPNlHPuT6iiPbxfPl9ezQ9Bm91wzYIcxUliUYyVQrb lQ0s6xXQy3u+rT3HH4ZWzLaFiUEfxtxW9g3MfBxBEjn0L/PbuL0lWqUS7IY9o8chqxQXVCDBrMN yZEfpf36DkK0vwSPOBGcl0F0zQzsnL/lA34yR2DecWv41I14g6SAdMEJXq5w== X-Received: by 2002:a05:600c:a213:b0:499:737c:8a8b with SMTP id 5b1f17b1804b1-4997c12c7e8mr40112965e9.12.1786536904846; Wed, 12 Aug 2026 05:15:04 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" Subject: [PATCH 1/4] block: notify the parent when a replaced child has a different size Date: Wed, 12 Aug 2026 14:14:57 +0200 Message-ID: <20260812121500.1034178-2-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812121500.1034178-1-den@openvz.org> References: <20260812121500.1034178-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::329; envelope-from=den@openvz.org; helo=mail-wm1-x329.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @openvz.org) X-ZM-MESSAGEID: 1786536969186158500 Content-Type: text/plain; charset="utf-8" bdrv_replace_child_bs() swaps the node a BdrvChild points to without telling the parent anything about it, so a parent which tracks the size of its child never learns that it changed. Every other way the size of a node changes goes through bdrv_co_truncate(), which does notify. The device models which care all register the same BlockDevOps hook: virtio-blk resize_cb =3D virtio_blk_resize(), ending up in virtio_notify_config() ide/ahci resize_cb =3D ide_resize_cb(), refreshing the cached size and the IDENTIFY data scsi-disk resize_cb =3D scsi_disk_resize_cb(), reporting CAPACITY DATA HAS CHANGED xen-block resize_cb =3D xen_block_resize_cb() Only scsi-disk is really hurt by the missing notification, because it is the one which validates guest requests against a cached size. virtio_blk_sect_range_ok() and ide_sect_range_ok() both call blk_get_geometry() for every request, so a missing notification leaves those guests with a stale idea of the size but never refuses I/O which the node underneath can serve. check_lba_range() compares against SCSIDevice.max_lba, filled in by scsi_disk_reset() and updated only by the READ CAPACITY(10) and (16) handlers, so with nothing to make the guest re-read the capacity every request past the end of the old node is refused for the whole life of the device. This is reachable with qom-set of the 'drive' property, which is allowed on a realized device, and it is silent on the host: out-of-range requests are answered by scsi_check_condition() and never reach scsi_handle_rw_error(), so there is no BLOCK_IO_ERROR event and io-status stays 'ok'. The guest sees ILLEGAL REQUEST / LOGICAL BLOCK ADDRESS OUT OF RANGE, which Linux turns into EREMOTEIO for reads as well as writes. Emit the notification from bdrv_replace_child_bs(), so that every device model gets it through the path it already implements rather than any of them being special cased. Send it only when the size really changed, which keeps the callback out of the common case of a replacement by an equally sized node. Signed-off-by: Denis V. Lunev --- block.c | 13 +++++++++++++ include/block/block_int-io.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/block.c b/block.c index f0a6042e61..1fe66caf8d 100644 --- a/block.c +++ b/block.c @@ -5524,9 +5524,12 @@ int bdrv_replace_child_bs(BdrvChild *child, BlockDri= verState *new_bs, Transaction *tran =3D tran_new(); g_autoptr(GSList) refresh_list =3D NULL; BlockDriverState *old_bs =3D child->bs; + int64_t old_len; =20 GLOBAL_STATE_CODE(); =20 + old_len =3D bdrv_getlength(old_bs); + bdrv_ref(old_bs); bdrv_drained_begin(old_bs); bdrv_drained_begin(new_bs); @@ -5542,6 +5545,16 @@ int bdrv_replace_child_bs(BdrvChild *child, BlockDri= verState *new_bs, tran_finalize(tran, ret); =20 bdrv_graph_wrunlock(); + + /* A parent caching the child size has to learn that it changed */ + if (ret =3D=3D 0) { + int64_t new_len =3D bdrv_getlength(new_bs); + + if (new_len >=3D 0 && new_len !=3D old_len) { + bdrv_parent_cb_resize(new_bs); + } + } + bdrv_drained_end(old_bs); bdrv_drained_end(new_bs); bdrv_unref(old_bs); diff --git a/include/block/block_int-io.h b/include/block/block_int-io.h index ed8b5657d6..95d0dd7a05 100644 --- a/include/block/block_int-io.h +++ b/include/block/block_int-io.h @@ -197,4 +197,7 @@ void bdrv_bsc_fill(BlockDriverState *bs, int64_t offset= , int64_t bytes); void coroutine_fn GRAPH_RDLOCK bdrv_co_parent_cb_resize(BlockDriverState *bs); =20 +void co_wrapper_bdrv_rdlock +bdrv_parent_cb_resize(BlockDriverState *bs); + #endif /* BLOCK_INT_IO_H */ --=20 2.53.0 From nobody Wed Aug 26 07:25:09 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1786536963; cv=none; d=zohomail.com; s=zohoarc; b=CAqh4vNTXqOxPvU19gc9MqPRnUvJigP6F5iktfbtloYoz6gymiSCZOe41j0JHJK1uTerROh91Xkq6IcyGmwP+L1WCckeaYGni1ACQIZYpYg6taBr/ekmt1pj24iKDG9hrLXamXeRbRWHtJr9Germg3D681QSUmd/Qa4ijiF7c8Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786536963; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cvb0dwDlcVJ96m5UrlDdQTM64pRTfq3T//iR/689M74=; b=ePlyRkEmduQ9DCyPRVoHxyRBstZYzAcPjEFnlSHu+gYUwxycMYjjB7S/7ecR5jDLskULYzgQHhsGlvomeY1SDqy8fYU8GXZ6HYY4NrmZGlAiENdSTwkJOTAjwmd01pJU/BEN98Fw1cFmELbzHVSweZBNlwxnUuKEXNj4u3DSgR0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786536963759105.94210781966399; Wed, 12 Aug 2026 05:16:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wu7rX-0001gx-PH; Wed, 12 Aug 2026 08:15:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wu7rS-0001ZZ-T1 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 08:15:11 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wu7rP-00087t-Sa for qemu-devel@nongnu.org; Wed, 12 Aug 2026 08:15:10 -0400 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-4996f1ee4a4so5454995e9.2 for ; Wed, 12 Aug 2026 05:15:07 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:89f2:ad10:d9bb:681e]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4997ad267c2sm49069945e9.0.2026.08.12.05.15.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 05:15:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786536906; x=1787141706; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=cvb0dwDlcVJ96m5UrlDdQTM64pRTfq3T//iR/689M74=; b=V/Fu2YV5qbrNn1mOAwU5le+ElGtVQ89fjyRXiGB8IUaUQAelEujYRmqQgGF+J8wcGR 11E7jz94LNnnR2FXyMRutKg6Wb2RxHq92pejA0ISvOwLo8vQZeH67eknyhnLh+UwN4s4 YuMyzdAFxK1IBOlkAibWBtJAlNeyrmHwGZp4GLW3hSR/1DQhl1uSyPNMww76tIyvIxH/ Eg7h0EZ0EyIntzNm0UDfaMtNORhRNJWwvTJqJ/E8NeWv2MRApfZBEQHzZWAPrF7JN2PS g15widbF8yjun8qmX1VZHTFp9jQzii1xzCtFuAb2+uHp5/AYnZtU9HrM4olLvGXe7Plk hmqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786536906; x=1787141706; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=cvb0dwDlcVJ96m5UrlDdQTM64pRTfq3T//iR/689M74=; b=eO3aaXXh3kDfwcS3eqnK44Yyxe9Kxf9/1R44k/x0UOxti4NUv3xR7I2mB7UDyYropH E3LVy0k07Jq/ggvg+0QVvN6jMFWF/jtQOQwn5RnCKoL6FGGkZ0UsDmCCRbG+CppVVHJQ qT1mLWOq2j8uBAfz3bWV75ZziR87oLObTkdnHWkqIjCbU/gvJX2QskTTnrVrhhdddPPE mbL0T6ARrQgdJBGI3wSM+Rv9FHMUqFu/gMYhgQNwXj+ZbdHwT8wb3x+LvCiAOc//qe1U GSnJh/c6gk+2pjhErSfM8QMxulaq5gJCucfM/8bLoXg9DtCiZBZFhoAKI1ZMxCnQv+JC fwrQ== X-Gm-Message-State: AOJu0YzFwP7vj+F+wcx+5oVMLAixdpojcrT0XA8Yb2iYzrVXHqfrOxLL a5QCxCW/ODUZxMBILBWnDCCnFF8573lFouzIR9PzHTDjYw3zeZu7lw1BdZOgFOIqZ+13q5dsNsd ivSC/ X-Gm-Gg: AR+sD12kgChn8cI0d82cQHQGMlwCqxYN6VORmoaWTA67ozPYRx1sEtFD7clbOKjtA2w FnhVT9U0PBk9BrffMjti9I7nUahM/UPx3DJJ0gevI0NdFKTXZsf/yRYf8LGR7FD875rIRmSR9oB 7q/QBCSIY4HBw0LyvIS1Ej35K7ooXshv8rIzc4mLbA1spUJ2XDHGRs+Q8fAlb0KV6zpt+ypSF3n DOB1J9k1cFxU3yNJ9ao+WpeiZS9ARbUX8iH/M2Nu4RenWUgk/HipMnyJhbbXLvOEP4lAHWHwkZ2 /X9kk3C3ObPgf4UCvf8hqG96DXzunSUuhSLw5qVXYMwBQNy0/1pHeF7wGssFLpOwvMVja0bbVi8 PRr/eAN4/gRtDfhER5CI4ClH6AHVITEjw2kVlSSdHxk6jLFv4+5EOIhXYXxVOgBmg/iY8o4Ccba Sj4BDxOoMEfcKvBZQk4Q4UgtqipquaEuJYQLmibdfjFwWWgMw6myQrYoBXxg== X-Received: by 2002:a05:600c:5020:b0:496:bffb:fb7b with SMTP id 5b1f17b1804b1-4997c13420bmr66646785e9.10.1786536905863; Wed, 12 Aug 2026 05:15:05 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" Subject: [PATCH 2/4] scsi-disk: refresh the cached capacity from the resize callback Date: Wed, 12 Aug 2026 14:14:58 +0200 Message-ID: <20260812121500.1034178-3-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812121500.1034178-1-den@openvz.org> References: <20260812121500.1034178-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::333; envelope-from=den@openvz.org; helo=mail-wm1-x333.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @openvz.org) X-ZM-MESSAGEID: 1786536965209158501 Content-Type: text/plain; charset="utf-8" scsi_disk_resize_cb() reports CAPACITY DATA HAS CHANGED but leaves SCSIDevice.max_lba alone, and max_lba is what check_lba_range() compares every request against. Until the guest reacts to the unit attention and issues READ CAPACITY, requests beyond the old size keep being refused with LOGICAL BLOCK ADDRESS OUT OF RANGE, and a guest which never re-reads the capacity never recovers at all. A guest migrated onto a device whose size changed underneath it is exactly such a guest. ide_resize_cb() refreshes its cached size along with the IDENTIFY data it reports to the guest. Do the same here, so that the notification is what tells the guest about the new capacity rather than what unblocks the device. Factor the computation out of scsi_disk_reset(), which already had it. Signed-off-by: Denis V. Lunev --- hw/scsi/scsi-disk.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index 1b0cce128c..3d404a8651 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -2386,13 +2386,10 @@ static int32_t scsi_disk_dma_command(SCSIRequest *r= eq, uint8_t *buf) } } =20 -static void scsi_disk_reset(DeviceState *dev) +static void scsi_disk_refresh_max_lba(SCSIDiskState *s) { - SCSIDiskState *s =3D DO_UPCAST(SCSIDiskState, qdev.qdev, dev); uint64_t nb_sectors; =20 - scsi_device_purge_requests(&s->qdev, SENSE_CODE(RESET)); - blk_get_geometry(s->qdev.conf.blk, &nb_sectors); =20 nb_sectors /=3D s->qdev.blocksize / BDRV_SECTOR_SIZE; @@ -2400,6 +2397,15 @@ static void scsi_disk_reset(DeviceState *dev) nb_sectors--; } s->qdev.max_lba =3D nb_sectors; +} + +static void scsi_disk_reset(DeviceState *dev) +{ + SCSIDiskState *s =3D DO_UPCAST(SCSIDiskState, qdev.qdev, dev); + + scsi_device_purge_requests(&s->qdev, SENSE_CODE(RESET)); + + scsi_disk_refresh_max_lba(s); /* reset tray statuses */ s->tray_locked =3D 0; s->tray_open =3D 0; @@ -2425,6 +2431,8 @@ static void scsi_disk_resize_cb(void *opaque) { SCSIDiskState *s =3D opaque; =20 + scsi_disk_refresh_max_lba(s); + /* SPC lists this sense code as available only for * direct-access devices. */ --=20 2.53.0 From nobody Wed Aug 26 07:25:09 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1786536958; cv=none; d=zohomail.com; s=zohoarc; b=iQiAHOZrvqYFAWo4Zmzs5zjQxWxOP8JSD6GGp0aFvzGUR+RJ0oFVbRaPqVLv2TOwH+UZkAa5lWbzqSFngT5mCirBr6pyeC5Do7mGNXvPGz4oYB0CXxy0ed4qSWeJoqzRMsdGIt/tYiXuKwgwuaG45wRGIsVjtrg2faF+IzxelKE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786536958; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=sexA7hI5SCiJnZmgARR0bNPIdBe4DuWTRVCdN4vwtBI=; b=TWhocXabjdXX40h+6LhuUPRJtbuPyU6PrInkEykyRcQa8FzneeabVqCXsbJtDiJZSLgvN97xGXjFPZcniUIUtjnP3GDRdhxUhhZ23uoBm0BCqM8z9cBo08ub2w4R73QsyH6lWY3sxxBA/PseXuMsdw4JhqSNYltfA0JnYuXR/XM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786536957936623.0713261924395; Wed, 12 Aug 2026 05:15:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wu7rY-0001hW-F7; Wed, 12 Aug 2026 08:15:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wu7rT-0001e1-MS for qemu-devel@nongnu.org; Wed, 12 Aug 2026 08:15:11 -0400 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wu7rR-00088e-91 for qemu-devel@nongnu.org; Wed, 12 Aug 2026 08:15:11 -0400 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-47f93b2fe4cso490345f8f.0 for ; Wed, 12 Aug 2026 05:15:08 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:89f2:ad10:d9bb:681e]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4997ad267c2sm49069945e9.0.2026.08.12.05.15.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 05:15:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786536908; x=1787141708; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=sexA7hI5SCiJnZmgARR0bNPIdBe4DuWTRVCdN4vwtBI=; b=IHtZbdFd4kbJdLWCrHCCyOXogUfYoFg/PE8tj8PMpnu9aEQ4eTvtDZmagfjzdtQOwN 6Fl+RB/iR6vPAmJ2xCWglx3hqzLeQmVkuonpFC/7I+L9RJOfWo2SKIEiUqWflxaot8ec FyPiHNcC9lz00n3DHmYCt6WU0AVsT7m0cwHuIe3sDe3T2FbqEMZiUAcH2zrZeKuJIlvy YbYrDCGEGYI5vM/8Y/tmGsgGKh2VbqXxbTEhWsV4RP5uST/HoImXuBtNyuhYEhbsgGNk 2vAWSai3ZJzCpBWCBT+A1DkvUHDTpyqnT11w97adQosxDrDIxoPHxzvPk2RPAYiIMN8t 8GRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786536908; x=1787141708; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=sexA7hI5SCiJnZmgARR0bNPIdBe4DuWTRVCdN4vwtBI=; b=G1doX76NYWfDYUEx26tqMbmFwNruM5m6zBIUjWDSjhGDQquD9H/LFMylosMato6+4/ /BB7bLUF4oYH+fcSFW7VTR8yfuD7MV3E/Klay9A0KFptJ1eAvgaX9hPn+NZVIOU0EU2E HLOLaBw5ZGLD1xaQ23mR1nvyGoZd4NFV6xPy81+JgAFMTR/ROVKR+x/UmFuAGbJqEnsI elv3g9u0eQX+/F4hSnkouvim14kJzq3Dfn28hJwpQjcMpjVa7NF3oWPUVs0i4pXpGjMP GWqcdPXK/l96LNs3Y+mXuLzjhiJ+tsFA7X4+j92eRs8QruPGcspvLX1sMNv/kcGYHF5E DYpw== X-Gm-Message-State: AOJu0Ywa42MjGWT98p2puo5xajKbz6cVacZTsOf546QS8+CrOPTdESqj BdnPW+36DeKmKtrkWIakEsOLOC6lZTlmfEXvxv1XM9TYyIYJ2sOriJ0/9im5/wuoZERuyEwxVEP WayfF X-Gm-Gg: AR+sD10mZOwVND4L7Aa0rDXXBPbnzf2lkXHSsk3aUUvr99uEKOK1uKaxbIvqsrX9QL2 psrFry5hVs24C7TzbRwedMbquqt4avfecKDeYV+Aw5sh5K5nG8JBPshcIVAaRSxW8zSwm951iPT WEKoAhPem7AK+Y79ApxvA3y713gmtIoB7mKKYPu8nTvWkv8SXcJ5x1cXoWEsSKUWq5pfJO0zZsL uDWqrY2jzdW8+zzInSHmxycep5dXhAV7gQok6GVbNGzomGhG9Sa4LkiGqxJ4edePgCPOHlW3XJp pGSduo/61bAxOEg9WIHeLLvuH0rJIk8BdmnW7STW0JEoYXf9vbSO6fKUo5vKqeaEZ41BeATb4GA VtvjN+IjC12jaC3MqOPVwJzeAcrVfwc8kl8/UsHMe+9ddtmZKC9IIMr1uCSCfiu76s12WSGrovw hlEntMLrN8xEwIObmic9GAdwRK9xvDRHLRkkfcF+K4w0F7fkwkqCrkddit6w== X-Received: by 2002:a05:600c:c494:b0:499:7a36:88b with SMTP id 5b1f17b1804b1-4997c0c4983mr49518955e9.5.1786536907481; Wed, 12 Aug 2026 05:15:07 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" Subject: [PATCH 3/4] tests/qtest/virtio-scsi: cover a replacement that changes the size Date: Wed, 12 Aug 2026 14:14:59 +0200 Message-ID: <20260812121500.1034178-4-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812121500.1034178-1-den@openvz.org> References: <20260812121500.1034178-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42b; envelope-from=den@openvz.org; helo=mail-wr1-x42b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @openvz.org) X-ZM-MESSAGEID: 1786536959079158500 Content-Type: text/plain; charset="utf-8" Realize a scsi-hd on a 1 MiB node, replace it with a 128 MiB one using qom-set, and check that the device reports CAPACITY DATA HAS CHANGED and then serves a read which only fits in the new node. Both halves regress on their own. Without the notification from bdrv_replace_child_bs() the first command after the replacement fails with ILLEGAL REQUEST / LOGICAL BLOCK ADDRESS OUT OF RANGE instead of the unit attention. Without the refresh in scsi_disk_resize_cb() the read after it is refused the same way, since nothing here issues READ CAPACITY. Signed-off-by: Denis V. Lunev --- tests/qtest/virtio-scsi-test.c | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/tests/qtest/virtio-scsi-test.c b/tests/qtest/virtio-scsi-test.c index e2350c52f6..f82b7e5de9 100644 --- a/tests/qtest/virtio-scsi-test.c +++ b/tests/qtest/virtio-scsi-test.c @@ -236,6 +236,53 @@ static void test_unmap_large_lba(void *obj, void *data, qvirtio_scsi_pci_free(vs); } =20 +/* Test replacing the backing node with one of a different size */ +static void test_replaced_node_size(void *obj, void *data, + QGuestAllocator *t_alloc) +{ + QVirtioSCSI *scsi =3D obj; + QVirtioSCSIQueues *vs; + uint8_t buf[512] =3D { 0 }; + /* READ(10), LBA 0, transfer length 1 */ + const uint8_t read_low_cdb[VIRTIO_SCSI_CDB_SIZE] =3D { + 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 + }; + /* READ(10), LBA 0x1000 (2 MiB), transfer length 1 */ + const uint8_t read_high_cdb[VIRTIO_SCSI_CDB_SIZE] =3D { + 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00 + }; + struct virtio_scsi_cmd_resp resp; + + alloc =3D t_alloc; + vs =3D qvirtio_scsi_init(scsi->vdev); + + /* LBA 0 is inside the 1 MiB node the device was realized with */ + virtio_scsi_do_command(vs, read_low_cdb, buf, sizeof(buf), NULL, 0, &r= esp); + g_assert_cmphex(resp.response, =3D=3D, 0); + g_assert_cmphex(resp.status, =3D=3D, GOOD); + + /* Swap in a 128 MiB node; the device is not reset by this */ + qtest_qmp_assert_success(global_qtest, + "{'execute': 'qom-set', 'arguments': {" + " 'path': '/machine/peripheral/scsi-hd0'," + " 'property': 'drive', 'value': 'big'}}"); + + /* The guest has to be told that the capacity it knows is stale */ + virtio_scsi_do_command(vs, read_high_cdb, buf, sizeof(buf), NULL, 0, &= resp); + g_assert_cmphex(resp.response, =3D=3D, 0); + g_assert_cmphex(resp.status, =3D=3D, CHECK_CONDITION); + g_assert_cmphex(resp.sense[2], =3D=3D, UNIT_ATTENTION); + g_assert_cmphex(resp.sense[12], =3D=3D, 0x2a); + g_assert_cmphex(resp.sense[13], =3D=3D, 0x09); /* CAPACITY DATA HAS CH= ANGED */ + + /* LBA 0x1000 is past the old node but well inside the new one */ + virtio_scsi_do_command(vs, read_high_cdb, buf, sizeof(buf), NULL, 0, &= resp); + g_assert_cmphex(resp.response, =3D=3D, 0); + g_assert_cmphex(resp.status, =3D=3D, GOOD); + + qvirtio_scsi_pci_free(vs); +} + static void test_write_to_cdrom(void *obj, void *data, QGuestAllocator *t_alloc) { @@ -365,6 +412,18 @@ static void *virtio_scsi_setup_4k(GString *cmd_line, v= oid *arg) return arg; } =20 +static void *virtio_scsi_setup_replace(GString *cmd_line, void *arg) +{ + g_string_append(cmd_line, + " -blockdev driver=3Dnull-co,read-zeroes=3Don," + "size=3D1048576,node-name=3Dsmall" + " -blockdev driver=3Dnull-co,read-zeroes=3Don," + "size=3D134217728,node-name=3Dbig" + " -device scsi-hd,id=3Dscsi-hd0,drive=3Dsmall," + "lun=3D0,scsi-id=3D1"); + return arg; +} + static void *virtio_scsi_setup_cd(GString *cmd_line, void *arg) { g_string_append(cmd_line, @@ -399,6 +458,10 @@ static void register_virtio_scsi_test(void) qos_add_test("large-lba-unmap", "virtio-scsi", test_unmap_large_lba, &opts); =20 + opts.before =3D virtio_scsi_setup_replace; + qos_add_test("replaced-node-size", "virtio-scsi", + test_replaced_node_size, &opts); + opts.before =3D virtio_scsi_setup_cd; qos_add_test("write-to-cdrom", "virtio-scsi", test_write_to_cdrom, &op= ts); =20 --=20 2.53.0 From nobody Wed Aug 26 07:25:09 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=openvz.org ARC-Seal: i=1; a=rsa-sha256; t=1786536976; cv=none; d=zohomail.com; s=zohoarc; b=LCRuMLRH/QNLneC+6WGRYP0D91cuyNGcEQyGzgqTE67G/kQINhQ8vhJUADZQw84JMUD5HTJdIJavzUKeETlmdYCjtkojvx6hchWeuD+dQkEjoeLGF38ulm1Qjk5j6qLjraEkCS0lpWBAEDzsEIofEIyrsIeYLQWC6SD+j2MLzK8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786536976; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=A3aAZ1Qz9d3rQwutTATeE2uSnDxeHOQSNQO9Jv6Voyg=; b=SAWqfg0Pf/9FgQtkFyksYmWu1m+vqyYdZLO8qeCji+dQhXOZtUoTwJ4LRHxPxphOUal2UhoNlKFgIFGlxMnM3BdpL/lnq/vyZ2PD9AfGtAuB0f/jCMlYAVgcvQOjcRUsTgw1t0q3cvq5KV7iKViyjzSjLkoUQ72zudYYFTbFJ6A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178653697673745.21727205614286; Wed, 12 Aug 2026 05:16:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wu7rW-0001gM-6k; Wed, 12 Aug 2026 08:15:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wu7rU-0001ec-9i for qemu-devel@nongnu.org; Wed, 12 Aug 2026 08:15:12 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wu7rS-00089H-Je for qemu-devel@nongnu.org; Wed, 12 Aug 2026 08:15:11 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-49553515a8bso12782455e9.1 for ; Wed, 12 Aug 2026 05:15:09 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:89f2:ad10:d9bb:681e]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4997ad267c2sm49069945e9.0.2026.08.12.05.15.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2026 05:15:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1786536909; x=1787141709; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=A3aAZ1Qz9d3rQwutTATeE2uSnDxeHOQSNQO9Jv6Voyg=; b=FZkzLsOgKu4QOKbi5OEGxyPwHZoA3cX0tcfmFmrV5VdjxeLqoD7rlc3adjDITxcyId MCRM3proW5jd/qX6Ym9zR49l7rCKVD7etO4HlDdIZdDxU5NtAGqEiD65MCGiwyrCghT9 zaNZDCYlJBEk59WTVVJKmQ3cPSkw33E5A/5/QZhSdtZFb2Q6bj3d+cYOEeW12H2Itj14 P+QOog73aJK4nEWfEJl0SUhHHZZ5TlBPE86JgAq9svLjc2dqZdQzaZXJO0LZhTKiFgrt D7/+o+ubgAIMZiLR/SsFtUcZz4+jTUFbPahZgWyaNFE1Ht0A52+8IjbjLeW0Fh7/G87A 0/MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786536909; x=1787141709; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=A3aAZ1Qz9d3rQwutTATeE2uSnDxeHOQSNQO9Jv6Voyg=; b=mxi19aj6GqjUKhwNI+nHEee9iALRkwfTnfxaZGy6etO4PKZ2NWI0K1gpduJQYqyBlh v6wcvJPgjriga9Hs33BqgkR+wfotOjXETPYC35jZ1u3J57j4Wbod+GEmNM3I0e4YuJn2 ghrh/JJVfVCDnHTdELQYhgVf4R/DoXWeX91512M3hT1uyGV88pjwAJjQ8zu3SXYdpUqI de3TjSQe8W9Pu0+zU6L5+Ke6hQ6+nandjwf3kUfQZHt9O8EdLkwClJfI9R1U3Ku6aU8G lJ9aS+JUJKLuaxLlFMrneZZAyHZ2qoyORO4OWpFnJhl/W1/ZABoNzRsFLlEGDziHERyU m8cg== X-Gm-Message-State: AOJu0YxgCYePPXIICkQe9tPzZUGSmaCHVyAWV7rsmmRGRCmXjLFHYGfF PAvvQ+lUGWGRUcV9aTXrSqRbfOGZ8URXmAJyij++P+UixQ/eo2xa64EHdP/5mmeqf7G2VB+zFfa E/w0E X-Gm-Gg: AR+sD10nx9811CA+fJc3fCVlhK8g7dsTKM0CBZqcs9qfciypcHfVPCGGHuQEfkIeIRh bnD4uf678U+rDf40UUB3hhikVwc03Ixw8eQAhdJ7U63rCk4hNEjLcp6njih064lEpa516TDTDhc 3Caw36WOLfvAFZZ2FdP+t53c9QC+xD378GQsV+hXAEHbI5HKM9D5ho2eq2IkzV2ST47Hz3vEa/8 dTulD0e/RNR6ZD+77CykUuGBALIJwQxIDluTZY0URIBIeaZfjBBAlJf+sdIyhTLaas2/pAbei9/ EDj8D8MsyEOwMOGsPnflf4htFRNvuXUSHjLlt3xgDr8BtVD75tetiwS0vqQZEKzr5Y+K82fTbMT Kyv6nCksx9MfnADPG7YSlGmBhI4HmkDYGXg4RkNNn9Jt+W3WwhbH3YAJFrMoyqMmPcuSGwSN89k sz43TSISvkMD/iX+nyz3XZ8rcqiHQYfeAmizLw2w+ALPddj6V2dqDqMJ6711Q= X-Received: by 2002:a05:600c:154d:b0:499:51f0:a9b2 with SMTP id 5b1f17b1804b1-4997c0fe6a0mr56837145e9.1.1786536908653; Wed, 12 Aug 2026 05:15:08 -0700 (PDT) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, "Denis V. Lunev" Subject: [PATCH 4/4] tests/qemu-iotests/qom-set-drive: replace with a differently sized node Date: Wed, 12 Aug 2026 14:15:00 +0200 Message-ID: <20260812121500.1034178-5-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812121500.1034178-1-den@openvz.org> References: <20260812121500.1034178-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32d; envelope-from=den@openvz.org; helo=mail-wm1-x32d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @openvz.org) X-ZM-MESSAGEID: 1786536977217158500 Content-Type: text/plain; charset="utf-8" All images in this test have the same size, so the test never reaches the size change path of bdrv_replace_child_bs(). Add a node of a different size and point a device at it. The notification itself is not visible over QMP, so this only covers the block layer side. What the device does with it is checked by tests/qtest/virtio-scsi-test.c. Signed-off-by: Denis V. Lunev --- tests/qemu-iotests/tests/qom-set-drive | 14 +++++++++++--- tests/qemu-iotests/tests/qom-set-drive.out | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/tests/qemu-iotests/tests/qom-set-drive b/tests/qemu-iotests/te= sts/qom-set-drive index ec8ddac4fd..52d7eb96da 100755 --- a/tests/qemu-iotests/tests/qom-set-drive +++ b/tests/qemu-iotests/tests/qom-set-drive @@ -24,12 +24,15 @@ import iotests from iotests import imgfmt, log, qemu_img_create, QMPTestCase =20 image_size =3D 1 * 1024 * 1024 -images =3D [os.path.join(iotests.test_dir, f'{i}.img') for i in range(0, 4= )] +images =3D [os.path.join(iotests.test_dir, f'{i}.img') for i in range(0, 5= )] + +# node4 is deliberately larger, to cover a replacement which changes the s= ize +image_sizes =3D [image_size] * 4 + [2 * image_size] =20 class TestQOMSetDrive(QMPTestCase): def setUp(self) -> None: - for image in images: - qemu_img_create('-f', imgfmt, image, str(image_size)) + for image, size in zip(images, image_sizes): + qemu_img_create('-f', imgfmt, image, str(size)) =20 self.vm =3D iotests.VM() for i, image in enumerate(images): @@ -68,6 +71,11 @@ class TestQOMSetDrive(QMPTestCase): log(self.vm.qmp('qom-get', path=3D'/machine/peripheral/no-iot', property=3D'drive')) =20 + log(self.vm.qmp('qom-set', path=3D'/machine/peripheral/no-iot', + property=3D'drive', value=3D'node4')) + log(self.vm.qmp('qom-get', path=3D'/machine/peripheral/no-iot', + property=3D'drive')) + if __name__ =3D=3D '__main__': iotests.activate_logging() # LUKS would require special key-secret handling in add_blockdevs() diff --git a/tests/qemu-iotests/tests/qom-set-drive.out b/tests/qemu-iotest= s/tests/qom-set-drive.out index 7fc243dca6..6f6e5e2b31 100644 --- a/tests/qemu-iotests/tests/qom-set-drive.out +++ b/tests/qemu-iotests/tests/qom-set-drive.out @@ -4,6 +4,8 @@ {"return": "node1"} {"return": {}} {"return": "node3"} +{"return": {}} +{"return": "node4"} . ---------------------------------------------------------------------- Ran 1 tests --=20 2.53.0