From nobody Wed Nov 27 04:57:15 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=1701796543; cv=none; d=zohomail.com; s=zohoarc; b=Ux8q06IGlTsWgHncG9GAKzzUJMZf/zdULJxV8zbjb4ngk8KKo0VnNjeSLgo3muIiCkrhX5d3+D8nv3ur893A8R2JPd16Izipq9s6HeCmZwIMlbl62NKQoWrAraADT8I0IF9iQ8/O8Wh9+OMVDQOU89J7LChOehP8Mz2Zw3/4Jzs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1701796543; h=Content-Type: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=MWv5UftpHSeglsYJOgk1egRE3AjSNgip0MVdxroh8M8=; b=Qqkicut7ZtEg64B3TxThoovRR6yGKRbKz2kQrvVhpeed9XaT26aHXY+88LyZoLnIiSRh1fP548zCSqUkWOS1qXOIKFa2zDg1lfO544z0vVoWlnBdDZ6saxYlc1EB7y6r4GQKr7MQPvDnnLNVZvkRLdZllWeZpFUCs5+uivIOzG8= 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 1701796543086239.20065065653705; Tue, 5 Dec 2023 09:15:43 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rAZ0c-0006yV-3w; Tue, 05 Dec 2023 12:14:58 -0500 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 1rAZ0b-0006xm-0c for qemu-devel@nongnu.org; Tue, 05 Dec 2023 12:14:57 -0500 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 1rAZ0X-00018c-T4 for qemu-devel@nongnu.org; Tue, 05 Dec 2023 12:14:56 -0500 Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-523-MqDroST8MiW23QfM-uqVEQ-1; Tue, 05 Dec 2023 12:14:51 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A85EB280640D; Tue, 5 Dec 2023 17:14:50 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.18]) by smtp.corp.redhat.com (Postfix) with ESMTP id AA95051E3; Tue, 5 Dec 2023 17:14:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1701796493; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=MWv5UftpHSeglsYJOgk1egRE3AjSNgip0MVdxroh8M8=; b=EZ4JvavHO46g8esvutU9NnXNy70Rc7f20lD1i321vSg0tC+BaHLUmFNO08gI3tJyZeWeeI uxhbILSLaWMwInNdL27fG1HkRn2TDFwl+tiReaHsaeS77milHsgOZ1jjnfIzlkxuEXEC3D OnbUxgEulNl9Z/2ajoDyc0wFm5j7/BM= X-MC-Unique: MqDroST8MiW23QfM-uqVEQ-1 From: Peter Krempa To: qemu-devel@nongnu.org Cc: Kevin Wolf , Hanna Reitz , John Snow , Vladimir Sementsov-Ogievskiy , Eric Blake , Markus Armbruster , qemu-block@nongnu.org Subject: [PATCH v3 2/2] block: stream: Allow users to request only format driver names in backing file format Date: Tue, 5 Dec 2023 18:14:42 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 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=pkrempa@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_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 1701796544568100011 Content-Type: text/plain; charset="utf-8" Introduce a new flag 'backing-mask-protocol' for the block-stream QMP command which instructs the internals to use 'raw' instead of the protocol driver in case when a image is used without a dummy 'raw' wrapper. The flag is designed such that it can be always asserted by management tools even when there isn't any update to backing files. The flag will be used by libvirt so that the backing images still reference the proper format even when libvirt will stop using the dummy raw driver (raw driver with no other config). Libvirt needs this so that the images stay compatible with older libvirt versions which didn't expect that a protocol driver name can appear in the backing file format field. Signed-off-by: Peter Krempa Reviewed-by: Vladimir Sementsov-Ogievskiy --- block/monitor/block-hmp-cmds.c | 2 +- block/stream.c | 10 +++++++++- blockdev.c | 7 +++++++ include/block/block_int-global-state.h | 3 +++ qapi/block-core.json | 9 ++++++++- 5 files changed, 28 insertions(+), 3 deletions(-) diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c index c729cbf1eb..9080e29d4d 100644 --- a/block/monitor/block-hmp-cmds.c +++ b/block/monitor/block-hmp-cmds.c @@ -509,7 +509,7 @@ void hmp_block_stream(Monitor *mon, const QDict *qdict) const char *base =3D qdict_get_try_str(qdict, "base"); int64_t speed =3D qdict_get_try_int(qdict, "speed", 0); - qmp_block_stream(device, device, base, NULL, NULL, NULL, + qmp_block_stream(device, device, base, NULL, NULL, false, false, NULL, qdict_haskey(qdict, "speed"), speed, true, BLOCKDEV_ON_ERROR_REPORT, NULL, false, false, false, false, &error); diff --git a/block/stream.c b/block/stream.c index 01fe7c0f16..da62410dde 100644 --- a/block/stream.c +++ b/block/stream.c @@ -39,6 +39,7 @@ typedef struct StreamBlockJob { BlockDriverState *target_bs; BlockdevOnError on_error; char *backing_file_str; + bool backing_mask_protocol; bool bs_read_only; } StreamBlockJob; @@ -95,7 +96,12 @@ static int stream_prepare(Job *job) if (unfiltered_base) { base_id =3D s->backing_file_str ?: unfiltered_base->filename; if (unfiltered_base->drv) { - base_fmt =3D unfiltered_base->drv->format_name; + if (s->backing_mask_protocol && + unfiltered_base->drv->protocol_name) { + base_fmt =3D "raw"; + } else { + base_fmt =3D unfiltered_base->drv->format_name; + } } } @@ -247,6 +253,7 @@ static const BlockJobDriver stream_job_driver =3D { void stream_start(const char *job_id, BlockDriverState *bs, BlockDriverState *base, const char *backing_file_str, + bool backing_mask_protocol, BlockDriverState *bottom, int creation_flags, int64_t speed, BlockdevOnError on_error, @@ -398,6 +405,7 @@ void stream_start(const char *job_id, BlockDriverState = *bs, s->base_overlay =3D base_overlay; s->above_base =3D above_base; s->backing_file_str =3D g_strdup(backing_file_str); + s->backing_mask_protocol =3D backing_mask_protocol; s->cor_filter_bs =3D cor_filter_bs; s->target_bs =3D bs; s->bs_read_only =3D bs_read_only; diff --git a/blockdev.c b/blockdev.c index 9ced07a8c4..a5ca1cf3ad 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2408,6 +2408,8 @@ void qmp_block_stream(const char *job_id, const char = *device, const char *base, const char *base_node, const char *backing_file, + bool has_backing_mask_protocol, + bool backing_mask_protocol, const char *bottom, bool has_speed, int64_t speed, bool has_on_error, BlockdevOnError on_error, @@ -2443,6 +2445,10 @@ void qmp_block_stream(const char *job_id, const char= *device, return; } + if (!has_backing_mask_protocol) { + backing_mask_protocol =3D false; + } + if (!has_on_error) { on_error =3D BLOCKDEV_ON_ERROR_REPORT; } @@ -2531,6 +2537,7 @@ void qmp_block_stream(const char *job_id, const char = *device, } stream_start(job_id, bs, base_bs, backing_file, + backing_mask_protocol, bottom_bs, job_flags, has_speed ? speed : 0, on_error, filter_node_name, &local_err); if (local_err) { diff --git a/include/block/block_int-global-state.h b/include/block/block_i= nt-global-state.h index 2162269df6..d2201e27f4 100644 --- a/include/block/block_int-global-state.h +++ b/include/block/block_int-global-state.h @@ -46,6 +46,8 @@ * flatten the whole backing file chain onto @bs. * @backing_file_str: The file name that will be written to @bs as the * the new backing file if the job completes. Ignored if @base is %NULL. + * @backing_mask_protocol: Replace potential protocol name with 'raw' in + * 'backing file format' header * @creation_flags: Flags that control the behavior of the Job lifetime. * See @BlockJobCreateFlags * @speed: The maximum speed, in bytes per second, or 0 for unlimited. @@ -64,6 +66,7 @@ */ void stream_start(const char *job_id, BlockDriverState *bs, BlockDriverState *base, const char *backing_file_str, + bool backing_mask_protocol, BlockDriverState *bottom, int creation_flags, int64_t speed, BlockdevOnError on_error, diff --git a/qapi/block-core.json b/qapi/block-core.json index 726145ec8a..04982bff96 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -2826,6 +2826,11 @@ # Care should be taken when specifying the string, to specify a # valid filename or protocol. (Since 2.1) # +# @backing-mask-protocol: If true, replace any protocol mentioned in the +# 'backing file format' with 'raw', rather than storing the protocol +# name as the backing format. Can be used even when no image header +# will be updated (default false; since 9.0). +# # @speed: the maximum speed, in bytes per second # # @on-error: the action to take on an error (default report). 'stop' @@ -2864,7 +2869,9 @@ ## { 'command': 'block-stream', 'data': { '*job-id': 'str', 'device': 'str', '*base': 'str', - '*base-node': 'str', '*backing-file': 'str', '*bottom': 'str', + '*base-node': 'str', '*backing-file': 'str', + '*backing-mask-protocol': 'bool', + '*bottom': 'str', '*speed': 'int', '*on-error': 'BlockdevOnError', '*filter-node-name': 'str', '*auto-finalize': 'bool', '*auto-dismiss': 'bool' }, --=20 2.43.0