Message ID | bf2f5e0e41d5c51cde60cd457fd6d69d0f6ab030.1588699789.git.berto@igalia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add subcluster allocation to qcow2 | expand |
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>
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 --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;
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(+)