From nobody Thu Nov 13 12:02:46 2025 Delivered-To: importer@patchew.org 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; Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1579862233; cv=none; d=zohomail.com; s=zohoarc; b=Ql/8AwiKc8IVbQxGTouDJrzEo1LKMcIQ5j7mVG/7lJx8svUAGkyzVXRa1LFr2Jyh3LwzCwXf1pQhN8MOJWxYiaXqWT4ankPpYC8it+2e20YzmrpAfJv35q6kthp7mef97yJsidgeCaC05vWraHIYGTHrsLrlcNnreqXQbV8qf+8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579862233; 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=5GljaixeKsOYoXfgulGKQys/W9vJqv766ycj8860+Jw=; b=A5EWSlDrcmoK8JsQ0SL6Gq+111yZUtICn+eGDT1hAIzl+N6eIe+aVvNSMtVjPXU8j3w6Sy83marZDiI5xlVnUY/BC+qUAvoC+58KRtIO06kSPUcUTy/dsihZDvLaeEF6MwHwNtkK7yGCzpzXYm8SMtd+ohvY5zP1jNAcI7aRhc0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579862233770796.9861435088378; Fri, 24 Jan 2020 02:37:13 -0800 (PST) Received: from localhost ([::1]:40236 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iuwKu-000428-O4 for importer@patchew.org; Fri, 24 Jan 2020 05:37:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:46985) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iuwJv-0003A5-Uf for qemu-devel@nongnu.org; Fri, 24 Jan 2020 05:36:13 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iuwJu-00064G-Im for qemu-devel@nongnu.org; Fri, 24 Jan 2020 05:36:11 -0500 Received: from aserp2120.oracle.com ([141.146.126.78]:48166) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iuwJr-0005tS-6w; Fri, 24 Jan 2020 05:36:07 -0500 Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.27/8.16.0.27) with SMTP id 00OANFkR051386; Fri, 24 Jan 2020 10:36:05 GMT Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by aserp2120.oracle.com with ESMTP id 2xksyqr7tb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 24 Jan 2020 10:36:05 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.27/8.16.0.27) with SMTP id 00OAVIwT112194; Fri, 24 Jan 2020 10:36:04 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserp3030.oracle.com with ESMTP id 2xqmuepud9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 24 Jan 2020 10:36:04 +0000 Received: from abhmp0003.oracle.com (abhmp0003.oracle.com [141.146.116.9]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 00OAa3t8025711; Fri, 24 Jan 2020 10:36:03 GMT Received: from disaster-area.hh.sledj.net (/81.149.164.25) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 24 Jan 2020 02:36:03 -0800 Received: from localhost (disaster-area.hh.sledj.net [local]) by disaster-area.hh.sledj.net (OpenSMTPD) with ESMTPA id 3b9029b8; Fri, 24 Jan 2020 10:36:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=corp-2019-08-05; bh=5GljaixeKsOYoXfgulGKQys/W9vJqv766ycj8860+Jw=; b=mTA5uwvc/+BJ9Vzt8Ju/fOzWtn3zJZVqqrEAnRmK7jzGYdMhqNipwKb9UiYz9h1LugvY A5LUfjFYO/7laAz9gmqaz0jYK3AIldJoKF9ykaQKri8fPTrv9jhdBt/IgMOu5noG9k8b luEM8c04rSYMGC7iWK5ybvVWBCp/uqRyWE0PgEw6VdKgDyj7u76yQ42d2myXtBhQQwez a5gWYpA0YBDApKiO1sgSc/7YY5+uS2swb4A5m4s42/MSKFhY/5L37nWo3NfBkOncRx2k IV98HfZ6VfmCbEd5yDmreT9IMu3rKMYPbtRzbReIiQV/LhZy9OMVLm0ku9rtqy5wygXu MQ== From: David Edmondson To: qemu-devel@nongnu.org, qemu-block@nongnu.org Subject: [PATCH v2 1/2] qemu-img: Add --target-is-zero to convert Date: Fri, 24 Jan 2020 10:34:57 +0000 Message-Id: <20200124103458.1525982-2-david.edmondson@oracle.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200124103458.1525982-1-david.edmondson@oracle.com> References: <20200124103458.1525982-1-david.edmondson@oracle.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9509 signatures=668685 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1911140001 definitions=main-2001240086 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9509 signatures=668685 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1911140001 definitions=main-2001240086 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 141.146.126.78 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: David Edmondson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" In many cases the target of a convert operation is a newly provisioned target that the user knows is blank (filled with zeroes). In this situation there is no requirement for qemu-img to wastefully zero out the entire device. Add a new option, --target-is-zero, allowing the user to indicate that an existing target device is already zero filled. Signed-off-by: David Edmondson Reviewed-by: Eric Blake --- qemu-img-cmds.hx | 4 ++-- qemu-img.c | 25 ++++++++++++++++++++++--- qemu-img.texi | 4 ++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx index 1c93e6d185..6f958a0a48 100644 --- a/qemu-img-cmds.hx +++ b/qemu-img-cmds.hx @@ -44,9 +44,9 @@ STEXI ETEXI =20 DEF("convert", img_convert, - "convert [--object objectdef] [--image-opts] [--target-image-opts] [-U= ] [-C] [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-T src_cache] [-O output_fm= t] [-B backing_file] [-o options] [-l snapshot_param] [-S sparse_size] [-m = num_coroutines] [-W] [--salvage] filename [filename2 [...]] output_filename= ") + "convert [--object objectdef] [--image-opts] [--target-image-opts] [--= target-is-zero] [-U] [-C] [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-T src_c= ache] [-O output_fmt] [-B backing_file] [-o options] [-l snapshot_param] [-= S sparse_size] [-m num_coroutines] [-W] [--salvage] filename [filename2 [..= .]] output_filename") STEXI -@item convert [--object @var{objectdef}] [--image-opts] [--target-image-op= ts] [-U] [-C] [-c] [-p] [-q] [-n] [-f @var{fmt}] [-t @var{cache}] [-T @var{= src_cache}] [-O @var{output_fmt}] [-B @var{backing_file}] [-o @var{options}= ] [-l @var{snapshot_param}] [-S @var{sparse_size}] [-m @var{num_coroutines}= ] [-W] [--salvage] @var{filename} [@var{filename2} [...]] @var{output_filen= ame} +@item convert [--object @var{objectdef}] [--image-opts] [--target-image-op= ts] [--target-is-zero] [-U] [-C] [-c] [-p] [-q] [-n] [-f @var{fmt}] [-t @va= r{cache}] [-T @var{src_cache}] [-O @var{output_fmt}] [-B @var{backing_file}= ] [-o @var{options}] [-l @var{snapshot_param}] [-S @var{sparse_size}] [-m @= var{num_coroutines}] [-W] [--salvage] @var{filename} [@var{filename2} [...]= ] @var{output_filename} ETEXI =20 DEF("create", img_create, diff --git a/qemu-img.c b/qemu-img.c index 6233b8ca56..46db72dbe0 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -70,6 +70,7 @@ enum { OPTION_PREALLOCATION =3D 265, OPTION_SHRINK =3D 266, OPTION_SALVAGE =3D 267, + OPTION_TARGET_IS_ZERO =3D 268, }; =20 typedef enum OutputFormat { @@ -1984,10 +1985,9 @@ static int convert_do_copy(ImgConvertState *s) int64_t sector_num =3D 0; =20 /* Check whether we have zero initialisation or can get it efficiently= */ - if (s->target_is_new && s->min_sparse && !s->target_has_backing) { + if (!s->has_zero_init && s->target_is_new && s->min_sparse && + !s->target_has_backing) { s->has_zero_init =3D bdrv_has_zero_init(blk_bs(s->target)); - } else { - s->has_zero_init =3D false; } =20 if (!s->has_zero_init && !s->target_has_backing && @@ -2086,6 +2086,7 @@ static int img_convert(int argc, char **argv) {"force-share", no_argument, 0, 'U'}, {"target-image-opts", no_argument, 0, OPTION_TARGET_IMAGE_OPTS= }, {"salvage", no_argument, 0, OPTION_SALVAGE}, + {"target-is-zero", no_argument, 0, OPTION_TARGET_IS_ZERO}, {0, 0, 0, 0} }; c =3D getopt_long(argc, argv, ":hf:O:B:Cco:l:S:pt:T:qnm:WU", @@ -2209,6 +2210,14 @@ static int img_convert(int argc, char **argv) case OPTION_TARGET_IMAGE_OPTS: tgt_image_opts =3D true; break; + case OPTION_TARGET_IS_ZERO: + /* + * The user asserting that the target is blank has the + * same effect as the target driver supporting zero + * initialisation. + */ + s.has_zero_init =3D true; + break; } } =20 @@ -2247,6 +2256,11 @@ static int img_convert(int argc, char **argv) warn_report("This will become an error in future QEMU versions."); } =20 + if (s.has_zero_init && !skip_create) { + error_report("--target-is-zero requires use of -n flag"); + goto fail_getopt; + } + s.src_num =3D argc - optind - 1; out_filename =3D s.src_num >=3D 1 ? argv[argc - 1] : NULL; =20 @@ -2380,6 +2394,11 @@ static int img_convert(int argc, char **argv) } s.target_has_backing =3D (bool) out_baseimg; =20 + if (s.has_zero_init && s.target_has_backing) { + error_report("Cannot use --target-is-zero with a backing file"); + goto out; + } + if (s.src_num > 1 && out_baseimg) { error_report("Having a backing file for the target makes no sense = when " "concatenating multiple input images"); diff --git a/qemu-img.texi b/qemu-img.texi index b5156d6316..3b6dfd8682 100644 --- a/qemu-img.texi +++ b/qemu-img.texi @@ -179,6 +179,10 @@ information. Try to ignore I/O errors when reading. Unless in quiet mode (@code{-q}), = errors will still be printed. Areas that cannot be read from the source will be treated as containing only zeroes. +@item --target-is-zero +Assume that the destination is filled with zeros. This parameter is +mutually exclusive with the use of a backing file. It is required to +also use the @code{-n} parameter to skip image creation. @end table =20 Parameters to dd subcommand: --=20 2.24.1