From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LKbUx-0006H7-Jp for qemu-devel@nongnu.org; Wed, 07 Jan 2009 11:43:15 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LKbUw-0006Gr-Ix for qemu-devel@nongnu.org; Wed, 07 Jan 2009 11:43:14 -0500 Received: from [199.232.76.173] (port=57709 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LKbUw-0006Go-8b for qemu-devel@nongnu.org; Wed, 07 Jan 2009 11:43:14 -0500 Received: from savannah.gnu.org ([199.232.41.3]:50971 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LKbUv-0006Q6-WF for qemu-devel@nongnu.org; Wed, 07 Jan 2009 11:43:14 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1LKbUv-0002Op-HS for qemu-devel@nongnu.org; Wed, 07 Jan 2009 16:43:13 +0000 Received: from aliguori by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1LKbUv-0002Ol-9r for qemu-devel@nongnu.org; Wed, 07 Jan 2009 16:43:13 +0000 MIME-Version: 1.0 Errors-To: aliguori Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Anthony Liguori Message-Id: Date: Wed, 07 Jan 2009 16:43:13 +0000 Subject: [Qemu-devel] [6212] Fix compressed qcow2 (Gleb Natapov) Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 6212 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6212 Author: aliguori Date: 2009-01-07 16:43:13 +0000 (Wed, 07 Jan 2009) Log Message: ----------- Fix compressed qcow2 (Gleb Natapov) Correctly calculate number of contiguous clusters. Acked-by: Kevin Wolf Signed-off-by: Gleb Natapov Signed-off-by: Anthony Liguori Modified Paths: -------------- trunk/block-qcow2.c Modified: trunk/block-qcow2.c =================================================================== --- trunk/block-qcow2.c 2009-01-07 16:41:47 UTC (rev 6211) +++ trunk/block-qcow2.c 2009-01-07 16:43:13 UTC (rev 6212) @@ -620,6 +620,9 @@ int i; uint64_t offset = be64_to_cpu(l2_table[0]) & ~mask; + if (!offset) + return 0; + for (i = 0; i < nb_clusters; i++) if (offset + i * cluster_size != (be64_to_cpu(l2_table[i]) & ~mask)) break; @@ -981,6 +984,12 @@ /* how many available clusters ? */ while (i < nb_clusters) { + i += count_contiguous_clusters(nb_clusters - i, s->cluster_size, + &l2_table[l2_index + i], 0); + + if(be64_to_cpu(l2_table[l2_index + i])) + break; + i += count_contiguous_free_clusters(nb_clusters - i, &l2_table[l2_index + i]); @@ -989,12 +998,6 @@ if ((cluster_offset & QCOW_OFLAG_COPIED) || (cluster_offset & QCOW_OFLAG_COMPRESSED)) break; - - i += count_contiguous_clusters(nb_clusters - i, s->cluster_size, - &l2_table[l2_index + i], 0); - - if(be64_to_cpu(l2_table[l2_index + i])) - break; } nb_clusters = i;