diff mbox series

[v5,11/31] qcow2: Add offset_into_subcluster() and size_to_subclusters()

Message ID bf2f5e0e41d5c51cde60cd457fd6d69d0f6ab030.1588699789.git.berto@igalia.com
State New
Headers show
Series Add subcluster allocation to qcow2 | expand

Commit Message

Alberto Garcia May 5, 2020, 5:38 p.m. UTC
Like offset_into_cluster() and size_to_clusters(), but for
subclusters.

Signed-off-by: Alberto Garcia <berto@igalia.com>
---
 block/qcow2.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Eric Blake May 5, 2020, 7:42 p.m. UTC | #1
On 5/5/20 12:38 PM, Alberto Garcia wrote:
> Like offset_into_cluster() and size_to_clusters(), but for
> subclusters.
> 
> Signed-off-by: Alberto Garcia <berto@igalia.com>
> ---
>   block/qcow2.h | 10 ++++++++++
>   1 file changed, 10 insertions(+)
> 
> diff --git a/block/qcow2.h b/block/qcow2.h
> index e68febb15b..8b1ed1cbcf 100644
> --- a/block/qcow2.h
> +++ b/block/qcow2.h
> @@ -537,11 +537,21 @@ static inline int64_t offset_into_cluster(BDRVQcow2State *s, int64_t offset)
>       return offset & (s->cluster_size - 1);
>   }
>   
> +static inline int64_t offset_into_subcluster(BDRVQcow2State *s, int64_t offset)
> +{
> +    return offset & (s->subcluster_size - 1);
> +}
> +
>   static inline uint64_t size_to_clusters(BDRVQcow2State *s, uint64_t size)
>   {
>       return (size + (s->cluster_size - 1)) >> s->cluster_bits;
>   }

Pre-existing, but this could use DIV_ROUND_UP.

>   
> +static inline uint64_t size_to_subclusters(BDRVQcow2State *s, uint64_t size)
> +{
> +    return (size + (s->subcluster_size - 1)) >> s->subcluster_bits;
> +}

at which point, your addition could be:

return DIV_ROUND_UP(size, s->subcluster_size);

Either way,

Reviewed-by: Eric Blake <eblake@redhat.com>
Alberto Garcia May 6, 2020, 10:18 a.m. UTC | #2
On Tue 05 May 2020 09:42:08 PM CEST, Eric Blake wrote:
> On 5/5/20 12:38 PM, Alberto Garcia wrote:
>> Like offset_into_cluster() and size_to_clusters(), but for
>> subclusters.
>> 
>> Signed-off-by: Alberto Garcia <berto@igalia.com>
>> ---
>>   block/qcow2.h | 10 ++++++++++
>>   1 file changed, 10 insertions(+)
>> 
>> diff --git a/block/qcow2.h b/block/qcow2.h
>> index e68febb15b..8b1ed1cbcf 100644
>> --- a/block/qcow2.h
>> +++ b/block/qcow2.h
>> @@ -537,11 +537,21 @@ static inline int64_t offset_into_cluster(BDRVQcow2State *s, int64_t offset)
>>       return offset & (s->cluster_size - 1);
>>   }
>>   
>> +static inline int64_t offset_into_subcluster(BDRVQcow2State *s, int64_t offset)
>> +{
>> +    return offset & (s->subcluster_size - 1);
>> +}
>> +
>>   static inline uint64_t size_to_clusters(BDRVQcow2State *s, uint64_t size)
>>   {
>>       return (size + (s->cluster_size - 1)) >> s->cluster_bits;
>>   }
>
> Pre-existing, but this could use DIV_ROUND_UP.

Yeah but it would be nicer to have a version of the macro optimized for
powers of two.

Berto
diff mbox series

Patch

diff --git a/block/qcow2.h b/block/qcow2.h
index e68febb15b..8b1ed1cbcf 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -537,11 +537,21 @@  static inline int64_t offset_into_cluster(BDRVQcow2State *s, int64_t offset)
     return offset & (s->cluster_size - 1);
 }
 
+static inline int64_t offset_into_subcluster(BDRVQcow2State *s, int64_t offset)
+{
+    return offset & (s->subcluster_size - 1);
+}
+
 static inline uint64_t size_to_clusters(BDRVQcow2State *s, uint64_t size)
 {
     return (size + (s->cluster_size - 1)) >> s->cluster_bits;
 }
 
+static inline uint64_t size_to_subclusters(BDRVQcow2State *s, uint64_t size)
+{
+    return (size + (s->subcluster_size - 1)) >> s->subcluster_bits;
+}
+
 static inline int64_t size_to_l1(BDRVQcow2State *s, int64_t size)
 {
     int shift = s->cluster_bits + s->l2_bits;