From nobody Fri May 17 06:54:00 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1681225494; cv=none; d=zohomail.com; s=zohoarc; b=m3PTdcwfk7lwMg/NTbS24dK2mMO2ataaIeO+kMVvFltVlndamSCoLcqaZ9SM98egpvIoNBK+oRAPn0eiYptSNe5NGrsetKc6I2eHZTPwvu9xYdr/XJHEdmW8WY2Bll6vI/S4fmau2ySoRb+olP3n4Rtro0PzuXZCbDUcFwxDBvk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681225494; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=GpZ8Mu5E16NaLBA9iGqtDpq8aiiLhumZQZgPEeifA4g=; b=UozrY0i2SYOdyQP/sKfVc9g8OwaQ+EZpNqpeJYuwOJamH7KccKEW+cvw3e0Z1xMth9ncI6LdjNaIdmSuI0kR9aYZGwe6GMUrbg5gIgvG64qWozSX9n7fpJzJ2xZWsD6ZdTTqUSOcrSwS3GW61lby/mste1D1274hYk2GbRtshkQ= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16812254947569.952455458839836; Tue, 11 Apr 2023 08:04:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pmFWX-0003WO-Rc; Tue, 11 Apr 2023 11:03:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFWH-0003EK-1g for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:54 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFW7-00026K-Gb for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:49 -0400 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-26-MYy5WLXQMu2J_QkrZ0BOlQ-1; Tue, 11 Apr 2023 11:02:05 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id E1CFD3C0F37D; Tue, 11 Apr 2023 15:02:04 +0000 (UTC) Received: from merkur.fritz.box (unknown [10.39.193.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id 390B040BC797; Tue, 11 Apr 2023 15:02:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1681225328; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GpZ8Mu5E16NaLBA9iGqtDpq8aiiLhumZQZgPEeifA4g=; b=IFv2SMo1IRqqr3w94Lp9yweYb6AyBAew4YJ5/cd9pf6UXD5yp5tpJu8Rv35kLA/7KYVFFC 1gwdytLEuu0j/jUcwlwBNznct2UNkxoe2mSGOUc/9kB6Dsh2qote/x1f7qBX16E4uKE8+6 sTMIk5qFKRxQvWXbcFPyuBA35OMEAMw= X-MC-Unique: MYy5WLXQMu2J_QkrZ0BOlQ-1 From: Kevin Wolf To: qemu-block@nongnu.org Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Subject: [PULL 01/10] block/vhdx: fix dynamic VHDX BAT corruption Date: Tue, 11 Apr 2023 17:01:38 +0200 Message-Id: <20230411150147.318637-2-kwolf@redhat.com> In-Reply-To: <20230411150147.318637-1-kwolf@redhat.com> References: <20230411150147.318637-1-kwolf@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1681225603974100003 Content-Type: text/plain; charset="utf-8" From: Lukas Tschoke The corruption occurs when a BAT entry aligned to 4096 bytes is changed. Specifically, the corruption occurs during the creation of the LOG Data Descriptor. The incorrect behavior involves copying 4088 bytes from the original 4096 bytes aligned offset to `tmp[8..4096]` and then copying the new value for the first BAT entry to the beginning `tmp[0..8]`. This results in all existing BAT entries inside the 4K region being incorrectly moved by 8 bytes and the last entry being lost. This bug did not cause noticeable corruption when only sequentially writing once to an empty dynamic VHDX (e.g. using `qemu-img convert -O vhdx -o subformat=3Ddynamic ...`), but it still resulted in invalid values for the (unused) Sector Bitmap BAT entries. Importantly, this corruption would only become noticeable after the corrupted BAT is re-read from the file. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/727 Cc: qemu-stable@nongnu.org Signed-off-by: Lukas Tschoke Message-Id: <6cfb6d6b-adc5-7772-c8a5-6bae9a0ad668@gmail.com> Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- block/vhdx-log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/vhdx-log.c b/block/vhdx-log.c index c48cf65d62..38148f107a 100644 --- a/block/vhdx-log.c +++ b/block/vhdx-log.c @@ -981,7 +981,7 @@ static int vhdx_log_write(BlockDriverState *bs, BDRVVHD= XState *s, sector_write =3D merged_sector; } else if (i =3D=3D sectors - 1 && trailing_length) { /* partial sector at the end of the buffer */ - ret =3D bdrv_pread(bs->file, file_offset, + ret =3D bdrv_pread(bs->file, file_offset + trailing_length, VHDX_LOG_SECTOR_SIZE - trailing_length, merged_sector + trailing_length, 0); if (ret < 0) { --=20 2.39.2 From nobody Fri May 17 06:54:00 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1681225512; cv=none; d=zohomail.com; s=zohoarc; b=Y7J03dScPETdJNkQu3/7lT2BKKhio1X9AYd/sqRsQOYEczl/h6LQMvmhZYdK9BTILd/HGY58kqWR/WvAQb1fRHe4kNh1yaDGcwh9seQ+b6DKgNWQZopCtwdLhL9u5JQkOreLIzclUNsb9Sde3ZaKiUp+TBJkWrlqaktl+UcccoE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681225512; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=sZQMdDVjYK6X9018xClSXdbp52QPfNUd/QAT0sjyncs=; b=KNvTakJa1A/+ll3X0fEdKKFod/bD6Dc+bTVY/Rpjq2R7czLZhdRvDbRYFjQ90QKKFpyM/WK8QrnLGavdMJn7VaVVTWEPPlyZjrv5vrdsfRgDzF7e9YvkRipEn52g77e77Z0+Ixm4Q3wWIB+rIlt0W2KzEX3SKzQLWE85JYZFAt8= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681225512269254.22294720192144; Tue, 11 Apr 2023 08:05:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pmFWY-0003Wr-3z; Tue, 11 Apr 2023 11:03:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFWH-0003EP-0P for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:54 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFW9-00026Y-Kg for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:51 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-368-1yaEIosbMYatNkHtjadGxg-1; Tue, 11 Apr 2023 11:02:06 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id CEA7D8996E4; Tue, 11 Apr 2023 15:02:05 +0000 (UTC) Received: from merkur.fritz.box (unknown [10.39.193.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id 244E240BC797; Tue, 11 Apr 2023 15:02:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1681225329; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=sZQMdDVjYK6X9018xClSXdbp52QPfNUd/QAT0sjyncs=; b=Hb2j9+ABmNGCuswWhnSy54qrG89Z23fMlbYN/8tMBiF7ZlBpfmZz4a3n09qVVtak3LmxJ7 PeqRK/iCMMpRYlzJVn4ydVtuvVSkAs2KilUv1XyY19+yp/FoRjgjJdQW/wFM0fCp52/Yxk cfm2VMJ8vlPAYNApoQiad3fVyvDpM14= X-MC-Unique: 1yaEIosbMYatNkHtjadGxg-1 From: Kevin Wolf To: qemu-block@nongnu.org Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Subject: [PULL 02/10] iotests: Regression test for vhdx log corruption Date: Tue, 11 Apr 2023 17:01:39 +0200 Message-Id: <20230411150147.318637-3-kwolf@redhat.com> In-Reply-To: <20230411150147.318637-1-kwolf@redhat.com> References: <20230411150147.318637-1-kwolf@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1681225562631100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Kevin Wolf Message-Id: <20230411115231.90398-1-kwolf@redhat.com> Signed-off-by: Kevin Wolf --- tests/qemu-iotests/tests/regression-vhdx-log | 62 +++++++++++++++++++ .../tests/regression-vhdx-log.out | 14 +++++ 2 files changed, 76 insertions(+) create mode 100755 tests/qemu-iotests/tests/regression-vhdx-log create mode 100644 tests/qemu-iotests/tests/regression-vhdx-log.out diff --git a/tests/qemu-iotests/tests/regression-vhdx-log b/tests/qemu-iote= sts/tests/regression-vhdx-log new file mode 100755 index 0000000000..ca264e93d6 --- /dev/null +++ b/tests/qemu-iotests/tests/regression-vhdx-log @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# group: rw auto quick +# +# vhdx regression test: Updating the first entry of a BAT sector corrupted= the +# following entries. +# +# Copyright (C) 2023 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# creator +owner=3Dkwolf@redhat.com + +seq=3D`basename $0` +echo "QA output created by $seq" + +status=3D1 # failure is the default! + +_cleanup() +{ + _cleanup_test_img +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +cd .. +. ./common.rc +. ./common.filter + +_supported_fmt generic +_supported_proto generic +_unsupported_imgopts "subformat=3DstreamOptimized" + +size=3D64M +_make_test_img $size + +echo +echo "creating pattern" +$QEMU_IO -c "write -P 1 32M 4k" "$TEST_IMG" | _filter_qemu_io +$QEMU_IO -c "write -P 2 0 4k" "$TEST_IMG" | _filter_qemu_io +$QEMU_IO -c "read -P 1 32M 4k" "$TEST_IMG" | _filter_qemu_io + +echo +echo "checking image for errors" +_check_test_img + +# success, all done +echo "*** done" +rm -f $seq.full +status=3D0 diff --git a/tests/qemu-iotests/tests/regression-vhdx-log.out b/tests/qemu-= iotests/tests/regression-vhdx-log.out new file mode 100644 index 0000000000..350c257354 --- /dev/null +++ b/tests/qemu-iotests/tests/regression-vhdx-log.out @@ -0,0 +1,14 @@ +QA output created by regression-vhdx-log +Formatting 'TEST_DIR/t.IMGFMT', fmt=3DIMGFMT size=3D67108864 + +creating pattern +wrote 4096/4096 bytes at offset 33554432 +4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 4096/4096 bytes at offset 0 +4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 4096/4096 bytes at offset 33554432 +4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +checking image for errors +No errors were found on the image. +*** done --=20 2.39.2 From nobody Fri May 17 06:54:00 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1681225481; cv=none; d=zohomail.com; s=zohoarc; b=AGa/naWz7O+Q97d4UcilpqctTewZOaRhciYGBTlEslKHYu4HhrVPi8MAE1tU79o44qfVaQKCIm44rvdqua7K7OXpbVg2rYT6BZhRzu2RSRgBpem2wpCCkMQ580oYwlVLLMqC6jO96kX2YozizthXziryKbPyTNhOKhW6+dbXPMA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681225481; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=yk6XrmlIUFJdPomV6PWM1z6FDlsknQiMyAzUw9gF7Bw=; b=Rc340m6BcjH/mE94VEPIJuno1dKFbZE59ITxUMcdlWQwG/kjb17RqYr73QIPuR9IrIXcedjkcQKPS79+dcnVHeh7u7j/tOtSmLZhyFj6fBrFdWo2rSJssRkSij6k6XEyd8z6leVKG7uPDUV8l7BjL6UjlGhvHidSXqjksxmvyoI= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16812254816061021.5072335714424; Tue, 11 Apr 2023 08:04:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pmFWV-0003Sg-9r; Tue, 11 Apr 2023 11:03:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFWB-0003AA-5Y for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFW5-00026Z-QG for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:46 -0400 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-403-KatLiOhePnK0w0XOF-r77Q-1; Tue, 11 Apr 2023 11:02:07 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BB56B280048E; Tue, 11 Apr 2023 15:02:06 +0000 (UTC) Received: from merkur.fritz.box (unknown [10.39.193.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id 10CD040BC797; Tue, 11 Apr 2023 15:02:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1681225329; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yk6XrmlIUFJdPomV6PWM1z6FDlsknQiMyAzUw9gF7Bw=; b=JBPWX0LyBkQiSCiC2tNBnlVbaGAIdq7d1+i28ADu76Jeg/j9PEGVnbdNpV8mjLE35EfqmX TwECDUjGHXtmjHvrmLJQcYskOls8qXsOfOcKYUFF0JErn4+6MZaYMj0C2//3F1G7ao2Xzp VEZSdhfLlvAMpvgqVzfb229xYUYnbpM= X-MC-Unique: KatLiOhePnK0w0XOF-r77Q-1 From: Kevin Wolf To: qemu-block@nongnu.org Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Subject: [PULL 03/10] block: move has_variable_length to BlockLimits Date: Tue, 11 Apr 2023 17:01:40 +0200 Message-Id: <20230411150147.318637-4-kwolf@redhat.com> In-Reply-To: <20230411150147.318637-1-kwolf@redhat.com> References: <20230411150147.318637-1-kwolf@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @redhat.com) X-ZM-MESSAGEID: 1681225537959100001 Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini At the protocol level, has_variable_length only needs to be true in the very special case of host CD-ROM drives, so that they do not need an explicit monitor command to read the new size when a disc is loaded in the tray. However, at the format level has_variable_length has to be true for all raw blockdevs and for all filters, even though in practice the length depends on the underlying file and thus will not change except in the case of host CD-ROM drives. As a first step towards computing an accurate value of has_variable_length, add the value into the BlockLimits structure and initialize the field from the BlockDriver. Signed-off-by: Paolo Bonzini Message-Id: <20230407153303.391121-2-pbonzini@redhat.com> Reviewed-by: Eric Blake Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- include/block/block_int-common.h | 8 ++++++++ block.c | 2 +- block/io.c | 6 ++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/block/block_int-common.h b/include/block/block_int-com= mon.h index d419017328..a6d271f25d 100644 --- a/include/block/block_int-common.h +++ b/include/block/block_int-common.h @@ -855,6 +855,14 @@ typedef struct BlockLimits { =20 /* maximum number of iovec elements */ int max_iov; + + /* + * true if the length of the underlying file can change, and QEMU + * is expected to adjust automatically. Mostly for CD-ROM drives, + * whose length is zero when the tray is empty (they don't need + * an explicit monitor command to load the disk inside the guest). + */ + bool has_variable_length; } BlockLimits; =20 typedef struct BdrvOpBlocker BdrvOpBlocker; diff --git a/block.c b/block.c index e0c6c648b1..6a805ff0ea 100644 --- a/block.c +++ b/block.c @@ -5849,7 +5849,7 @@ int64_t coroutine_fn bdrv_co_nb_sectors(BlockDriverSt= ate *bs) if (!drv) return -ENOMEDIUM; =20 - if (drv->has_variable_length) { + if (bs->bl.has_variable_length) { int ret =3D bdrv_co_refresh_total_sectors(bs, bs->total_sectors); if (ret < 0) { return ret; diff --git a/block/io.c b/block/io.c index 8974d46941..932aeb5844 100644 --- a/block/io.c +++ b/block/io.c @@ -182,6 +182,8 @@ void bdrv_refresh_limits(BlockDriverState *bs, Transact= ion *tran, Error **errp) drv->bdrv_aio_preadv || drv->bdrv_co_preadv_part) ? 1 : 512; =20 + bs->bl.has_variable_length =3D drv->has_variable_length; + /* Take some limits from the children as a default */ have_limits =3D false; QLIST_FOREACH(c, &bs->children, next) { @@ -190,6 +192,10 @@ void bdrv_refresh_limits(BlockDriverState *bs, Transac= tion *tran, Error **errp) bdrv_merge_limits(&bs->bl, &c->bs->bl); have_limits =3D true; } + + if (c->role & BDRV_CHILD_FILTERED) { + bs->bl.has_variable_length |=3D c->bs->bl.has_variable_length; + } } =20 if (!have_limits) { --=20 2.39.2 From nobody Fri May 17 06:54:00 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1681225498; cv=none; d=zohomail.com; s=zohoarc; b=ga2fnLmEkvyIiSNCOGKxWMj2SbTbTaRMTTduzlCRfghGCJMPpSLpnt3lrl5NVyrGpf5yCUO/T70cjzh0e7I7nedGbwgtWr3rIi1rfVa5FP0RFobm07VNnqRCzgHGFckmjxpG0w2OJYb9uGlRlIYxGg4HlppKyT7Ti5KYfm5TzhI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681225498; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=CZ0exvT56EiRlSMtf4A8e0fSO/FJXyi+ajVf3B1F5hU=; b=WivtK1kutiqEJy0OOREOuGi1SDr1izvSJ4Vj9F3QnFEYW5yaVbIq1G1IxYx2ltNBiPUP/dkoxELVZYj15qyQjSBUIOYQtLtUtuIG2iYFtfBdAx8iYehK1CEPQnT1crPVARDdX1Vrs1RGA06JEsHlQKlXZAcYX8mA9Z0Rc8FNFb0= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681225498542625.8148020661932; Tue, 11 Apr 2023 08:04:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pmFWY-0003Wx-ST; Tue, 11 Apr 2023 11:03:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFWB-0003AC-TJ for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFW5-0002A1-Qs for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:47 -0400 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-448--f7SYsJjOVG3iEx-9Q4IlA-1; Tue, 11 Apr 2023 11:02:16 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A6D2C3C0F37E; Tue, 11 Apr 2023 15:02:07 +0000 (UTC) Received: from merkur.fritz.box (unknown [10.39.193.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id F1BA040BC797; Tue, 11 Apr 2023 15:02:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1681225341; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CZ0exvT56EiRlSMtf4A8e0fSO/FJXyi+ajVf3B1F5hU=; b=KV6o03coD+q9hn5O3j6RXSYSyQk9+fLTUhASu1/j5V0Jq6nmDMO3qqMj3W8JvH4eKQ1431 +1hVqBeslPQ4gmFWK9tFj5SA7+exCk8E7u66T/XfVp8iFONdTsNDQ+MBG/4FHT42whS5Hc NJ7/zjYGX36tIBvykTgqdCme5w4cSa0= X-MC-Unique: -f7SYsJjOVG3iEx-9Q4IlA-1 From: Kevin Wolf To: qemu-block@nongnu.org Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Subject: [PULL 04/10] block: remove has_variable_length from filters Date: Tue, 11 Apr 2023 17:01:41 +0200 Message-Id: <20230411150147.318637-5-kwolf@redhat.com> In-Reply-To: <20230411150147.318637-1-kwolf@redhat.com> References: <20230411150147.318637-1-kwolf@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1681225610959100001 Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini Filters automatically get has_variable_length from their underlying BlockDriverState. There is no need to mark them as variable-length in the BlockDriver. Signed-off-by: Paolo Bonzini Message-Id: <20230407153303.391121-3-pbonzini@redhat.com> Reviewed-by: Eric Blake Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- block/copy-on-read.c | 1 - block/filter-compress.c | 1 - block/preallocate.c | 1 - block/replication.c | 1 - 4 files changed, 4 deletions(-) diff --git a/block/copy-on-read.c b/block/copy-on-read.c index cc0f848b0f..b4d6b7efc3 100644 --- a/block/copy-on-read.c +++ b/block/copy-on-read.c @@ -259,7 +259,6 @@ static BlockDriver bdrv_copy_on_read =3D { .bdrv_co_eject =3D cor_co_eject, .bdrv_co_lock_medium =3D cor_co_lock_medium, =20 - .has_variable_length =3D true, .is_filter =3D true, }; =20 diff --git a/block/filter-compress.c b/block/filter-compress.c index ac285f4b66..320d9576fa 100644 --- a/block/filter-compress.c +++ b/block/filter-compress.c @@ -146,7 +146,6 @@ static BlockDriver bdrv_compress =3D { .bdrv_co_eject =3D compress_co_eject, .bdrv_co_lock_medium =3D compress_co_lock_medium, =20 - .has_variable_length =3D true, .is_filter =3D true, }; =20 diff --git a/block/preallocate.c b/block/preallocate.c index 71c3601809..4d82125036 100644 --- a/block/preallocate.c +++ b/block/preallocate.c @@ -558,7 +558,6 @@ BlockDriver bdrv_preallocate_filter =3D { .bdrv_set_perm =3D preallocate_set_perm, .bdrv_child_perm =3D preallocate_child_perm, =20 - .has_variable_length =3D true, .is_filter =3D true, }; =20 diff --git a/block/replication.c b/block/replication.c index de01f96184..ea4bf1aa80 100644 --- a/block/replication.c +++ b/block/replication.c @@ -762,7 +762,6 @@ static BlockDriver bdrv_replication =3D { =20 .is_filter =3D true, =20 - .has_variable_length =3D true, .strong_runtime_opts =3D replication_strong_runtime_opts, }; =20 --=20 2.39.2 From nobody Fri May 17 06:54:00 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1681225516; cv=none; d=zohomail.com; s=zohoarc; b=Bba9k1QFS8Jp/Ij2qyXo8K1ImaiuOROuIrr4aht0pMhPStw/3bShBraB4xjKC7o/XRgHvvUQHyHtUqa4Owq9SauYkfzIuPrK6lxwDTU14GpxEg/hUtI8Pqpjkq+FQBKrLB0byCOlzgPaqko0k4Ud8PRoNhKmUcrsn3ERMvca67E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681225516; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=9f7ezkuZcRn8veCAjD0ZAU2XMPn3uG8XDjHt5zU0hmY=; b=VOvE1mRDolh/ubRrq13NJB5A5wBSZcmYNzBixLdSY4C/ulRuwyMl2eupGlIGYjajB51222sOdFtAgjM3WbFk4jfwEe2fTaUgmE1X2xkTZUftSHJHTtzEx6j39kUkJRb2jvSH6WGIzrjbi+4Ueku4e+B0uKY6aJ7EHmdRDaw9yiA= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681225516751874.3685377702876; Tue, 11 Apr 2023 08:05:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pmFWK-0003L8-LI; Tue, 11 Apr 2023 11:02:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFWC-0003AD-6w for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFW5-00026x-QD for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:47 -0400 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-345-MTZLhRdWNVmbRBpD5h816A-1; Tue, 11 Apr 2023 11:02:10 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 966391C189A3; Tue, 11 Apr 2023 15:02:08 +0000 (UTC) Received: from merkur.fritz.box (unknown [10.39.193.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id DD3C440BC797; Tue, 11 Apr 2023 15:02:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1681225332; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9f7ezkuZcRn8veCAjD0ZAU2XMPn3uG8XDjHt5zU0hmY=; b=SGeG+lqAVAX2PnsPrr47qiOi93nEiaWhDx/sT8msbHnYMCJzurckmwvl2W8VN0OryTVbPi zZysPCwQeBqQkj90of0twvwJWDN7Uh+rP+u9+AMX5L4hmVo5D+oZFadlM74Z9JRmmnQiVJ KOFDeLGif+HDmZoYbDYMHULsHcWV6Kw= X-MC-Unique: MTZLhRdWNVmbRBpD5h816A-1 From: Kevin Wolf To: qemu-block@nongnu.org Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Subject: [PULL 05/10] block: refresh bs->total_sectors on reopen Date: Tue, 11 Apr 2023 17:01:42 +0200 Message-Id: <20230411150147.318637-6-kwolf@redhat.com> In-Reply-To: <20230411150147.318637-1-kwolf@redhat.com> References: <20230411150147.318637-1-kwolf@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1681225573351100002 Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini After reopening a BlockDriverState, it's possible that the size of the underlying file has changed. This for example is covered by test 171. Right now, this is handled by the raw driver's has_variable_length =3D true setting. Since this will be removed by the next patch, handle it on reopen instead, together with the existing bdrv_refresh_limits. Signed-off-by: Paolo Bonzini Message-Id: <20230407153303.391121-4-pbonzini@redhat.com> Reviewed-by: Eric Blake Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- block.c | 1 + 1 file changed, 1 insertion(+) diff --git a/block.c b/block.c index 6a805ff0ea..be7dc5d3e9 100644 --- a/block.c +++ b/block.c @@ -4918,6 +4918,7 @@ static void bdrv_reopen_commit(BDRVReopenState *reope= n_state) qdict_del(bs->options, "backing"); =20 bdrv_refresh_limits(bs, NULL, NULL); + bdrv_refresh_total_sectors(bs, bs->total_sectors); } =20 /* --=20 2.39.2 From nobody Fri May 17 06:54:00 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1681225528; cv=none; d=zohomail.com; s=zohoarc; b=F9LewwSmInhWtdmPeqquYuGX54PvzGuN8dfUL+JETXxWr46N1VeYMCeVWgZhMI+8YB/okV5bQ5keHxKYms/1CbLJj9UvRowRE5XHQO9NNMwUl6nNqxseRObx41hLlcqBiCqyMh1SROeeiD5izLQrNz4wOaiFBDA5bjR5fy7LHHE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681225528; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Gc9Ra+EjEBIXe4Z7SYmOVy6Gc9r+tt7tyada4fhZ4i0=; b=MKK9yXEwMs2MOO/+M2JAT55AoB6Tv8vRGuhdwPnw/CQFX4r/ING0oFqjJ6Fyu9IwB2nm8aKuNfvOWFF+yKKibRaB9gPPFmXMVpIhal9tVKER6ANRctEiuFoP+3BQ7npj7wDxGVdrTGFwbwyV4rBW6HdsXmLj7shXmVEC7oUheYo= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681225528515598.0898506645551; Tue, 11 Apr 2023 08:05:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pmFWY-0003Ws-60; Tue, 11 Apr 2023 11:03:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFWG-0003Dg-QF for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:52 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFW5-00028m-Kn for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:49 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-539-PhEyoARNNCGVvVghRVf7WA-1; Tue, 11 Apr 2023 11:02:11 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 82F5E185A7A8; Tue, 11 Apr 2023 15:02:09 +0000 (UTC) Received: from merkur.fritz.box (unknown [10.39.193.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id CD0A140BC797; Tue, 11 Apr 2023 15:02:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1681225335; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Gc9Ra+EjEBIXe4Z7SYmOVy6Gc9r+tt7tyada4fhZ4i0=; b=dn0N2uw0QPKP0PzVP23C+aCiXLbSEw6fI2rlmfhoV3JVTqXRvhoft3rIlXlteHMvW4Cc5F MS2vRJO9F7aaCVShWELARb9zQ5ytGKTt3egaYnGlH7DRAEgApL76b7rzPEawrBnUpgOVFK RXOpX3DJ2dJMtCMm6f4KGvV116/cnLs= X-MC-Unique: PhEyoARNNCGVvVghRVf7WA-1 From: Kevin Wolf To: qemu-block@nongnu.org Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Subject: [PULL 06/10] block: remove has_variable_length from BlockDriver Date: Tue, 11 Apr 2023 17:01:43 +0200 Message-Id: <20230411150147.318637-7-kwolf@redhat.com> In-Reply-To: <20230411150147.318637-1-kwolf@redhat.com> References: <20230411150147.318637-1-kwolf@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1681225648294100001 Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini Fill in the field in BlockLimits directly for host devices, and copy it from there for the raw format. Signed-off-by: Paolo Bonzini Message-Id: <20230407153303.391121-5-pbonzini@redhat.com> Reviewed-by: Eric Blake Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- include/block/block_int-common.h | 2 -- block/file-posix.c | 12 ++++++++---- block/file-win32.c | 2 +- block/io.c | 2 -- block/raw-format.c | 3 ++- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/include/block/block_int-common.h b/include/block/block_int-com= mon.h index a6d271f25d..f01bb8b617 100644 --- a/include/block/block_int-common.h +++ b/include/block/block_int-common.h @@ -158,8 +158,6 @@ struct BlockDriver { */ bool supports_backing; =20 - bool has_variable_length; - /* * Drivers setting this field must be able to work with just a plain * filename with ':' as a prefix, and no other options. diff --git a/block/file-posix.c b/block/file-posix.c index 5760cf22d1..c2dee3f056 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -3743,6 +3743,12 @@ static void cdrom_parse_filename(const char *filenam= e, QDict *options, { bdrv_parse_filename_strip_prefix(filename, "host_cdrom:", options); } + +static void cdrom_refresh_limits(BlockDriverState *bs, Error **errp) +{ + bs->bl.has_variable_length =3D true; + raw_refresh_limits(bs, errp); +} #endif =20 #ifdef __linux__ @@ -3838,14 +3844,13 @@ static BlockDriver bdrv_host_cdrom =3D { .bdrv_co_preadv =3D raw_co_preadv, .bdrv_co_pwritev =3D raw_co_pwritev, .bdrv_co_flush_to_disk =3D raw_co_flush_to_disk, - .bdrv_refresh_limits =3D raw_refresh_limits, + .bdrv_refresh_limits =3D cdrom_refresh_limits, .bdrv_co_io_plug =3D raw_co_io_plug, .bdrv_co_io_unplug =3D raw_co_io_unplug, .bdrv_attach_aio_context =3D raw_aio_attach_aio_context, =20 .bdrv_co_truncate =3D raw_co_truncate, .bdrv_co_getlength =3D raw_co_getlength, - .has_variable_length =3D true, .bdrv_co_get_allocated_file_size =3D raw_co_get_allocated_file_size, =20 /* removable device support */ @@ -3967,14 +3972,13 @@ static BlockDriver bdrv_host_cdrom =3D { .bdrv_co_preadv =3D raw_co_preadv, .bdrv_co_pwritev =3D raw_co_pwritev, .bdrv_co_flush_to_disk =3D raw_co_flush_to_disk, - .bdrv_refresh_limits =3D raw_refresh_limits, + .bdrv_refresh_limits =3D cdrom_refresh_limits, .bdrv_co_io_plug =3D raw_co_io_plug, .bdrv_co_io_unplug =3D raw_co_io_unplug, .bdrv_attach_aio_context =3D raw_aio_attach_aio_context, =20 .bdrv_co_truncate =3D raw_co_truncate, .bdrv_co_getlength =3D raw_co_getlength, - .has_variable_length =3D true, .bdrv_co_get_allocated_file_size =3D raw_co_get_allocated_file_size, =20 /* removable device support */ diff --git a/block/file-win32.c b/block/file-win32.c index c7d0b85306..1763b8662e 100644 --- a/block/file-win32.c +++ b/block/file-win32.c @@ -838,6 +838,7 @@ static void hdev_refresh_limits(BlockDriverState *bs, E= rror **errp) { /* XXX Does Windows support AIO on less than 512-byte alignment? */ bs->bl.request_alignment =3D 512; + bs->bl.has_variable_length =3D true; } =20 static int hdev_open(BlockDriverState *bs, QDict *options, int flags, @@ -933,7 +934,6 @@ static BlockDriver bdrv_host_device =3D { .bdrv_attach_aio_context =3D raw_attach_aio_context, =20 .bdrv_co_getlength =3D raw_co_getlength, - .has_variable_length =3D true, .bdrv_co_get_allocated_file_size =3D raw_co_get_allocated_file_size, }; =20 diff --git a/block/io.c b/block/io.c index 932aeb5844..2e267a85ab 100644 --- a/block/io.c +++ b/block/io.c @@ -182,8 +182,6 @@ void bdrv_refresh_limits(BlockDriverState *bs, Transact= ion *tran, Error **errp) drv->bdrv_aio_preadv || drv->bdrv_co_preadv_part) ? 1 : 512; =20 - bs->bl.has_variable_length =3D drv->has_variable_length; - /* Take some limits from the children as a default */ have_limits =3D false; QLIST_FOREACH(c, &bs->children, next) { diff --git a/block/raw-format.c b/block/raw-format.c index 66783ed8e7..06b8030d9d 100644 --- a/block/raw-format.c +++ b/block/raw-format.c @@ -377,6 +377,8 @@ raw_co_get_info(BlockDriverState *bs, BlockDriverInfo *= bdi) =20 static void raw_refresh_limits(BlockDriverState *bs, Error **errp) { + bs->bl.has_variable_length =3D bs->file->bs->bl.has_variable_length; + if (bs->probed) { /* To make it easier to protect the first sector, any probed * image is restricted to read-modify-write on sub-sector @@ -623,7 +625,6 @@ BlockDriver bdrv_raw =3D { .bdrv_co_truncate =3D &raw_co_truncate, .bdrv_co_getlength =3D &raw_co_getlength, .is_format =3D true, - .has_variable_length =3D true, .bdrv_measure =3D &raw_measure, .bdrv_co_get_info =3D &raw_co_get_info, .bdrv_refresh_limits =3D &raw_refresh_limits, --=20 2.39.2 From nobody Fri May 17 06:54:00 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1681225470; cv=none; d=zohomail.com; s=zohoarc; b=OF21gUrVjJCzeZHx6FJ803vvHgxCvvBWj/viHNs8OqwWQYdSPLnYnDTP+/YHXjd0lBlgPKiMSkngb5NYLpZBibZH6P2pHpfQsRaG6E3OCKWfNVUxqHtM5/oBMGX9YAzr6DZ+lB5cIJIhSwir9Q6FSJ0DWogjg/lgBluKEwjyJYw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681225470; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cs9Pl2396sK9DmUvcjIllLgIDuf/c5985/N39o/I+tc=; b=ZET7xsQh3QTPdVq3jYEMGW5rilSgKs9c0G4TnDluKnW4UIeXSOW0OMgsYeI7VTcGJbxXuAXtCETZ1VKQGYsZIjxTByd4oDciIgRHqOwFxEkn/J0WpFrd0k34oopqaFmja+hVQkgkGaCKyR+hBqCiyp1UJonWiUcEF+E87TLoQE8= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681225470781838.3376137186706; Tue, 11 Apr 2023 08:04:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pmFWG-0003Dr-Ua; Tue, 11 Apr 2023 11:02:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFW9-00036Y-Oa for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:45 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFW5-00028i-OG for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:45 -0400 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-372-otYK3GCKMnij21fDwHfc_A-1; Tue, 11 Apr 2023 11:02:12 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6E717385054C; Tue, 11 Apr 2023 15:02:10 +0000 (UTC) Received: from merkur.fritz.box (unknown [10.39.193.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id B91DA40BC797; Tue, 11 Apr 2023 15:02:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1681225335; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cs9Pl2396sK9DmUvcjIllLgIDuf/c5985/N39o/I+tc=; b=V8h2pto2+dkT00vwF75otALpPAHqqFStr3MlADPz02qk6LQsC0nOq/o5T6eAIwM5CpWxmB t2XDn9CImcSWHbMc1ECD2W+hEYEDW6cVCooea/K2PHL93NZzzFICDR6UsMERykZI/ci+IB ybzIKa6scqZMAN2w5jYba46OmhWjogY= X-MC-Unique: otYK3GCKMnij21fDwHfc_A-1 From: Kevin Wolf To: qemu-block@nongnu.org Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Subject: [PULL 07/10] migration/block: replace uses of blk_nb_sectors that do not check result Date: Tue, 11 Apr 2023 17:01:44 +0200 Message-Id: <20230411150147.318637-8-kwolf@redhat.com> In-Reply-To: <20230411150147.318637-1-kwolf@redhat.com> References: <20230411150147.318637-1-kwolf@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1681225528413100001 Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini Uses of blk_nb_sectors must check whether the result is negative. Otherwise, underflow can happen. Fortunately, alloc_aio_bitmap() and bmds_aio_inflight() both have an alternative way to retrieve the number of sectors in the file. Signed-off-by: Paolo Bonzini Message-Id: <20230407153303.391121-6-pbonzini@redhat.com> Reviewed-by: Eric Blake Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- migration/block.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/migration/block.c b/migration/block.c index 426a25bb19..b2497bbd32 100644 --- a/migration/block.c +++ b/migration/block.c @@ -195,7 +195,7 @@ static int bmds_aio_inflight(BlkMigDevState *bmds, int6= 4_t sector) { int64_t chunk =3D sector / (int64_t)BDRV_SECTORS_PER_DIRTY_CHUNK; =20 - if (sector < blk_nb_sectors(bmds->blk)) { + if (sector < bmds->total_sectors) { return !!(bmds->aio_bitmap[chunk / (sizeof(unsigned long) * 8)] & (1UL << (chunk % (sizeof(unsigned long) * 8)))); } else { @@ -229,10 +229,9 @@ static void bmds_set_aio_inflight(BlkMigDevState *bmds= , int64_t sector_num, =20 static void alloc_aio_bitmap(BlkMigDevState *bmds) { - BlockBackend *bb =3D bmds->blk; int64_t bitmap_size; =20 - bitmap_size =3D blk_nb_sectors(bb) + BDRV_SECTORS_PER_DIRTY_CHUNK * 8 = - 1; + bitmap_size =3D bmds->total_sectors + BDRV_SECTORS_PER_DIRTY_CHUNK * 8= - 1; bitmap_size /=3D BDRV_SECTORS_PER_DIRTY_CHUNK * 8; =20 bmds->aio_bitmap =3D g_malloc0(bitmap_size); --=20 2.39.2 From nobody Fri May 17 06:54:00 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1681225468; cv=none; d=zohomail.com; s=zohoarc; b=BjnlYGoUX9L9lrjfHWcVzlw43YLiVZcabaPWedEq2jUPQTW7Vpy2bed577yEk6DNYLiM5ZcZubbfznVyLYGDOooJfupDtkuE5loDV+eOGDwJ3lJ8Dv29E9jB8xbWGmc/bbJBvjFefIkQbzFNbPjFC3wizfpnQrt00J7xN4XM3ZU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681225468; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=OGOm2S/ZpAvk2QZj4atrxWDysPuTvn5zP6R7LzqFEjo=; b=lsfhdZ0Nsn4GP43o1UXKhd19xZTLsiTxlJbq+3YW5+NaKBDeVeGPf1GJ9fSGbpjaxZdqiYdAjz+5xbpKbrPUXR5pZiK4eVV2c+R8AhsjSnSzL5Wny4BNolpG/OQBoigKtbP1vBPgJsZfdQ5e3osH9vM/c+//zoXZ+nS8z72M/PU= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681225468101961.0734302948675; Tue, 11 Apr 2023 08:04:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pmFWM-0003Nu-2V; Tue, 11 Apr 2023 11:02:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFWD-0003AL-09 for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFW5-00027C-Sy for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:48 -0400 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-211-3kPHhb7uM2-3HYPnPd7pBg-1; Tue, 11 Apr 2023 11:02:11 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5B2AF1C189B4; Tue, 11 Apr 2023 15:02:11 +0000 (UTC) Received: from merkur.fritz.box (unknown [10.39.193.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id A5E4B40BC797; Tue, 11 Apr 2023 15:02:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1681225333; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OGOm2S/ZpAvk2QZj4atrxWDysPuTvn5zP6R7LzqFEjo=; b=gBOlIk8D6Dd/D5ciFNfChEiaqFPUweyjytHzNyFMbtY6Fqis2F2RdjM7L6kvtwIzVA5XHy klboA+vWv4vxO1N3pl4iXXuDwmYOpqVSOzIeZGID2k2t8R+yCrrL/Jj4u2lOptVW38q/aa mUzD0K8gTATO0XeOMV6/CRIsx76Atpo= X-MC-Unique: 3kPHhb7uM2-3HYPnPd7pBg-1 From: Kevin Wolf To: qemu-block@nongnu.org Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Subject: [PULL 08/10] block-backend: inline bdrv_co_get_geometry Date: Tue, 11 Apr 2023 17:01:45 +0200 Message-Id: <20230411150147.318637-9-kwolf@redhat.com> In-Reply-To: <20230411150147.318637-1-kwolf@redhat.com> References: <20230411150147.318637-1-kwolf@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1681225518485100001 Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini bdrv_co_get_geometry is only used in blk_co_get_geometry. Inline it in there, to reduce the number of wrappers for bs->total_sectors. Signed-off-by: Paolo Bonzini Message-Id: <20230407153303.391121-7-pbonzini@redhat.com> Reviewed-by: Eric Blake Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- include/block/block-io.h | 3 --- block.c | 10 ---------- block/block-backend.c | 8 ++++++-- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/include/block/block-io.h b/include/block/block-io.h index dbc034b728..9e2248a295 100644 --- a/include/block/block-io.h +++ b/include/block/block-io.h @@ -90,9 +90,6 @@ int64_t co_wrapper bdrv_get_allocated_file_size(BlockDriv= erState *bs); BlockMeasureInfo *bdrv_measure(BlockDriver *drv, QemuOpts *opts, BlockDriverState *in_bs, Error **errp); =20 -void coroutine_fn GRAPH_RDLOCK -bdrv_co_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); - int coroutine_fn GRAPH_RDLOCK bdrv_co_delete_file(BlockDriverState *bs, Error **errp); =20 diff --git a/block.c b/block.c index be7dc5d3e9..e8e08ad668 100644 --- a/block.c +++ b/block.c @@ -5879,16 +5879,6 @@ int64_t coroutine_fn bdrv_co_getlength(BlockDriverSt= ate *bs) return ret * BDRV_SECTOR_SIZE; } =20 -/* return 0 as number of sectors if no device present or error */ -void coroutine_fn bdrv_co_get_geometry(BlockDriverState *bs, - uint64_t *nb_sectors_ptr) -{ - int64_t nb_sectors =3D bdrv_co_nb_sectors(bs); - IO_CODE(); - - *nb_sectors_ptr =3D nb_sectors < 0 ? 0 : nb_sectors; -} - bool bdrv_is_sg(BlockDriverState *bs) { IO_CODE(); diff --git a/block/block-backend.c b/block/block-backend.c index 2ee39229e4..36e3a67dff 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -1615,16 +1615,20 @@ int64_t coroutine_fn blk_co_getlength(BlockBackend = *blk) return bdrv_co_getlength(blk_bs(blk)); } =20 +/* return 0 as number of sectors if no device present or error */ void coroutine_fn blk_co_get_geometry(BlockBackend *blk, uint64_t *nb_sectors_ptr) { + BlockDriverState *bs =3D blk_bs(blk); + IO_CODE(); GRAPH_RDLOCK_GUARD(); =20 - if (!blk_bs(blk)) { + if (!bs) { *nb_sectors_ptr =3D 0; } else { - bdrv_co_get_geometry(blk_bs(blk), nb_sectors_ptr); + int64_t nb_sectors =3D bdrv_co_nb_sectors(bs); + *nb_sectors_ptr =3D nb_sectors < 0 ? 0 : nb_sectors; } } =20 --=20 2.39.2 From nobody Fri May 17 06:54:00 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1681225466; cv=none; d=zohomail.com; s=zohoarc; b=kkp+7LUwr41MoF/pgc2/Ls0oT0YSg6TBrmHWOgTlRfQ9hMCnNZgJgP66NLz17eiRMlhJWwXHqGTOkeSPpH6H6yTa0YddM5Ad90e0RHe2TMYvzOM8ZR1U61FAuQulSg3/Qr1wTEWlkR0HWvV4I7dUNqRdogebkNZW/rgpzuXoTNg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681225466; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=YWJbnA+ulqtlMRpiXLg6mp3emKHsxNhK2Kr0XKblVXg=; b=JuNzCFT5JU36OCMJNz6p7Uvvu3e+oEoKEjVJs7O4MDV9FFSjPs575rGSUBMT/zg77n8c4+lx18xz8FDO5eV6aAHZ2MFD3NfsEFxZGSNhjv6iDqm/iakau7QP7wy7IyJr6jsit2v0vWdlNtECuEKEWBZphwmJsvgcIrqTV04Vc88= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681225466953574.1780751360454; Tue, 11 Apr 2023 08:04:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pmFWW-0003TL-01; Tue, 11 Apr 2023 11:03:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFWC-0003AJ-VX for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFW5-00029S-Tc for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:48 -0400 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-226-0yJRHk9QN9iU-Iqgx_W-QQ-1; Tue, 11 Apr 2023 11:02:14 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 7385F1C189AB; Tue, 11 Apr 2023 15:02:12 +0000 (UTC) Received: from merkur.fritz.box (unknown [10.39.193.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9144940BC797; Tue, 11 Apr 2023 15:02:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1681225338; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YWJbnA+ulqtlMRpiXLg6mp3emKHsxNhK2Kr0XKblVXg=; b=fbbqtmFm8EepM8s96/VKlAnJHwuZJqkwpnBAfQgJqAjoEk8OEstLF9YBne+iy4N5gyhKB/ olcliev2vX7nrKHsF3sX1FT0xUDtYgNr/cD2E+h+yqtvYDrGh1xYT/iJQvKpbDBh9qV9IR lcT2xLtlbU7vP4fdsxMAfMUvPEbMFBs= X-MC-Unique: 0yJRHk9QN9iU-Iqgx_W-QQ-1 From: Kevin Wolf To: qemu-block@nongnu.org Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Subject: [PULL 09/10] block-backend: ignore inserted state in blk_co_nb_sectors Date: Tue, 11 Apr 2023 17:01:46 +0200 Message-Id: <20230411150147.318637-10-kwolf@redhat.com> In-Reply-To: <20230411150147.318637-1-kwolf@redhat.com> References: <20230411150147.318637-1-kwolf@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @redhat.com) X-ZM-MESSAGEID: 1681225586375100001 Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini All callers of blk_co_nb_sectors (and blk_nb_sectors) are able to handle a non-inserted CD-ROM as a zero-length file, they do not need to raise an error. Not using blk_co_is_available() aligns the function with blk_co_get_geometry(), which becomes a simple wrapper for blk_co_nb_sectors(). It will also make it possible to skip the creation of a coroutine in the (common) case where bs->bl.has_variable_length is false. Signed-off-by: Paolo Bonzini Message-Id: <20230407153303.391121-8-pbonzini@redhat.com> Reviewed-by: Eric Blake Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- block/block-backend.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/block/block-backend.c b/block/block-backend.c index 36e3a67dff..cf58d4d1b7 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -1615,9 +1615,7 @@ int64_t coroutine_fn blk_co_getlength(BlockBackend *b= lk) return bdrv_co_getlength(blk_bs(blk)); } =20 -/* return 0 as number of sectors if no device present or error */ -void coroutine_fn blk_co_get_geometry(BlockBackend *blk, - uint64_t *nb_sectors_ptr) +int64_t coroutine_fn blk_co_nb_sectors(BlockBackend *blk) { BlockDriverState *bs =3D blk_bs(blk); =20 @@ -1625,23 +1623,18 @@ void coroutine_fn blk_co_get_geometry(BlockBackend = *blk, GRAPH_RDLOCK_GUARD(); =20 if (!bs) { - *nb_sectors_ptr =3D 0; + return -ENOMEDIUM; } else { - int64_t nb_sectors =3D bdrv_co_nb_sectors(bs); - *nb_sectors_ptr =3D nb_sectors < 0 ? 0 : nb_sectors; + return bdrv_co_nb_sectors(bs); } } =20 -int64_t coroutine_fn blk_co_nb_sectors(BlockBackend *blk) +/* return 0 as number of sectors if no device present or error */ +void coroutine_fn blk_co_get_geometry(BlockBackend *blk, + uint64_t *nb_sectors_ptr) { - IO_CODE(); - GRAPH_RDLOCK_GUARD(); - - if (!blk_co_is_available(blk)) { - return -ENOMEDIUM; - } - - return bdrv_co_nb_sectors(blk_bs(blk)); + int64_t ret =3D blk_co_nb_sectors(blk); + *nb_sectors_ptr =3D ret < 0 ? 0 : ret; } =20 BlockAIOCB *blk_aio_preadv(BlockBackend *blk, int64_t offset, --=20 2.39.2 From nobody Fri May 17 06:54:00 2024 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=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1681225398; cv=none; d=zohomail.com; s=zohoarc; b=MuH27wAgyJTYItVB9DFdCnfhCinUgSt5DKqJYc2+CRR+WtXkvxYyVIdwf8o0MaKsqX9iy5mI9TYXZPQfXLpQtixJ3+NkQqgsTMTNqsC7Gtu4ECd2GAUrrnB0YQM8fXMC0oHbLTnUPzHNvcbr519XpE9y1eiYNq7zMC10UiHnVMs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681225398; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=3DiKYu/rfwadYrMp66jxWIw+7QboZ3iGXwOVy15XVMs=; b=lPSTru9ODUDQI6hCMcJKaxTelgv1poqmnY5kYkx7JsmGKMkSZid5keqgFCqlJl0NE644ahvu8FO5T8jX6rugxMbC2cEs4DjmQYYifDaQLXVlXnXLD3BbuAa48RBdU04AV8ia+hIA+zBinQo6D3bBB1SpmYeG3exEGqA7aiKYhJ8= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681225398353527.4004548949022; Tue, 11 Apr 2023 08:03:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pmFWU-0003Qc-Du; Tue, 11 Apr 2023 11:03:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFWH-0003EE-06 for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:54 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pmFW7-00028t-Sk for qemu-devel@nongnu.org; Tue, 11 Apr 2023 11:02:51 -0400 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-483-6qw5lKC5NtOX5XyP-8jt4A-1; Tue, 11 Apr 2023 11:02:13 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 60D38280049C; Tue, 11 Apr 2023 15:02:13 +0000 (UTC) Received: from merkur.fritz.box (unknown [10.39.193.156]) by smtp.corp.redhat.com (Postfix) with ESMTP id AA23F40BC797; Tue, 11 Apr 2023 15:02:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1681225335; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3DiKYu/rfwadYrMp66jxWIw+7QboZ3iGXwOVy15XVMs=; b=JyHO1ACTDRV8/LnkGnvgyum1jaZ1UtahpH5I2XCzY2aiax3zZvfK/bJ2W9AETUXyDGPRei vQDlFb1xWHUwxCmm+4cQNicOE50GN8d+NGARhS1NHIbftPeRy2oGZbC/bQHTKF0ymlnEys R6Tu1W5H4ik4tM5gxr/Q7B4jKEQ2th4= X-MC-Unique: 6qw5lKC5NtOX5XyP-8jt4A-1 From: Kevin Wolf To: qemu-block@nongnu.org Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Subject: [PULL 10/10] block, block-backend: write some hot coroutine wrappers by hand Date: Tue, 11 Apr 2023 17:01:47 +0200 Message-Id: <20230411150147.318637-11-kwolf@redhat.com> In-Reply-To: <20230411150147.318637-1-kwolf@redhat.com> References: <20230411150147.318637-1-kwolf@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1681225400580100001 Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini The introduction of the graph lock is causing blk_get_geometry, a hot funct= ion used in the I/O path, to create a coroutine. However, the only part that r= eally needs to run in coroutine context is the call to bdrv_co_refresh_total_sect= ors, which in turn only happens in the rare case of host CD-ROM devices. So, write by hand the three wrappers on the path from blk_co_get_geometry to bdrv_co_refresh_total_sectors, so that the coroutine wrapper is only created if bdrv_nb_sectors actually calls bdrv_refresh_total_sectors. Reported-by: Stefan Hajnoczi Signed-off-by: Paolo Bonzini Message-Id: <20230407153303.391121-9-pbonzini@redhat.com> Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- include/block/block-io.h | 2 +- include/sysemu/block-backend-io.h | 5 ++--- block.c | 22 ++++++++++++++++++++++ block/block-backend.c | 27 +++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/include/block/block-io.h b/include/block/block-io.h index 9e2248a295..5dab88521d 100644 --- a/include/block/block-io.h +++ b/include/block/block-io.h @@ -79,7 +79,7 @@ bdrv_co_truncate(BdrvChild *child, int64_t offset, bool e= xact, PreallocMode prealloc, BdrvRequestFlags flags, Error **er= rp); =20 int64_t coroutine_fn GRAPH_RDLOCK bdrv_co_nb_sectors(BlockDriverState *bs); -int64_t co_wrapper_mixed_bdrv_rdlock bdrv_nb_sectors(BlockDriverState *bs); +int64_t coroutine_mixed_fn bdrv_nb_sectors(BlockDriverState *bs); =20 int64_t coroutine_fn GRAPH_RDLOCK bdrv_co_getlength(BlockDriverState *bs); int64_t co_wrapper_mixed_bdrv_rdlock bdrv_getlength(BlockDriverState *bs); diff --git a/include/sysemu/block-backend-io.h b/include/sysemu/block-backe= nd-io.h index c672b77247..bb25493ba1 100644 --- a/include/sysemu/block-backend-io.h +++ b/include/sysemu/block-backend-io.h @@ -72,11 +72,10 @@ int64_t co_wrapper_mixed blk_getlength(BlockBackend *bl= k); =20 void coroutine_fn blk_co_get_geometry(BlockBackend *blk, uint64_t *nb_sectors_ptr); -void co_wrapper_mixed blk_get_geometry(BlockBackend *blk, - uint64_t *nb_sectors_ptr); +void blk_get_geometry(BlockBackend *blk, uint64_t *nb_sectors_ptr); =20 int64_t coroutine_fn blk_co_nb_sectors(BlockBackend *blk); -int64_t co_wrapper_mixed blk_nb_sectors(BlockBackend *blk); +int64_t blk_nb_sectors(BlockBackend *blk); =20 void *blk_try_blockalign(BlockBackend *blk, size_t size); void *blk_blockalign(BlockBackend *blk, size_t size); diff --git a/block.c b/block.c index e8e08ad668..d79a52ca74 100644 --- a/block.c +++ b/block.c @@ -5859,6 +5859,28 @@ int64_t coroutine_fn bdrv_co_nb_sectors(BlockDriverS= tate *bs) return bs->total_sectors; } =20 +/* + * This wrapper is written by hand because this function is in the hot I/O= path, + * via blk_get_geometry. + */ +int64_t coroutine_mixed_fn bdrv_nb_sectors(BlockDriverState *bs) +{ + BlockDriver *drv =3D bs->drv; + IO_CODE(); + + if (!drv) + return -ENOMEDIUM; + + if (bs->bl.has_variable_length) { + int ret =3D bdrv_refresh_total_sectors(bs, bs->total_sectors); + if (ret < 0) { + return ret; + } + } + + return bs->total_sectors; +} + /** * Return length in bytes on success, -errno on error. * The length is always a multiple of BDRV_SECTOR_SIZE. diff --git a/block/block-backend.c b/block/block-backend.c index cf58d4d1b7..55efc735b4 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -1629,6 +1629,23 @@ int64_t coroutine_fn blk_co_nb_sectors(BlockBackend = *blk) } } =20 +/* + * This wrapper is written by hand because this function is in the hot I/O= path, + * via blk_get_geometry. + */ +int64_t coroutine_mixed_fn blk_nb_sectors(BlockBackend *blk) +{ + BlockDriverState *bs =3D blk_bs(blk); + + IO_CODE(); + + if (!bs) { + return -ENOMEDIUM; + } else { + return bdrv_nb_sectors(bs); + } +} + /* return 0 as number of sectors if no device present or error */ void coroutine_fn blk_co_get_geometry(BlockBackend *blk, uint64_t *nb_sectors_ptr) @@ -1637,6 +1654,16 @@ void coroutine_fn blk_co_get_geometry(BlockBackend *= blk, *nb_sectors_ptr =3D ret < 0 ? 0 : ret; } =20 +/* + * This wrapper is written by hand because this function is in the hot I/O= path. + */ +void coroutine_mixed_fn blk_get_geometry(BlockBackend *blk, + uint64_t *nb_sectors_ptr) +{ + int64_t ret =3D blk_nb_sectors(blk); + *nb_sectors_ptr =3D ret < 0 ? 0 : ret; +} + BlockAIOCB *blk_aio_preadv(BlockBackend *blk, int64_t offset, QEMUIOVector *qiov, BdrvRequestFlags flags, BlockCompletionFunc *cb, void *opaque) --=20 2.39.2