[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Question: How to change backing file ?
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
Re: Question: How to change backing file ? |
Date: |
Sat, 9 Jan 2021 12:50:21 +0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 |
Hi Kevin!
28.12.2020 21:03, Kevin Nguetchouang wrote:
Hello everyone, in a class project, i would like to change the backing file of
the current image opened with a particular path file.
I try differents functions i saw in the source code
- bdrv_change_backing_file
- bdrv_open
- bdrv_open_child
but no one work... from segmentation fault error to bdrv_attach_backing passing
through parent->blocking_error, i don't know how to achieve what i want.
--
/Kevin Nguetchouang./
First, you should understand, that there are two different thing in "changing the
backing file":
1. Change backing link in the block nodes graph
2. Change backing file name in the metadata of the image (for example in qcow2
header
For example, look at the bdrv_drop_intermediate() (block.c) function. it's aim
is to drop all nodes in the chain between top and base, and make base to be new
backing file for the top.
Key things in the function:
- bdrv_subtree_drained_begin/end - to pause any io operations during graph
update
- bdrv_replace_node_common() - which actually replace backing child of top node
- c->klass->update_filename() - which will update backing-file in the metadata
of top image
Another example in block/stream.c, in stream_prepare():
- bdrv_set_backing_hd() to change backing child
- bdrv_change_backing_file() to change backing-file in the metadata of top image
(hmm, why don't we have drained begin/end here? why we don't use
bdrv_drop_intermediate()? - just good questions).
Hope, it helps a bit.
--
Best regards,
Vladimir