From nobody Thu Oct 22 19:25:23 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=1791544234; cv=none; d=zohomail.com; s=zohoarc; b=Fs//fAiIayq6oA+m2/TT+yYlc36zcSQ8lW5Q3HxRZvwM1VqxWcjMhKldOm7E9UrKogJrJPGMxuVFuujCMIJC7ASZAIdW7wrDg0nCGyAfcVdfqIr271FHUDNAirxYpihLKUYSelF+Z3qQcMSmIJkYNrW7MTab+Je3ZM5fVWFIG/o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791544234; 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=SP3jzlyEfhQ2lSBO4QpbitBdHt12HNDEPoatt7VqxiI=; b=Bxyn7l0vdOu8/2XdOTQg7j7V9He6/A2TmwNcAi+XGX8O4HbZwtRfzMibVPVrtV0aPsNIDusHAdEBxyK7A5QpplH6IDu++4KaBRj7JmC8CkLKB/udEqbBEXzbMWJevK/0uIvBBTxKVFNTE+CtXFua4JWo98YvjD5rsOu+mSFKTZ4= 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 1791544234288411.37916784185995; Fri, 9 Oct 2026 04:10:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xF8UB-0006Kq-UB; Fri, 09 Oct 2026 07:09:59 -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 1xF8U8-0006K0-0K for qemu-devel@nongnu.org; Fri, 09 Oct 2026 07:09:56 -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 1xF8U6-0004Ky-Gg for qemu-devel@nongnu.org; Fri, 09 Oct 2026 07:09:55 -0400 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-537-JUwBsMJRODK9jpWowQiiQg-1; Fri, 9 Oct 2026 11:09:46 +0000 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-48b02d63407so4148518f8f.0 for ; Fri, 09 Oct 2026 04:09:46 -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-48db94e530esm3295680f8f.13.2026.10.09.04.09.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2026 04:09:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1791544193; 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=SP3jzlyEfhQ2lSBO4QpbitBdHt12HNDEPoatt7VqxiI=; b=eyCVGVd0ICYbX9F9HAthbF1oC1RbFx5sILmMUDLAzfysWmL6lOu8D1T6xOXuOSbB2izJe/ 8fbQIw6APZWCZ/ftUoYFP+tmkZneXLYHaIyajMECoJGlV6vhXFj48jKwfgW8MDW1deIHB3 5396hEDCTj84z5geMNQeJdBKugXmWX8= X-MC-Unique: JUwBsMJRODK9jpWowQiiQg-1 X-Mimecast-MFC-AGG-ID: JUwBsMJRODK9jpWowQiiQg_1791544185 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1791544185; x=1792148985; 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=SP3jzlyEfhQ2lSBO4QpbitBdHt12HNDEPoatt7VqxiI=; b=FpW8+Zpo3gJ5jE0B9o5jWfWBpNjd/c7YfSYMNgAtOfdG7TYqy09uKe5Uo9EpIMPyrb EM7brCLZ5Z0ztl7hIhao1SyEHQHxt/Iz6kvItSchwtFBiTz3PcITz8Aj6PDtSHyAxQKs g+DV7pSPZw9Lc0760bWZMFwLooAJccqFvYMg/JN2zxeq00BsUBTpfDMpxMMOcYhng/v4 YB7F4MDASLuVpQvU1GTuMhMa8AQpW9GP3C+RgvstuS1xAvOnhZrg06vWcgLTNCAgAL0/ sXHU447hKj93fStRjXysrUMhljH0EJvpWio9Wzfes0ugdeUaygzbNtWaErjZ9gKKNy9D 641w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791544185; x=1792148985; 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=SP3jzlyEfhQ2lSBO4QpbitBdHt12HNDEPoatt7VqxiI=; b=FaZDloFY37cgbFjnoKRfQMnEswOCk4/M/4DecgHLiGjqLYGDqAxUtrBZtZ3/5W6JFT ukFNVSCtcgXiO8Z8V11xPEh33vYBUffVO5kVezbj2SKta4g1WbzoOqW4NzaqCwf210Nf MrJayBGDgeywhdi8BTS3aOUtyhKXC4XSI3y1pQExyajEY6rFH1DmVSSZEHBMJQJDFOXX YW+g8+oWWQgxbL+ehGAlW04nzjFcSXh1iEn5CS5Ae9+XApbf3tNAmPC/xXj6gH43/cME 0BHRczjrrhLCkocdJv3SAsrzFtXBhLAZ8Nu1/KXlNpTlOnB7Rodzmh9taQzym2/ofhoc QOMQ== X-Gm-Message-State: AFq9FYK0Vn8VEcMtXje4zxaiJIjTWW4ZUhuF87MzjvkZpHFgEJ4CRWqO 5PpdlfWn0qwKFEDsdviiL0AyNHBgCO4+CUykWdxlOgHpCkYqspI2ImbpB0hHFTuYxLnjlx6J4qP GPA2lQ5egpzlqo593ltBootF7UQEgSWDqVpAijDR2F09Sc5DiECjfqGiMEpWEJWLESBJ4Uvui+Q 7f1DgaFtyZ90bJumU7G7z2XKb0yqhm5PXfiP5NOddi X-Gm-Gg: AYBFou1DaFEFgge6PAXSedWlpgMWauuzHzXkEQtM6J9mxEVKVZjfbw4M3l6BJMaXVWe MahaMT5e5P5gNxDyo9tUdCs9zA5oepU5pbb/B2RqDYx7VerMXDnMzXkSsN+zFZ9fVy5U1KVcSj+ LMuJSus7rzJW0g5UAI+YsMGDhKarrl/ofJjKaGO3odNUGbznWcMVyey2RyQLg+1LrRiuJ/oyVCh 1hBWeaoU42keTV7ZdHSrSxvcZosFWeraHvm3U9bVgS6gZxWbHHn6NqjlzH01vfAUNvlrLFoqmOS sbAgkdKzPVmy7j+qN7F+BtIxUmzWUyAalTxvSnex98bClt1yPh0OMZWVDWUnCeqnNjZEzvnjwa/ /Al9nUrf/6DeYC4hHN07Xsj1se7Wk/XC/JQeP/MYQEee7JW13JJ5CxnrtqWxuwaBdFJ+Nf5ftrJ 4dyIfxJqBRU0ulmR5Z4PZoFPt4j5i2gjVP X-Received: by 2002:adf:e009:0:10b0:48c:7dac:8957 with SMTP id ffacd0b85a97d-48dbacda6b7mr2006160f8f.32.1791544185274; Fri, 09 Oct 2026 04:09:45 -0700 (PDT) X-Received: by 2002:adf:e009:0:10b0:48c:7dac:8957 with SMTP id ffacd0b85a97d-48dbacda6b7mr2006113f8f.32.1791544184804; Fri, 09 Oct 2026 04:09:44 -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 v2 1/3] block/vmdk: align stream optimized data grains on 512 byte chunks Date: Fri, 9 Oct 2026 13:09:03 +0200 Message-ID: <20261009110905.905070-2-sraymaek@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261009110905.905070-1-sraymaek@redhat.com> References: <20261009110905.905070-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, RCVD_IN_MSPIKE_H2=0.001, 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: 1791544236995158500 According to the spec: "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 | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/block/vmdk.c b/block/vmdk.c index cd8b4ec7c8..c70c73515c 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -1730,16 +1730,22 @@ 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_SE= CTOR_SIZE, + offset, skip_start_bytes, skip_end_byt= es, + zeroed); + if (ret) { + return ret; + } } if (m_data) { m_data->new_allocation =3D true; @@ -1891,6 +1897,7 @@ vmdk_write_extent(VmdkExtent *extent, int64_t cluster= _offset, =20 write_end_sector =3D DIV_ROUND_UP(write_offset + n_bytes, BDRV_SECTOR_= SIZE); =20 + /* Stream optimized (compressed) clusters should be aligned on 512 byt= e chunks. */ if (extent->compressed) { extent->next_cluster_sector =3D write_end_sector; } else { --=20 2.55.0 From nobody Thu Oct 22 19:25:23 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=1791544234; cv=none; d=zohomail.com; s=zohoarc; b=LFWOrL+vWftDBY0Fe/Pq8QaHLrK/e+NJm7UMf9zj4N9bt3wvhhuofe2CFokMZMprWrlfDp6i2RYgplYq5o7bF1rbExd3uhjB0w0ZPfm5bwCBoLJQCcyKES4OFBt/sWBOXsK8hQfET+TYr+KvPDun+yPF1EZnwE+EJdk+4/DkT00= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791544234; 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=JC+nI275e75z787S60ejsvVaEWp5q4sOLxvzrk+zmYQ=; b=gskODIfwPDMyV4d3f6GwpYY6U3316o+usrtFKcFBLrBnj4Lo2AsuoteIHgWfpcMkTv64uEfyRYijRQZrxkObwBt7Ys/2jCBgdRd8Bcr3KixyoQpJK8x59rddYEo2srsBoxoB9Bx5cL6rrDZpEjoozyHh4iCgQWVCwlOMIKT2a6w= 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 17915442345091019.3412611963997; Fri, 9 Oct 2026 04:10:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xF8UI-0006Nz-R9; Fri, 09 Oct 2026 07:10:06 -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 1xF8UF-0006LT-NV for qemu-devel@nongnu.org; Fri, 09 Oct 2026 07:10:04 -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 1xF8UE-0004M4-42 for qemu-devel@nongnu.org; Fri, 09 Oct 2026 07:10:03 -0400 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-295-9RRVceU0M_adcfi5cnZEng-1; Fri, 9 Oct 2026 11:09:48 +0000 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-48c46582442so3354478f8f.0 for ; Fri, 09 Oct 2026 04:09:48 -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-48db94e530esm3295680f8f.13.2026.10.09.04.09.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2026 04:09:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1791544201; 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=JC+nI275e75z787S60ejsvVaEWp5q4sOLxvzrk+zmYQ=; b=hzGC8+OZ57azhUB1GgNygVNufhdLioZZFCpN2VSM6Pod2E1HLTnzFlVkGB0/T1067Pk7PX Rq7kNI26TJKXrKcynLvND1mNQIRvE3Jkj1Q7p13Cj2La8zptmPwxg3t6Dpmmkqx31DqXFK 4Q0i0Cv/bv1OnFRfWzFskJ2MI0t+2J8= X-MC-Unique: 9RRVceU0M_adcfi5cnZEng-1 X-Mimecast-MFC-AGG-ID: 9RRVceU0M_adcfi5cnZEng_1791544187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1791544187; x=1792148987; 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=JC+nI275e75z787S60ejsvVaEWp5q4sOLxvzrk+zmYQ=; b=MZOTlxX3kqadiI7GRRO4k87Oh9feV4bklB1SoDgBDhocgnfBE5UHKz9Cwj8B+jCPeO gXCo88TH+hDL5t7WzC4LaSoeoo8j47Xgaqo1NbQb8jbCcCAviS+iphDGhwEkBKppwGiA njqEm1VJg/RXHjp8OyWxSjOVUDka/JmriWPp7S4za21DiPIuqN6hVXe4LfE/NqB+8FOl 8Yyqm7Q/2Cz/JgkOgiGdeDZ/s3AAMflY5gP5TwUOEclcmgVxgwD8S/h+J/k2n9XpsDUO IlW3x4XnKLU9YnUoQgkpA8Fpjl2y6D5G0RX+tWIPJwGBw2d5F/MuZbVqx3eoDkCMT2pK ygtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791544187; x=1792148987; 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=JC+nI275e75z787S60ejsvVaEWp5q4sOLxvzrk+zmYQ=; b=nuJv3XT6T/hEiaWxVr22sEt8rRHM6niuLdpML8XdqqJFBPmJyujJHDQfKKeOFmUYGt PzkD6XHS84SToESaf41HvK9aP5uayYX6f9i0XyCx50Ehzw+nhhtfqMMqIwGLCAD2z904 cPcZ/q90If8VXwZB9C7AarNkmXWvK33o1O4Gk26fNpXZ2g2DcBT1yI/kFcgS4JC9iBcA x0zGsXxIn2WqQyia3jWyyGBPgAACi0wvredo5r8EkmGCb+dZj+RXJ2HXmysYrf3bEWN+ UKZPBuTAjBnFFqa+Z1gsNvFoflRJZe/DYASDiwOM40Ps+RQe3H0WYd2jBGB7j0wX1e1n CHiA== X-Gm-Message-State: AFq9FYICkn1/dwnNSTmG6oRAfOJlGO9s5ZbIUaGNnhXmf3yJMMymUDAL gF4X63jmlbES/VRNPkoyrt4EogqeEUo2YsJs30LepcTVEI7HTvGVOnwsUl7wQFQarNNn+l25tOK SiV23fnqfIjaLfYPeioUfW0ub9sTMkiasQVlPr0bIC4wOCeQjk4e+Rsp/xOv5mJcVG62W1pwWUk XP9Ag8fF1NSZcdIwy2bpv6oFab7XmCa7mUKgaABd3T X-Gm-Gg: AYBFou2qF168MRHc95lqHZLJT8LeY2deh4qYYlkno2IOD4M2OA2fhMm1afFlhlabb4I c7xHhWEJhEvncQV7Ll50Fzd4EGHY6egm7+zqFhdwYdX9F8/+S+9oAlNxC1/83JRZEfV5RPyDWK8 pmSOX6ypIynwwg6UmJvjxUnUW/ljgznhpcEMUewuawwjmTFuw5oKoiC8PsA457vv3/UsE/BXSIt PCHwRsRgw86QAem3v1mjFoR5RempACE98tOStJO/qz1Q/PeqegatYQcjLmJHzDIMrTUtN8RVME8 y3JjZvO1qsAqpEwlWI8llh1rdRjFFoVzXMWmVhZy3yrcOt/0YhYl6/dDs0JagtVug49FF2vATmX oL9CDXbnNKuBcJL3k/vx44/e6v2WKyyWNPw8KmQkYkeGjmRWxE4JYqf+r++dpP7vYqOeYqcEcm6 wNWqbad0yKzEbd6PyKdwcWxzjfYaoDtyJ7 X-Received: by 2002:a05:6000:41c8:b0:488:8132:141b with SMTP id ffacd0b85a97d-48dba9bdc8bmr2969757f8f.20.1791544187112; Fri, 09 Oct 2026 04:09:47 -0700 (PDT) X-Received: by 2002:a05:6000:41c8:b0:488:8132:141b with SMTP id ffacd0b85a97d-48dba9bdc8bmr2969634f8f.20.1791544185715; Fri, 09 Oct 2026 04:09:45 -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 v2 2/3] block/vmdk: skip RGD for stream optimized disks Date: Fri, 9 Oct 2026 13:09:04 +0200 Message-ID: <20261009110905.905070-3-sraymaek@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261009110905.905070-1-sraymaek@redhat.com> References: <20261009110905.905070-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, RCVD_IN_MSPIKE_H2=0.001, 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: 1791544237011158500 Content-Type: text/plain; charset="utf-8" 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, 28 insertions(+), 18 deletions(-) diff --git a/block/vmdk.c b/block/vmdk.c index c70c73515c..68eebd4a78 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -2244,8 +2244,8 @@ 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; @@ -2260,8 +2260,15 @@ 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 * g= t_count); + } + header.grain_offset =3D ROUND_UP(header.gd_offset + gd_sectors + (gt_size * gt_count), header.granularity); @@ -2301,21 +2308,24 @@ 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_S= ECTOR_SIZE, + gd_buf_size, gd_buf, 0); + if (ret < 0) { + error_setg_errno(errp, -ret, "failed to write VMDK backup grai= n 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); @@ -2324,7 +2334,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; @@ -2591,8 +2601,8 @@ vmdk_co_do_create(int64_t size, extent_idx =3D 1; while (created_size < size) { int64_t cur_size =3D MIN(size - created_size, extent_size); - extent_blk =3D extent_fn(cur_size, extent_idx, flat, split, compre= ss, - zeroed_grain, opaque, errp); + extent_blk =3D extent_fn(cur_size, extent_idx, flat, split, compre= ss, zeroed_grain, + opaque, errp); if (!extent_blk) { ret =3D -EINVAL; goto exit; --=20 2.55.0 From nobody Thu Oct 22 19:25:23 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=1791544245; cv=none; d=zohomail.com; s=zohoarc; b=MYyBq4VZNG4n8+2wGGwpa2Pa23nEGkvzjbrbM+77OAExEJrOXyZfoBSlQ/EJxy8eG5mVHvULpy4hhFqsb1O7S01nHfFVS5lSChennO5ltU0WFsDyu3Hbhm9oTdmPAmTef6PPTvWcdWIRa98dlNzWmPJzhBbZwhiPxOa/ZaXMQFo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791544244; 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=THbHmPcOnWna3rDRL3qlDBa4vGxL3Q3ZNaUJ270cj4E=; b=P+rY0InluKw7W8dJhVybRBu+tMziFLnSbybzb3/p9hcakmCdUwMkryi7TzHu3P/yRE1d/sjYz+i/DeYyVFyg5nDs0Ux+0HD6+xY59Prd2HcOntkbnOkKwr/aWZFcHgzsXk3bSjul2z+TcH7h/n0Xl2AT5Nbd8h7kHe0hOS/9jEA= 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 1791544244990850.8923568630879; Fri, 9 Oct 2026 04:10:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xF8U8-0006K3-5r; Fri, 09 Oct 2026 07:09:56 -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 1xF8U5-0006JV-2Z for qemu-devel@nongnu.org; Fri, 09 Oct 2026 07:09: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 1xF8U3-0004KQ-Iq for qemu-devel@nongnu.org; Fri, 09 Oct 2026 07:09:52 -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-672-SDsz--VYNjaNrcLmuSUEiw-1; Fri, 9 Oct 2026 11:09:48 +0000 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4a01d1fb07bso63924685e9.2 for ; Fri, 09 Oct 2026 04:09:48 -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-48db94e530esm3295680f8f.13.2026.10.09.04.09.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2026 04:09:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1791544190; 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=THbHmPcOnWna3rDRL3qlDBa4vGxL3Q3ZNaUJ270cj4E=; b=MNpT4o53B+fnrDOqzb6aMtqlQbU4Xp9h7i2RfXkk2HEYQ4RAYurbki86tB3dujOMM6VXl0 8ke6VXoq8Cx/oQvuhYYKnd+iTSf7cNUmitqPhyOIf7G+s26ZHE4oJXR8BmPlN59anW/rT3 rh7H7YE0UrM01D/ljPE4/Lkbsk771x4= X-MC-Unique: SDsz--VYNjaNrcLmuSUEiw-1 X-Mimecast-MFC-AGG-ID: SDsz--VYNjaNrcLmuSUEiw_1791544188 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1791544187; x=1792148987; 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=THbHmPcOnWna3rDRL3qlDBa4vGxL3Q3ZNaUJ270cj4E=; b=GsZl0d/CRVi67JLNwu02krc1QGbBsvEXFqUE5le6XR0f9+FCxpMEJUZGxDSqdUw2KS T+0Is4wEAfeFsLGXia7/EOT1T84o3euL2P5p/1fRVKvx8UrbD/ZwGkngxr84YRto/c9I kzxw9ipaxJ4Yoiud+rZ8riJ+xgojpIRq760MmS2CWhxCxskZCNPJaVNlwTu1ob//8O3F faVCDVHu15VGT3q7JERCWO1k5FPnL2DxUm086qcoMJ/UuIiZVASzBV/IC+T5FSF5ugZE 7qdlb3ZGqowd233TBzWtMoTT8ZZDZMOfvbV/AerCs6DTtfSOdljUjFObXk8ZYUPEu5y+ 9PKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791544187; x=1792148987; 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=THbHmPcOnWna3rDRL3qlDBa4vGxL3Q3ZNaUJ270cj4E=; b=iX9iOM2eyZvt77M0CTsqqjTyEOda1pH8SQ0L2EImKCMT3JaSxttd6+P9G2HEypjrip PkhoO5oGDQpzfvZSG6t5PCeK64/IERwufOE4ZWrrkRrSA1lQncfJaeq8oLFfZ4DlkORa A083Dqenhwn1Rz+kIREwZAuthKfqjWCpHsMPGRZBsuKPtROApRp3dlmcu8YxTb5v4AqJ qOXw/KPgCuOP2c3OMLNwHUSxSccLjfr8lfWRIe9O7oHri8vwuRR4ohEiRUrKd+nfTiPJ P1GXE5Q0zK1joumD9dcW9Hq25uCKdhNDMYz3UVmPENCOc7x6WB2M6R0wJyrRddsTMlWT onQg== X-Gm-Message-State: AFuF++m1WjBkRkQ0YvIFbrEUiy2V1ON1jWXY8DCZhw7wDiyRq3rYJ1e0 4jvCmTwBJfBsPv/S2r055diNZTZVa1YqzKzJJ+z/H7VzJ5+8iCh12aYixL/x636gU4R+bkq5uqM FStMsPM0T2lzEBSRxcfjB4LokDm75RPAE2t0YEh++cmAS6bA4YA8Sr+LYzIduPTr6oV19iLHHn8 4VmoANK9U8rKo6tnNvMSkmNWcuzi/BQo+OLrKpTyKV X-Gm-Gg: AYBFou3Mdn5G+K6mh0wn8xfdBdL5uzYD1oI2u/V4hwKDwQQVnurnVvijU2Dpgmn99ZN htmswHJ+WFVhlsUiAmiv2IJa9fJYHFbKxjLJphbqK53qwL9EwE4Rv4PZXYVs61rfotHfTlcSQf1 g7YKfcFyzQcvkwyLJbai2d7RJKR+UqeMF+io6Pg0ebjpvvMKG4h1itI8g83riwrynuMWHL/zaVu JF0Exk2E/CmgXtrBTszFGEn5nBtjLag6vx0mHmIlRasZPRSl9WwteQ1PekErmFNZfEk8OIQTGnY /eDsMMmRMP1bb9zBE65sqK+6/P+7QXt9eZZCdpIU/oGkiyDnn2wU4JUYivasGTpDYxkxo6k+HV/ kWvzZiD9gXV3H4B9B4Bw4dgke8bjWW9LfsOG0UW0ja+Fgyp5dB4F2/KIMCk+4X/Wck6ArA+d98h V/7FcUuKBsCj+Qi7ULYPtnDJEqHV2xcySI X-Received: by 2002:a05:600c:4ec9:b0:4a1:7739:f9ab with SMTP id 5b1f17b1804b1-4a18e4ca953mr27318385e9.20.1791544187444; Fri, 09 Oct 2026 04:09:47 -0700 (PDT) X-Received: by 2002:a05:600c:4ec9:b0:4a1:7739:f9ab with SMTP id 5b1f17b1804b1-4a18e4ca953mr27318005e9.20.1791544187016; Fri, 09 Oct 2026 04:09:47 -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 v2 3/3] block/vmdk: add eos marker for stream optimized disks Date: Fri, 9 Oct 2026 13:09:05 +0200 Message-ID: <20261009110905.905070-4-sraymaek@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261009110905.905070-1-sraymaek@redhat.com> References: <20261009110905.905070-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.133.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, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, 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: 1791544246973158500 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 | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/block/vmdk.c b/block/vmdk.c index 68eebd4a78..4811928595 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, @@ -2180,24 +2182,28 @@ 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 51= 2 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; } return vmdk_co_pwritev(bs, offset, bytes, qiov, 0); --=20 2.55.0