qcow2: Refactor qcow2_free_any_clusters
Zero clusters will add another cluster type. Refactor the open-coded cluster type detection into a switch of QCOW2_CLUSTER_* options so that the detection is in a single place. This makes it easier to add new cluster types. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
8e37f681d5
commit
c7a4c37a0f
@ -679,31 +679,34 @@ void qcow2_free_clusters(BlockDriverState *bs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* free_any_clusters
|
* Free a cluster using its L2 entry (handles clusters of all types, e.g.
|
||||||
*
|
* normal cluster, compressed cluster, etc.)
|
||||||
* free clusters according to its type: compressed or not
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void qcow2_free_any_clusters(BlockDriverState *bs,
|
void qcow2_free_any_clusters(BlockDriverState *bs,
|
||||||
uint64_t cluster_offset, int nb_clusters)
|
uint64_t l2_entry, int nb_clusters)
|
||||||
{
|
{
|
||||||
BDRVQcowState *s = bs->opaque;
|
BDRVQcowState *s = bs->opaque;
|
||||||
|
|
||||||
/* free the cluster */
|
switch (qcow2_get_cluster_type(l2_entry)) {
|
||||||
|
case QCOW2_CLUSTER_COMPRESSED:
|
||||||
if (cluster_offset & QCOW_OFLAG_COMPRESSED) {
|
{
|
||||||
int nb_csectors;
|
int nb_csectors;
|
||||||
nb_csectors = ((cluster_offset >> s->csize_shift) &
|
nb_csectors = ((l2_entry >> s->csize_shift) &
|
||||||
s->csize_mask) + 1;
|
s->csize_mask) + 1;
|
||||||
qcow2_free_clusters(bs,
|
qcow2_free_clusters(bs,
|
||||||
(cluster_offset & s->cluster_offset_mask) & ~511,
|
(l2_entry & s->cluster_offset_mask) & ~511,
|
||||||
nb_csectors * 512);
|
nb_csectors * 512);
|
||||||
return;
|
}
|
||||||
|
break;
|
||||||
|
case QCOW2_CLUSTER_NORMAL:
|
||||||
|
qcow2_free_clusters(bs, l2_entry & L2E_OFFSET_MASK,
|
||||||
|
nb_clusters << s->cluster_bits);
|
||||||
|
break;
|
||||||
|
case QCOW2_CLUSTER_UNALLOCATED:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
qcow2_free_clusters(bs, cluster_offset & L2E_OFFSET_MASK,
|
|
||||||
nb_clusters << s->cluster_bits);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user