[Devel] [PATCH vz9 v2] dm-qcow2: support mixed compression images
Alexander Atanasov
alexander.atanasov at virtuozzo.com
Wed Feb 19 07:36:43 MSK 2025
On 19.02.25 4:27, Pavel Tikhomirov wrote:
>
>
> On 2/18/25 22:06, Alexander Atanasov wrote:
>> Currently code uses only top qcow2 delta to handle decompression.
>> Images have compression type in the qcow2 header already set when
>> loaded.
>> To support mixed compression switch to use qio->qcow2 and respective
>> qcow2 header so the decompression is performed with the correct type.
>> Remove qcow2 argument in functions called from decompression where
>> possible and use qio->qcow2 which is the respective qcow2 image for
>> the qio, a qio references only one image.
>>
>> https://virtuozzo.atlassian.net/browse/VSTOR-97155
>> Signed-off-by: Alexander Atanasov <alexander.atanasov at virtuozzo.com>
>> ---
>> drivers/md/dm-qcow2-map.c | 70 +++++++++++++++++++++++----------------
>> 1 file changed, 42 insertions(+), 28 deletions(-)
>>
>>
>> v1->v2:
>> - drop extra stream reset for zstd
>>
>> diff --git a/drivers/md/dm-qcow2-map.c b/drivers/md/dm-qcow2-map.c
>> index ccc8d4484049..568bf68981b4 100644
>> --- a/drivers/md/dm-qcow2-map.c
>> +++ b/drivers/md/dm-qcow2-map.c
>> @@ -3009,8 +3009,9 @@ static int copy_buf_to_bvec_iter(const struct
>> bio_vec *bvec,
>> return ret;
>> }
>> -static int copy_clu_part_to_qio(struct qcow2 *qcow2, const void *buf,
>> struct qio *qio)
>> +static int copy_clu_part_to_qio(const void *buf, struct qio *qio)
>> {
>> + struct qcow2 *qcow2 = qio->qcow2;
>> u32 max, seek, clu_size = qcow2->clu_size;
>> seek = bytes_off_in_cluster(qcow2, qio);
>> @@ -3047,7 +3048,7 @@ static int copy_zcow_slice(loff_t start, loff_t
>> end, void *qio_p,
>> return copy_buf_to_bvec_iter(bvec, &iter, buf + off, clu_size -
>> off);
>> }
>> -static int prepare_zcow_slices(struct qcow2 *qcow2, void *buf, struct
>> qio *qio)
>> +static int prepare_zcow_slices(void *buf, struct qio *qio)
>> {
>> loff_t consumed = 0;
>> /* Place required slices in that pages like further COW expects */
>> @@ -3655,46 +3656,59 @@ static int complete_metadata_writeback(struct
>> qcow2 *qcow2)
>> }
>> /* Process completed compressed READs */
>> -static void process_compressed_read(struct qcow2 *qcow2, struct
>> list_head *read_list,
>> +static void process_compressed_read(struct list_head *read_list,
>> struct list_head *cow_list)
>> {
>> + struct qcow2 *qcow2, *qcow2_prev = NULL;
>> struct qcow2_bvec *qvec;
>> struct qio_ext *ext;
>> int ret;
>> void *buf = NULL, *arg;
>> struct qio *qio;
>> bool for_cow;
>> + size_t dctxlen_alloced = 0;
>
> Let's fix spelling in variable name: s/alloced/allocated/
there is nothing wrong with the spelling here.
we do *alloc, and not *allocate - that is why to form a past participle
is to add an ed suffix. this form is widely used and recognised in
various projects both in source code and documentation. you will find it
in some dictionaries too. And if you check, you will find it in kernel
source code too, where it is used more than 500 times.
--
Regards,
Alexander Atanasov
More information about the Devel
mailing list