From nobody Thu Oct 22 19:23:07 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1792154332; cv=none; d=zohomail.com; s=zohoarc; b=fwNik4HoRRMXYjH/5EMhoK7wPOoBWhzrGaOntILRfsYje2avzCUWOnTTtoh+/QbloN6EFjWKJlTWy+Abp/VCmYzfRDSHXeUhuGDXHyOxWxMzJnkn873yvYPaFE+YKL1t9+16jv9nqygySHAWo/zcdt3AsYSgQHiEQ+U2hBOSDB8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792154332; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=EKmKgMlZApsWKcc9hg4+3tc9ELpN6tg2AkDxth/Mr0Q=; b=TVLgHK12Tls3Bp3FuZIpAM/dmGBVu/gOzDInI6fRWkOjjXAoZOr8QFtSLkjpJMsz0XDiCHsBrYr2HJxdospMZkniQUFUEZ2lZcTBP6lo0FKpi9BSnwjmZzKGnwCNHXlFdhjz8a4FySmfr6aeRTTlWB7APJduJiMisxKTp5B/xa0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792154332279947.751054279093; Fri, 16 Oct 2026 05:38:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xHhCQ-0001Ds-8J; Fri, 16 Oct 2026 08:38:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xHhCN-00019E-9N for qemu-devel@nongnu.org; Fri, 16 Oct 2026 08:38:11 -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 1xHhCK-0002qy-V9 for qemu-devel@nongnu.org; Fri, 16 Oct 2026 08:38:10 -0400 Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-595-l8x4oIIxOPCG5OwN3Jp5xw-1; Fri, 16 Oct 2026 12:38:04 +0000 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-48df02b91f9so594443f8f.1 for ; Fri, 16 Oct 2026 05:38:04 -0700 (PDT) Received: from sraymaek-thinkpadx1nanogen2.rmtbe.csb (2a02-1811-d30-6f00-217b-1d12-f4f3-7e56.ip6.access.telenet.be. [2a02:1811:d30:6f00:217b:1d12:f4f3:7e56]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48dfd4e7889sm4730097f8f.24.2026.10.16.05.38.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Oct 2026 05:38:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1792154288; 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=EKmKgMlZApsWKcc9hg4+3tc9ELpN6tg2AkDxth/Mr0Q=; b=MIqU8Am2nZeJ+k+yw2rE/ogRv5ae867oqsGqr96BbCsWQxCHmIEaoiLr/s1GzQmJ91CZP4 MeYaULQg9yjqCqxkChNpbRFof6sdi9IKtomZ7UbAleFhR2mmPGnP5k6enQhWYtlADZvt8e 3ywLFglyqllYBD7sskPsW8bBo9X8c6s= X-MC-Unique: l8x4oIIxOPCG5OwN3Jp5xw-1 X-Mimecast-MFC-AGG-ID: l8x4oIIxOPCG5OwN3Jp5xw_1792154284 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1792154283; x=1792759083; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=EKmKgMlZApsWKcc9hg4+3tc9ELpN6tg2AkDxth/Mr0Q=; b=RAob65rcruNgaobPbxHC64XffhM6hDyg4uZmMmDeWqCkqBxoLszqa0R8wj1OiGs6Yk 3NXBavh0aq4suSdmJenENI3k2bi0rzk85NhuuMjJz7/2SrIVjHGAk7rDwKIcs/0/XXWa KndsIuYOoCAxjtRfqu3fblNrUw4AQrKJLWQWDL8/4v6TmdQvbJZHB5PZX8XqunwglZoO vEAaaI8G2Y9pKxei07qmqyeh4O7YgSZw8bOxBnq4u3qzXc4zjMC0QoSuuIMAvjlrt0Wp 3T0M/c5ePkmmMbqpLK7lG/KBpHCSxYAtjp8Vb+6A+QU4t4v2M8pJO/DSza5gB08+waa4 lRgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792154283; x=1792759083; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=EKmKgMlZApsWKcc9hg4+3tc9ELpN6tg2AkDxth/Mr0Q=; b=DkkqvML3mtnfsKCmnhn1XsOT/OOW51WdSrp3x1xW7RhLDniAD4+40m8Ex0k77mgqKL i5Q6Uf1RK3YKHhMzvQhwk25o7loo3LO3QhdnwHrJE7z3WTXxr2BGBRBfR1echTCc6Ihe NjukK2zrUccNzjuobIlI3xkzYxuYvkebjw6qSoMo0ZyudnGd75sBc+5HCzoSFfVccT8u rqbhr+r3nYD1GhXU5/5ZiKuq7wQwch9R2al9sEuo17W5lF6DYgCvzK5JCOAu/dJrzBcB y5deAGBtUsmYvLB7v/d3zElSCNFUFPvbMMdGs3C3UbNvLJPHN6D4xNVNJHc/p3Agsf1f g0Sg== X-Gm-Message-State: AFq9FYLs1nux/vrghi5p2vyAdDgjOvdQNb1OG+DyhPRoMWCiYFJ5tRcQ pomATu1xC5gWzb7bBzkIbona538T+iZkVYScsVhLiOOW90bxT7X2Nc63rjqflVLYegfGDFmNv33 Ya48NTCjLR/ZquX49NlLVQoMbNXuXh3l1WYia/yCFDQLVCbDKEOHKg3gt+hqdHzNjbg6KiLAqlD QPYIjDz9N74ihMDxyIV58OEZFQvw6OK8KALf9w9iwU X-Gm-Gg: AYBFou2dMIc2cA0WP14mrk7zGoD0IRddrafsQ/Phy3rAZF1lXXT2YBW+zxR3g+d4y4Z d6tXdwKJcA+HqayLoFKkMGW+7PF84uOStfJx0EvF5i88RGpHJ4iS0RxmxGHeSEKTt0jih5hJqP/ /ZQMdEFNgKPvBPJ8WgFV66xtpSkagYff+KoWtSBjL+Oq2cNaSBOA96njqVgrFQDfHBdpQ6cV54N iEYOdjAAQ5HNTAI/hNYbuyt27a2SRxMFTlUUDHybNbjdnlE2S1+sHgdqRfvmPzF//rjPyr7nBdW iWI8VkGt8ndDwB5KGxg85XJLX2/OvyZoAcV3ALjKOypovhK3jLzkwl3PSPonfNT5UsZZB7f7Pfy L0q3ZzWwOq8TaiLZJUSaPURR8AN+coa3boDib94AZ99nVIv428XCVT7HY6HRasdHdhgkVZLi1Xw o7Bqq7gdNa5ylWgmtIbT+uWxpPMKsr12G6 X-Received: by 2002:a5d:64eb:0:b0:48d:f852:c66b with SMTP id ffacd0b85a97d-48dfae7f70emr7039054f8f.22.1792154283604; Fri, 16 Oct 2026 05:38:03 -0700 (PDT) X-Received: by 2002:a5d:64eb:0:b0:48d:f852:c66b with SMTP id ffacd0b85a97d-48dfae7f70emr7038998f8f.22.1792154283239; Fri, 16 Oct 2026 05:38:03 -0700 (PDT) From: Sanne Raymaekers To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, fam@euphon.net, kwolf@redhat.com, hreitz@redhat.com, Sanne Raymaekers Subject: [PATCH v3 1/3] block/vmdk: align stream optimized data grains on 512 byte chunks Date: Fri, 16 Oct 2026 14:37:48 +0200 Message-ID: <20261016123750.94769-2-sraymaek@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261016123750.94769-1-sraymaek@redhat.com> References: <20261016123750.94769-1-sraymaek@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=sraymaek@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.24, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1792154334955158500 For stream optimized disks the spec notes: "Each marker and its associated block begin on a sector or 512=E2=80=90byte boundary... There are five types of markers: compressed grain markers,..." [^1] This means that instead of aligning grains on their typical size (64K), in stream optimized disks, grains should be aligned on 512 byte chunks. [^1] Virtual Disk Format 5.0 Technical Note. Signed-off-by: Sanne Raymaekers --- block/vmdk.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/block/vmdk.c b/block/vmdk.c index cd8b4ec7c8..7ca030c5fe 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -1730,16 +1730,25 @@ get_cluster_offset(BlockDriverState *bs, VmdkExtent= *extent, cluster_sector =3D extent->next_cluster_sector; extent->next_cluster_sector +=3D extent->cluster_sectors; =20 - /* First of all we write grain itself, to avoid race condition - * that may to corrupt the image. - * This problem may occur because of insufficient space on host di= sk - * or inappropriate VM shutdown. + /* + * Stream optimized (compressed) extents do not have to be + * pre-allocated, as compressed writes always cover the whole + * cluster, and will align on 512 byte chunks. */ - ret =3D get_whole_cluster(bs, extent, cluster_sector * BDRV_SECTOR= _SIZE, - offset, skip_start_bytes, skip_end_bytes, - zeroed); - if (ret) { - return ret; + if (!extent->compressed) { + /* + * First of all we write grain itself, to avoid race condition + * that may to corrupt the image. + * This problem may occur because of insufficient space on hos= t disk + * or inappropriate VM shutdown. + */ + ret =3D get_whole_cluster(bs, extent, + cluster_sector * BDRV_SECTOR_SIZE, + offset, skip_start_bytes, skip_end_byt= es, + zeroed); + if (ret) { + return ret; + } } if (m_data) { m_data->new_allocation =3D true; --=20 2.55.0 From nobody Thu Oct 22 19:23:07 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1792154354; cv=none; d=zohomail.com; s=zohoarc; b=LHv9n41oL7iga2y0grRHN3GNMZ0QT4RIx+oWVThDYIe+9LO8xWYhl5jaj9QJZbzd/u+9cVedej99oJZE9SDBuajRVQoNQN2MsKwOT32eyEVwAkIeMowWn8ZAlZZaVgVjD7W2JWlOT2wuyBW64DncLY/L2AFttSsjbmh1z0bXunY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792154354; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=wtswtFKfaEl7o67qsBWJaX7OMz7kmTugzIXPWuRcxZo=; b=OLH0CxK5uAbqS8A/D5G3TbgGSErIXCf0UnWiESV+r31UhYoD3Y0/6drubUY5FtyIMT8IXX5HvM9E0IFflIWh36PMqR8lpGpZJqXd92qf5DPvjyvLJZNez1lOft2vK0Np1a0+AAxkVdFuBS71pnV+/7z5KJ86aGUJ8weROuzZI8Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792154354233113.63242789123899; Fri, 16 Oct 2026 05:39:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xHhCR-0001EH-UI; Fri, 16 Oct 2026 08:38:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xHhCO-0001AK-JF for qemu-devel@nongnu.org; Fri, 16 Oct 2026 08:38:12 -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 1xHhCM-0002rC-BB for qemu-devel@nongnu.org; Fri, 16 Oct 2026 08:38:12 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-617-J5pN0dIQMLWmMyFHfbd4DQ-1; Fri, 16 Oct 2026 12:38:06 +0000 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4a0284121c6so23991285e9.3 for ; Fri, 16 Oct 2026 05:38:05 -0700 (PDT) Received: from sraymaek-thinkpadx1nanogen2.rmtbe.csb (2a02-1811-d30-6f00-217b-1d12-f4f3-7e56.ip6.access.telenet.be. [2a02:1811:d30:6f00:217b:1d12:f4f3:7e56]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48dfd4e7889sm4730097f8f.24.2026.10.16.05.38.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Oct 2026 05:38:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1792154289; 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=wtswtFKfaEl7o67qsBWJaX7OMz7kmTugzIXPWuRcxZo=; b=HMZd0Yk3uH9GLwRab7fUNJ6w4juMFqCW68Qgs51FfNVVowudEUwTI2f4t/4XuUouKGABcG 0uaPzFIyPpaAV1Rsmexj7G5rMHXVQRLS8Ug8GQDJoSowDZsuuuDmuTFVMT9dqXcCkdDBg0 vIqcvWwi7vzl+yhnY/KmQmGcONh4GeA= X-MC-Unique: J5pN0dIQMLWmMyFHfbd4DQ-1 X-Mimecast-MFC-AGG-ID: J5pN0dIQMLWmMyFHfbd4DQ_1792154285 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1792154285; x=1792759085; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=wtswtFKfaEl7o67qsBWJaX7OMz7kmTugzIXPWuRcxZo=; b=IcQaFSC0crfHcuwqf2e4hsehepf+JM3hfoV71hgyjHiDLOcY6EldZeChtwwFQWZ8mV HxpdbmQWMrJjNh8/I+0wMGBlU++62u7ySorvgE/QRgTQvPACih15wM8Yt8z8Yt2Y/e/U 3mwmN8JZDc43Wx+o8gDedHw2qL1HgFEiN5idmgfZJz+YnXOurua9aw48RlrHeZ/TWl73 E6wDTdu7Q5Vg/EY4TWyhHAmy7kbZZZ6I3S6iwaGUFzwQZG0N5suuIqk1B7boE4laoaF2 fdwrTPnxFXXPwSZbSn4xkb/YdKJdZQMDJZQjpkWDh7kDQnBbFAEQbXRJyddcClChvIC8 EPMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792154285; x=1792759085; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=wtswtFKfaEl7o67qsBWJaX7OMz7kmTugzIXPWuRcxZo=; b=Zzic4+1+91Kzbg4+DmEdcoMdB17RtDk1tQ7ry8eYeOinIEACCYMKlet5mnVZ3i6dpD wr75SK0JVH0q9tT2vPo3RtcPOFDjHZz8u/AkzyyoyT6xa0wACtkiiCKiIsNjNtg9cI8D IWklfYd5p4q7kHK3CqG3OHOJbBp4bDowFlWsxDtmJJ/rnuuHhbyhVJHeP8AOIRA+fas6 fq9idcsgNLxZgD1eMe1flJQMzkJtErRZI3s77341LFCZDxBHnA268/ha3H26/VGNGuto QthltO5pYn/IRy2BSnIRhEYb7V1YaTbrPM2R1j3j1YEzDI2xc/YEaXEeeOLmPCSkckAW seaQ== X-Gm-Message-State: AFq9FYLLGoBoeC/JPZobhcTjZrND9i+t5o4+f74DC/EhhXlh0ybb84aj qYe52IX7ox8TtAGcpzbS9wFTzdBy/L2jzkK9JxhSY8Td0J5m3K1NPKnYFeDGYNBO8tNLWQrC6Dh dbyehT8K2Dnlpqe+CCy7sG50SEB3XsEE6pcM5ovwmlIqHTwTJJZj5mtgFtuuYQf1xr+FD0LCdPN 0zxbwjPRxxCQ2Tw+fqQQMk4obBy+o7qdQT/3Ma4NGB X-Gm-Gg: AYBFou3R5dzOTWetnfRCLbwOZ0dgab3zsNMY394gTextH64r2CHkUBccdfY45Eht5p+ D3En92rPFJyZ1Y+YQI+UWwNpoye1MF98ZsmOgxobSKRu1u8xohj++WfzDqAnoySxZzKf+tq6pNO llK/j3+SA5BmKBYzI0xClkM88Bi5+rOycvMDbd+iYDj51XBlFPjGhpU6y5+Pnfo84kEs8z4BLzL dZLnie/VBnkTrhUROlPFz0PxB1qGXNey50D1Im4i64v5H7IJ7GIbjL84Kly5D31n9cgxBjlEDrL QS9oHR5BXwIh/XtIqRuMZoELMtq+0mk9MBbjlGMimAf80bepDhDoIM3jb0odq7E/qT195R7HZr0 VrewiMGBCaBPeRX/8IjO3EUPCC30pH4U3ApJcthZOaFtqPEbFW6yDn4H/YqWXfi8fFyT5SgzipJ sgUw7OhWxGySFV9a0YyqdEGYhf8Er3slja X-Received: by 2002:a05:600c:1389:b0:4a1:d307:b526 with SMTP id 5b1f17b1804b1-4a1d307b5d9mr15447225e9.0.1792154284736; Fri, 16 Oct 2026 05:38:04 -0700 (PDT) X-Received: by 2002:a05:600c:1389:b0:4a1:d307:b526 with SMTP id 5b1f17b1804b1-4a1d307b5d9mr15446685e9.0.1792154284341; Fri, 16 Oct 2026 05:38:04 -0700 (PDT) From: Sanne Raymaekers To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, fam@euphon.net, kwolf@redhat.com, hreitz@redhat.com, Sanne Raymaekers Subject: [PATCH v3 2/3] block/vmdk: skip RGD for stream optimized disks Date: Fri, 16 Oct 2026 14:37:49 +0200 Message-ID: <20261016123750.94769-3-sraymaek@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261016123750.94769-1-sraymaek@redhat.com> References: <20261016123750.94769-1-sraymaek@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=sraymaek@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.24, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1792154355131158500 Content-Type: text/plain; charset="utf-8" For stream optimized disks the spec notes: "The rgdOffset should be ignored because bit 1 of the flags field is not set." Where bit 1 of the flags field indicates a redundant grain directory (RGD).[^1] In short, stream optimized disks should have the RGD offset set to 0, and only write the main grain directory. This patch also corrects the comments around the code writing the grain directories, and it makes the error thrown when it fails to write the backup grain directory more explicit. [^1] Virtual Disk Format 5.0 Technical Note. Signed-off-by: Sanne Raymaekers --- block/vmdk.c | 46 ++++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/block/vmdk.c b/block/vmdk.c index 7ca030c5fe..e090e122f1 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -2246,8 +2246,9 @@ vmdk_init_extent(BlockBackend *blk, int64_t filesize,= bool flat, bool compress, } else { header.version =3D 1; } - header.flags =3D VMDK4_FLAG_RGD | VMDK4_FLAG_NL_DETECT - | (compress ? VMDK4_FLAG_COMPRESS | VMDK4_FLAG_MARKER := 0) + header.flags =3D VMDK4_FLAG_NL_DETECT + | (compress ? + VMDK4_FLAG_COMPRESS | VMDK4_FLAG_MARKER : VMDK4_FLAG= _RGD) | (zeroed_grain ? VMDK4_FLAG_ZERO_GRAIN : 0); header.compressAlgorithm =3D compress ? VMDK4_COMPRESSION_DEFLATE : 0; header.capacity =3D filesize / BDRV_SECTOR_SIZE; @@ -2262,8 +2263,16 @@ vmdk_init_extent(BlockBackend *blk, int64_t filesize= , bool flat, bool compress, =20 header.desc_offset =3D 1; header.desc_size =3D 20; - header.rgd_offset =3D header.desc_offset + header.desc_size; - header.gd_offset =3D header.rgd_offset + gd_sectors + (gt_size * gt_co= unt); + + if (compress) { + header.rgd_offset =3D 0; + header.gd_offset =3D header.desc_offset + header.desc_size; + } else { + header.rgd_offset =3D header.desc_offset + header.desc_size; + header.gd_offset =3D + header.rgd_offset + gd_sectors + (gt_size * gt_count); + } + header.grain_offset =3D ROUND_UP(header.gd_offset + gd_sectors + (gt_size * gt_count), header.granularity); @@ -2303,21 +2312,26 @@ vmdk_init_extent(BlockBackend *blk, int64_t filesiz= e, bool flat, bool compress, goto exit; } =20 - /* write grain directory */ + /* write backup grain directory */ gd_buf_size =3D gd_sectors * BDRV_SECTOR_SIZE; gd_buf =3D g_malloc0(gd_buf_size); - for (i =3D 0, tmp =3D le64_to_cpu(header.rgd_offset) + gd_sectors; - i < gt_count; i++, tmp +=3D gt_size) { - gd_buf[i] =3D cpu_to_le32(tmp); - } - ret =3D blk_co_pwrite(blk, le64_to_cpu(header.rgd_offset) * BDRV_SECTO= R_SIZE, - gd_buf_size, gd_buf, 0); - if (ret < 0) { - error_setg_errno(errp, -ret, "failed to write VMDK grain directory= "); - goto exit; + + if (!compress) { + for (i =3D 0, tmp =3D le64_to_cpu(header.rgd_offset) + gd_sectors; + i < gt_count; i++, tmp +=3D gt_size) { + gd_buf[i] =3D cpu_to_le32(tmp); + } + ret =3D blk_co_pwrite(blk, + le64_to_cpu(header.rgd_offset) * BDRV_SECTOR_S= IZE, + gd_buf_size, gd_buf, 0); + if (ret < 0) { + error_setg_errno(errp, -ret, + "failed to write VMDK backup grain directory"= ); + goto exit; + } } =20 - /* write backup grain directory */ + /* write grain directory */ for (i =3D 0, tmp =3D le64_to_cpu(header.gd_offset) + gd_sectors; i < gt_count; i++, tmp +=3D gt_size) { gd_buf[i] =3D cpu_to_le32(tmp); @@ -2326,7 +2340,7 @@ vmdk_init_extent(BlockBackend *blk, int64_t filesize,= bool flat, bool compress, gd_buf_size, gd_buf, 0); if (ret < 0) { error_setg_errno(errp, -ret, - "failed to write VMDK backup grain directory"); + "failed to write VMDK grain directory"); } =20 ret =3D 0; --=20 2.55.0 From nobody Thu Oct 22 19:23:07 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1792154350; cv=none; d=zohomail.com; s=zohoarc; b=YJ2hfaQjRwS+x2uyTAxqaANztE1Sk+0UV7SY75Gc+a3S3W/ygApBOLq+ITn0n+l6x6Vsb8ZrkJy7xT5V0SQj27pV8oiXYl1ZbNKPyVrk78RJ9W/XS0yjeB5ozs5zt2YrnxrpKZoNXo77EOomQyY2uMVEGOJY2Adv0lWr4hCvPxE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792154350; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZgAkLgYQ7Ca1BTa7iCbAs0dyMhrSR9GZ47HLfvAB6aA=; b=AOWP/PJL8NqCEBIYAiramdNL49ck3UjpV03CDQcy2pOgjg21BqcCa9Qn+K5njwRey0Bx0p0ac3VU/3C0/Qrab4V7+TCCClDZNhtSlG50SXD+pebV+dVoxfokU7u2c+tZejOcn5MfFY1E6RCqm9m61/eGoXoWCBCapLj4Uzsa1Ko= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1792154350845369.39415759454255; Fri, 16 Oct 2026 05:39:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xHhCO-0001Aa-M0; Fri, 16 Oct 2026 08:38:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xHhCN-00019G-Ca for qemu-devel@nongnu.org; Fri, 16 Oct 2026 08:38:11 -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 1xHhCL-0002r2-2S for qemu-devel@nongnu.org; Fri, 16 Oct 2026 08:38:11 -0400 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-507-ULu9DO-0Oay6h68Zk1MSvQ-1; Fri, 16 Oct 2026 12:38:06 +0000 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-4887e5afd67so4952901f8f.3 for ; Fri, 16 Oct 2026 05:38:06 -0700 (PDT) Received: from sraymaek-thinkpadx1nanogen2.rmtbe.csb (2a02-1811-d30-6f00-217b-1d12-f4f3-7e56.ip6.access.telenet.be. [2a02:1811:d30:6f00:217b:1d12:f4f3:7e56]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48dfd4e7889sm4730097f8f.24.2026.10.16.05.38.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Oct 2026 05:38:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1792154288; 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=ZgAkLgYQ7Ca1BTa7iCbAs0dyMhrSR9GZ47HLfvAB6aA=; b=Mhm+HbVFhk1lqS7HDa3Ut8TTb3VhjWU/TLDtlIkaeH1P3ErRPa581S/ojUzBitG1svFWsY URQiDEpCuyiIkV2TBhyO7929nZ3HuV4SBdVuvybPgVzXarp+hapH1MBWru5kShnOFTHx97 7u5N6SZdERFfcd4WiJ+DhHdVlnWTxkQ= X-MC-Unique: ULu9DO-0Oay6h68Zk1MSvQ-1 X-Mimecast-MFC-AGG-ID: ULu9DO-0Oay6h68Zk1MSvQ_1792154286 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1792154285; x=1792759085; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ZgAkLgYQ7Ca1BTa7iCbAs0dyMhrSR9GZ47HLfvAB6aA=; b=S+uBg7T8j+REKsLCWbErgxK/8vcx21Uj0gRGj0Yt7T14LktGcS19t0M37Y/Wb3tIun XifWZo73wZ1uWjM60WdaoHaKXK2lBr2wobgneUThz8ewZg3rrGfiLugth/DKtGBhShJF XvrNVo9671vMRNixr/XE++vEwQym7JGwue4fqGJ9Nmm0F/5FsVIutTf6XoxhyqZXCqI8 xRsK+h+tQfbJIe67iR1DYrS1YNr24Ik8E5kwnvl9i5nlU/AcdNst6t6CuLM/JFAVoKHF VF+/smQa9pS3ZSKHBmEVGSr9d3gmkytNFxW00uDw0HNjUivmNazW/8UqEoj9hY+7gHzt P+Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792154285; x=1792759085; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ZgAkLgYQ7Ca1BTa7iCbAs0dyMhrSR9GZ47HLfvAB6aA=; b=Kgmx9yiGB+KrfuuZ4vAfywAU13VJyK/xuliZQ0o2zwNNm4+iZVyrZyRW8mlJnCZ7Z3 1PuUoGdHfuQEmayBKxRG+ByPVQ04pbS9sxGPAnj4LXaLjAZ+6QElSHlKDrveQVZC6fCr 99BGdfcOjqoV6kt3HY2BXQ2Mboe8GpwFDzIGDnUnvGCFnM1y13k0mVGcNiK+SNsMx/V1 7FBvOAhFzvN8VYA4W+FBpxMUiXD3K+FlWnIEBvmPtK1UPSSBonTAfkZIvt31Rnu+zPN9 yIGza8cF4zbX5IDv/4w7Tax5p4ZK2konbreRYudd/h0Khd0KFvrfaUJTxb9n7lnc+BS6 j0NQ== X-Gm-Message-State: AFq9FYKVqvolDStLZFKwRdZBn6hXiOFcL21ZG2yi7b73XGJecMRuT1/l XnvAJ0sgrJh/OrGYMaXuMF7zK4OOl2zX/BKIatxOsKdjn6ck2ZYdKHhUN7bN6+xlODFDRlsBzq6 ywzadmrEDOVY3JnzoyL3KMlQjF28sFsFd77w77WEO3Jnv+oq/vJwVRd+c9rA8O2yOvvFJov274Y yLTlWsve9G6owAemh5XHo66wgvmO2fDkKIZNRvkHjn X-Gm-Gg: AYBFou1Nf/eetpa43TrFaSr5KREX0VSbDjUXhhEAxvDAZGcJtjPrgQXpyHt0TTWnHd9 HnPL9m76XZJ146+9ko6QjvjdEy4MzlEBrH7LAx9S84Q5qfxMEV7dtPhrUWUURowqFwpHXA88brw BoRQw2Plr++EfFaud1lbvfsGMTY4WQw99icmTKUS7knslDMdR3BeDS4qlDxCuxRGuEtiw6oExGl f7H40CJYpZgO0JxtfViUY0ypU8FVhgXbAPiv/Mf6DSV2c8hww9kgGQenCw3XXWVWt0tQ0JRz3o+ UBHn7dfWpwx1yVpV7Qgia64i5MUIqLQUrH/dWYogCxze7XKTYBTD79mXKApmHhZ1ccwKdhyuknp Lfenm19vvo3LnO15jeTqgHZBwaDmWTVZxHh6/jxhIyybogFk+LJqMaIDkpuLDyCFqQB14vNo843 FtNOBIL4BDObk1iSoXpjh+D8lSyI6GM1jf X-Received: by 2002:a05:6000:388:b0:48d:ed0a:e064 with SMTP id ffacd0b85a97d-48ded0ae0b8mr17515175f8f.24.1792154285681; Fri, 16 Oct 2026 05:38:05 -0700 (PDT) X-Received: by 2002:a05:6000:388:b0:48d:ed0a:e064 with SMTP id ffacd0b85a97d-48ded0ae0b8mr17515111f8f.24.1792154285276; Fri, 16 Oct 2026 05:38:05 -0700 (PDT) From: Sanne Raymaekers To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, fam@euphon.net, kwolf@redhat.com, hreitz@redhat.com, Sanne Raymaekers Subject: [PATCH v3 3/3] block/vmdk: add eos marker for stream optimized disks Date: Fri, 16 Oct 2026 14:37:50 +0200 Message-ID: <20261016123750.94769-4-sraymaek@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261016123750.94769-1-sraymaek@redhat.com> References: <20261016123750.94769-1-sraymaek@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=sraymaek@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.24, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1792154352990158500 Content-Type: text/plain; charset="utf-8" The end of stream marker should be at the very end of a stream optimized disk. It consists of a regular marker struct with `val`, `size` and `type` set to 0. It is then padded with more 0s to fill out a sector. This effectively results in 512 zero bytes.[^1] [^1] Virtual Disk Format 5.0 Technical Note. Signed-off-by: Sanne Raymaekers --- block/vmdk.c | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/block/vmdk.c b/block/vmdk.c index e090e122f1..b1848130a0 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -195,6 +195,13 @@ typedef struct VmdkGrainMarker { uint8_t data[]; } QEMU_PACKED VmdkGrainMarker; =20 +typedef struct EosMarker { + uint64_t val; + uint32_t size; + uint32_t type; + uint8_t pad[512 - 16]; +} QEMU_PACKED EosMarker; + enum { MARKER_END_OF_STREAM =3D 0, MARKER_GRAIN_TABLE =3D 1, @@ -987,12 +994,7 @@ vmdk_open_vmdk4(BlockDriverState *bs, BdrvChild *file,= int flags, VMDK4Header header; uint8_t pad[512 - 4 - sizeof(VMDK4Header)]; =20 - struct { - uint64_t val; - uint32_t size; - uint32_t type; - uint8_t pad[512 - 16]; - } QEMU_PACKED eos_marker; + EosMarker eos_marker; } QEMU_PACKED footer; =20 ret =3D bdrv_pread(file, bs->file->bs->total_sectors * 512 - 1536, @@ -2182,23 +2184,29 @@ vmdk_co_pwritev_compressed(BlockDriverState *bs, in= t64_t offset, int64_t bytes, QEMUIOVector *qiov) { if (bytes =3D=3D 0) { - /* The caller will write bytes 0 to signal EOF. - * When receive it, we align EOF to a sector boundary. */ + /* The caller will write bytes 0 to signal EOF. */ BDRVVmdkState *s =3D bs->opaque; - int i, ret; + int ret; int64_t length; + QEMU_AUTO_VFREE EosMarker *eos_marker =3D NULL; =20 - for (i =3D 0; i < s->num_extents; i++) { - length =3D bdrv_co_getlength(s->extents[i].file->bs); - if (length < 0) { - return length; - } - length =3D QEMU_ALIGN_UP(length, BDRV_SECTOR_SIZE); - ret =3D bdrv_co_truncate(s->extents[i].file, length, false, - PREALLOC_MODE_OFF, 0, NULL); - if (ret < 0) { - return ret; - } + /* Stream optimized disks should only contain a single extent. */ + assert(s->num_extents =3D=3D 1); + + /* + * Stream optimized disks end with an EOS marker, + * consisting of 512 null bytes. + */ + eos_marker =3D qemu_blockalign0(bs, sizeof(EosMarker)); + length =3D bdrv_co_getlength(s->extents[0].file->bs); + if (length < 0) { + return length; + } + length =3D QEMU_ALIGN_UP(length, BDRV_SECTOR_SIZE); + ret =3D bdrv_co_pwrite(s->extents[0].file, length, sizeof(EosMarke= r), + eos_marker, 0); + if (ret < 0) { + return ret; } return 0; } --=20 2.55.0