From nobody Sat May 18 18:57:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1556546017; cv=none; d=zoho.com; s=zohoarc; b=bvO5g7lBc2HsrCDhAWeLsnmXE/pogI3oEPVacnxRf3/DGIvcrDJrLw9/jjo52bLdYWiaNs/W4oVqb6La+crI9uC2BZ7xE36E3zplb2BAT9ofKU4J88eXmHzZe6wZPTouujusveo8exssEi7E8Kh51wnUy01KuUlep6R6++WI5Wo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1556546017; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=AepjI2xjb2h5M70msNzUPlt06VQQrCDG70bRmRZ80vY=; b=i67Q+BXvvMx8uF3jV2DdjMd2Q999vw8tK16H4PqUMjGLS/d9sCMwcrt9EnKXNLDMwcH+mtDR4YrcZx1wVV86yc7cBDqbYnKCktzMrUE7nLtC/h2KF1PF5FepSbydivrieQkqkayyJg/6hzUSHG6Jk94UA+J9A64yS7g3VDiJjck= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1556546017138900.9318964581886; Mon, 29 Apr 2019 06:53:37 -0700 (PDT) Received: from localhost ([127.0.0.1]:57927 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hL6io-0005xZ-Vn for importer@patchew.org; Mon, 29 Apr 2019 09:53:31 -0400 Received: from eggs.gnu.org ([209.51.188.92]:36252) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hL6h9-0004zg-Ru for qemu-devel@nongnu.org; Mon, 29 Apr 2019 09:51:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hL6h8-0007tG-Ti for qemu-devel@nongnu.org; Mon, 29 Apr 2019 09:51:47 -0400 Received: from fanzine.igalia.com ([91.117.99.155]:44144) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hL6h8-0007jJ-BZ; Mon, 29 Apr 2019 09:51:46 -0400 Received: from [212.145.226.66] (helo=perseus.local) by fanzine.igalia.com with esmtpsa (Cipher TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim) id 1hL6gq-0006BY-T9; Mon, 29 Apr 2019 15:51:28 +0200 Received: from berto by perseus.local with local (Exim 4.89) (envelope-from ) id 1hL6gd-0007Kj-BT; Mon, 29 Apr 2019 16:51:15 +0300 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=References:In-Reply-To:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=AepjI2xjb2h5M70msNzUPlt06VQQrCDG70bRmRZ80vY=; b=Agt7EO9DGCzRAswm3BxubTEU6iH5Rqt8/RRKGAG8CS+oCYpYyDxGvtOVBHGMYptZ+3v8MCRiOQP79V4ag2tjfuyzm2WO0FMP7RzldxJgRI52x4qLMPAJXKF2K0tEqjPEPUzSXL37aeqI9oBRjIItn1wsKUv4WPa2XfvtJEh6mP2t1xIaQYP+W5/sA1y5dh0mi2+bSCcBO6SlPF5ASnSx7V6YnfjSw9nOUqAzVdI6zBmgNOfzEUO6SI8bVXKww0rNdleb9rjYxmKf5X/XHNzRd8/kswtrmOLG4+IUMrA+Yqcpvb2E5XrgcZvZGU9ymV7x6wV45vMnSC4nFElVPa/OgQ==; From: Alberto Garcia To: qemu-devel@nongnu.org Date: Mon, 29 Apr 2019 15:51:08 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no timestamps) [generic] [fuzzy] X-Received-From: 91.117.99.155 Subject: [Qemu-devel] [PATCH v3 1/2] commit: Make base read-only if there is an early failure X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Alberto Garcia , qemu-block@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" You can reproduce this by passing an invalid filter-node-name (like "1234") to block-commit. In this case the base image is put in read-write mode but is never reset back to read-only. Signed-off-by: Alberto Garcia Reviewed-by: Max Reitz --- block/commit.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/block/commit.c b/block/commit.c index ba60fef58a..698eda1dfe 100644 --- a/block/commit.c +++ b/block/commit.c @@ -384,6 +384,9 @@ fail: if (s->top) { blk_unref(s->top); } + if (s->base_read_only) { + bdrv_reopen_set_read_only(base, true, NULL); + } job_early_fail(&s->common.job); /* commit_top_bs has to be replaced after deleting the block job, * otherwise this would fail because of lack of permissions. */ --=20 2.11.0 From nobody Sat May 18 18:57:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1556546136; cv=none; d=zoho.com; s=zohoarc; b=V4b0TpdB81NE/aSNiiFSwxwrJluYpdnpX7OPLwaYDY7EJhGr5iNwG1MdSn8CtAYWQVKi07+rbjf2FeGrkj/XgvzVNTpXHnc/A+gMr8PiGeQ2LxiphMK9Aou6afXpCs/j4xTFkPaxyMV9/CwS//vH8ccLGr/jLzmJRkHn/T1owxs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1556546136; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=7bDwzqplm35txYiR9F4Jb3HPhZMSDEOZXnh2npFaYTo=; b=k9uTWLCRBvHT0fwiy5r8rtZfzgJ2AJoFby8r4fpYpcHSXSoIgkJCiPS/U+dr5BVT7t0Ur/WkxVb3cW6MEIbNvRG4JV408UG50z07VjzDwFCgzRtVs/xmsX9Bat5qPGLQvUf0a8hQnWXF5HnYMvkeGePU8W5t1pKwbSYc3HJJ3gk= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1556546136290984.1542776081044; Mon, 29 Apr 2019 06:55:36 -0700 (PDT) Received: from localhost ([127.0.0.1]:57972 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hL6kg-0007ka-8q for importer@patchew.org; Mon, 29 Apr 2019 09:55:26 -0400 Received: from eggs.gnu.org ([209.51.188.92]:36266) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hL6hA-000508-Jb for qemu-devel@nongnu.org; Mon, 29 Apr 2019 09:51:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hL6h8-0007tQ-UC for qemu-devel@nongnu.org; Mon, 29 Apr 2019 09:51:48 -0400 Received: from fanzine.igalia.com ([91.117.99.155]:44140) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hL6h8-0007jD-Bb; Mon, 29 Apr 2019 09:51:46 -0400 Received: from [212.145.226.66] (helo=perseus.local) by fanzine.igalia.com with esmtpsa (Cipher TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim) id 1hL6gp-0006BK-ST; Mon, 29 Apr 2019 15:51:27 +0200 Received: from berto by perseus.local with local (Exim 4.89) (envelope-from ) id 1hL6gd-0007Kl-Do; Mon, 29 Apr 2019 16:51:15 +0300 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=References:In-Reply-To:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=7bDwzqplm35txYiR9F4Jb3HPhZMSDEOZXnh2npFaYTo=; b=R6/k563e/AglwTZh8sKWN70/SVDqmQB0dtKuR+EravO2aE3MboYcwypvLcaG9xHMUWmkAhZgjBGryWUki41bXpmRoeN0W1rSL7KJALEXfWrr7tekyi5trhITW7Rn3PjVMY9jlkbYd/o+CBgD7JrD3sUJTvVdHfncDW8R3iE06j9cRm27P6lA4iJmIyKysEXJR5zbR9b1+qShLZpb7Tf/soKTDDjKhlU/zC83AJdEOZDfB4Fgikzs5nu6W5cBWq+NP3akvfADa3tHeyz66dO5N2tm5WfA6EDRduoxuDn3J89XMg2gEpZ9e3Bn4tRFZ9QvZkqg52wBiCWaMqpo3gJIWQ==; From: Alberto Garcia To: qemu-devel@nongnu.org Date: Mon, 29 Apr 2019 15:51:09 +0200 Message-Id: <6b914458dc9a8b37fe83afa816b085b84777653a.1556540297.git.berto@igalia.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no timestamps) [generic] [fuzzy] X-Received-From: 91.117.99.155 Subject: [Qemu-devel] [PATCH v3 2/2] iotests: Check that images are in read-only mode after block-commit X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Alberto Garcia , qemu-block@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This tests the fix from the previous patch. Signed-off-by: Alberto Garcia --- tests/qemu-iotests/249 | 115 +++++++++++++++++++++++++++++++++++++++++= ++++ tests/qemu-iotests/249.out | 35 ++++++++++++++ tests/qemu-iotests/group | 1 + 3 files changed, 151 insertions(+) create mode 100755 tests/qemu-iotests/249 create mode 100644 tests/qemu-iotests/249.out diff --git a/tests/qemu-iotests/249 b/tests/qemu-iotests/249 new file mode 100755 index 0000000000..e4650ecf6b --- /dev/null +++ b/tests/qemu-iotests/249 @@ -0,0 +1,115 @@ +#!/usr/bin/env bash +# +# Test that a backing image is put back in read-only mode after +# block-commit (both when it fails and when it succeeds). +# +# Copyright (C) 2019 Igalia, S.L. +# +# 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=3Dberto@igalia.com + +seq=3D"$(basename $0)" +echo "QA output created by $seq" + +status=3D1 # failure is the default! + +_cleanup() +{ + _cleanup_test_img + rm -f "$TEST_IMG.base" + rm -f "$TEST_IMG.int" +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter +. ./common.qemu + +# Any format implementing BlockDriver.bdrv_change_backing_file +_supported_fmt qcow2 qed +_supported_proto file +_supported_os Linux + +IMG_SIZE=3D1M + +# Create the images: base <- int <- active +TEST_IMG=3D"$TEST_IMG.base" _make_test_img $IMG_SIZE | _filter_imgfmt +TEST_IMG=3D"$TEST_IMG.int" _make_test_img -b "$TEST_IMG.base" | _filter_im= gfmt +_make_test_img -b "$TEST_IMG.int" | _filter_imgfmt + +# Launch QEMU with these two drives: +# none0: base (read-only) +# none1: base <- int <- active +_launch_qemu -drive if=3Dnone,file=3D"${TEST_IMG}.base",node-name=3Dbase,r= ead-only=3Don \ + -drive if=3Dnone,file=3D"${TEST_IMG}",backing.node-name=3Dint= ,backing.backing=3Dbase + +_send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'qmp_capabilities' }" \ + 'return' + +echo +echo '=3D=3D=3D Send a write command to a drive opened in read-only mode (= 1)' +echo +_send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'human-monitor-command', + 'arguments': {'command-line': 'qemu-io none0 \"aio_write 0 2k\"'}}"= \ + 'return' + +echo +echo '=3D=3D=3D Run block-commit on base using an invalid filter node name' +echo +_send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'block-commit', + 'arguments': {'job-id': 'job0', 'device': 'none1', 'top-node': 'int= ', + 'filter-node-name': '1234'}}" \ + 'error' + +echo +echo '=3D=3D=3D Send a write command to a drive opened in read-only mode (= 2)' +echo +_send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'human-monitor-command', + 'arguments': {'command-line': 'qemu-io none0 \"aio_write 0 2k\"'}}"= \ + 'return' + +echo +echo '=3D=3D=3D Run block-commit on base using the default filter node nam= e' +echo +_send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'block-commit', + 'arguments': {'job-id': 'job0', 'device': 'none1', 'top-node': 'int= '}}" \ + 'return' + +# Wait for block-commit to finish +_send_qemu_cmd $QEMU_HANDLE '' \ + '"status": "null"' + +echo +echo '=3D=3D=3D Send a write command to a drive opened in read-only mode (= 3)' +echo +_send_qemu_cmd $QEMU_HANDLE \ + "{ 'execute': 'human-monitor-command', + 'arguments': {'command-line': 'qemu-io none0 \"aio_write 0 2k\"'}}"= \ + 'return' + +_cleanup_qemu + +# success, all done +echo "*** done" +rm -f $seq.full +status=3D0 diff --git a/tests/qemu-iotests/249.out b/tests/qemu-iotests/249.out new file mode 100644 index 0000000000..1c93164e84 --- /dev/null +++ b/tests/qemu-iotests/249.out @@ -0,0 +1,35 @@ +QA output created by 249 +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=3DIMGFMT size=3D1048576 +Formatting 'TEST_DIR/t.IMGFMT.int', fmt=3DIMGFMT size=3D1048576 backing_fi= le=3DTEST_DIR/t.IMGFMT.base +Formatting 'TEST_DIR/t.IMGFMT', fmt=3DIMGFMT size=3D1048576 backing_file= =3DTEST_DIR/t.IMGFMT.int +{"return": {}} + +=3D=3D=3D Send a write command to a drive opened in read-only mode (1) + +{"return": "Block node is read-onlyrn"} + +=3D=3D=3D Run block-commit on base using an invalid filter node name + +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event"= : "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "job0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event"= : "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "job0"}} +{"error": {"class": "GenericError", "desc": "Invalid node name"}} + +=3D=3D=3D Send a write command to a drive opened in read-only mode (2) + +{"return": "Block node is read-onlyrn"} + +=3D=3D=3D Run block-commit on base using the default filter node name + +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event"= : "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "job0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event"= : "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "job0"}} +{"return": {}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event"= : "JOB_STATUS_CHANGE", "data": {"status": "waiting", "id": "job0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event"= : "JOB_STATUS_CHANGE", "data": {"status": "pending", "id": "job0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event"= : "BLOCK_JOB_COMPLETED", "data": {"device": "job0", "len": 1048576, "offset= ": 1048576, "speed": 0, "type": "commit"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event"= : "JOB_STATUS_CHANGE", "data": {"status": "concluded", "id": "job0"}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event"= : "JOB_STATUS_CHANGE", "data": {"status": "null", "id": "job0"}} + +=3D=3D=3D Send a write command to a drive opened in read-only mode (3) + +{"return": "Block node is read-onlyrn"} +*** done diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index bae7718380..7ac9a5ea4a 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -248,3 +248,4 @@ 246 rw auto quick 247 rw auto quick 248 rw auto quick +249 rw auto quick --=20 2.11.0