From patchwork Mon Jun 5 05:53:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ashijeet Acharya X-Patchwork-Id: 9765597 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 03C28602B6 for ; Mon, 5 Jun 2017 05:57:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E9AFB23B24 for ; Mon, 5 Jun 2017 05:57:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DE30B27F85; Mon, 5 Jun 2017 05:57:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 74F1923B24 for ; Mon, 5 Jun 2017 05:57:58 +0000 (UTC) Received: from localhost ([::1]:59733 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dHl1Z-0000ub-KK for patchwork-qemu-devel@patchwork.kernel.org; Mon, 05 Jun 2017 01:57:57 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42471) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dHkwo-0006Ir-6W for qemu-devel@nongnu.org; Mon, 05 Jun 2017 01:53:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dHkwn-000823-FZ for qemu-devel@nongnu.org; Mon, 05 Jun 2017 01:53:02 -0400 Received: from mail-pf0-x244.google.com ([2607:f8b0:400e:c00::244]:33997) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dHkwn-00081c-9v; Mon, 05 Jun 2017 01:53:01 -0400 Received: by mail-pf0-x244.google.com with SMTP id w69so19512233pfk.1; Sun, 04 Jun 2017 22:53:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZHvK2Vys1FDOQRWCQbXjjaMPx12sSGaapnbVk2Pi7bM=; b=DHynSDxPy2RKuTamuS/A8DrORL8CVhy032UNkGdnoAgB5o37SECpYoTWPR6SQa/3Wm OHUnuBQ36rUpaJsKl93ziUQuy5GiwR5QGu0nfFrwbyjYkAi9qTrdpUtCkKEzL+gC2IRH +FjxEZDcDzQKdENGcvabd8YW7z7B3e749PPfHdMMVNVYeZ+2NvVxcfceqdS0rTtLAd4i 9sui505D5YqIPcIDhgHWPkv9Mz4BEb+RGfNUaxEeHUZLp6gCUYKk8p+QA+T42kSLC6MZ I608qSfV/1xVqiRfeE3AnMs7t2lqyOxcq4fEdeT6diIRs7IBbKvJY1AVPEvFzBkMjMh5 DrqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZHvK2Vys1FDOQRWCQbXjjaMPx12sSGaapnbVk2Pi7bM=; b=DdeY+XVXCjU+rtvjGmFdp/HQwuFqeBJ6rTVFXeWQW4FnL3OHAAWu2Y4fUA11BG0MaA CMASiUg68D9OPf49693/UzUMBme39eNfDIRMCdjb2lv41W7ygDxpdBjTguwCDCBc+1ER WicGOq1nFgMFBOT5uIXoGtK8sKfqGWN0w2S8sT6d/3wDRcHuKLiJdG+Oz3uu3qczrNOX Os8cWqdi4JVkYXfT6WQI2GIVZMJv4ZVJEhsDRLDvnZhxgmGeJsWn36/9vcZ6mnD4JnbY ysEkBvY9Otnsc7kojW/xl7A/nJ6aM7J4FGDrCgu5m1ndZXjU7pe8e/wyIpGOD0hFXKIV AWPQ== X-Gm-Message-State: AODbwcC9anvFJiEHDl+l970heEam065EgtSdAWRSfirogEESKqIU+6Xy 8dWuFxHF4omcSbztSnU= X-Received: by 10.84.177.131 with SMTP id x3mr13396888plb.39.1496641980344; Sun, 04 Jun 2017 22:53:00 -0700 (PDT) Received: from linux.local ([47.247.8.225]) by smtp.gmail.com with ESMTPSA id s68sm961639pfj.33.2017.06.04.22.52.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 04 Jun 2017 22:52:59 -0700 (PDT) From: Ashijeet Acharya To: famz@redhat.com Date: Mon, 5 Jun 2017 11:23:24 +0530 Message-Id: <1496642007-8309-6-git-send-email-ashijeetacharya@gmail.com> X-Mailer: git-send-email 2.6.2 In-Reply-To: <1496642007-8309-1-git-send-email-ashijeetacharya@gmail.com> References: <1496642007-8309-1-git-send-email-ashijeetacharya@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::244 Subject: [Qemu-devel] [PATCH v5 5/8] vmdk: Set maximum bytes allocated in one cycle 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: kwolf@redhat.com, qemu-block@nongnu.org, stefanha@gmail.com, qemu-devel@nongnu.org, mreitz@redhat.com, Ashijeet Acharya , jsnow@redhat.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Set the maximum bytes allowed to get allocated at once to be not more than the extent size boundary to handle writes at two separate extents appropriately. Signed-off-by: Ashijeet Acharya Reviewed-by: Fam Zheng --- block/vmdk.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/block/vmdk.c b/block/vmdk.c index 5647f53..fe2046b 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -1624,6 +1624,7 @@ static int vmdk_pwritev(BlockDriverState *bs, uint64_t offset, uint64_t cluster_offset; uint64_t bytes_done = 0; VmdkMetaData m_data; + uint64_t extent_end; if (DIV_ROUND_UP(offset, BDRV_SECTOR_SIZE) > bs->total_sectors) { error_report("Wrong offset: offset=0x%" PRIx64 @@ -1637,9 +1638,17 @@ static int vmdk_pwritev(BlockDriverState *bs, uint64_t offset, if (!extent) { return -EIO; } + extent_end = extent->end_sector * BDRV_SECTOR_SIZE; + offset_in_cluster = vmdk_find_offset_in_cluster(extent, offset); - n_bytes = MIN(bytes, extent->cluster_sectors * BDRV_SECTOR_SIZE - - offset_in_cluster); + + /* truncate n_bytes to first cluster because we need to perform COW */ + if (offset_in_cluster > 0) { + n_bytes = MIN(bytes, extent->cluster_sectors * BDRV_SECTOR_SIZE + - offset_in_cluster); + } else { + n_bytes = MIN(bytes, extent_end - offset); + } ret = vmdk_get_cluster_offset(bs, extent, &m_data, offset, !(extent->compressed || zeroed),