|
From: | Supriya Kannery |
Subject: | Re: [Qemu-devel] [RFC Patch 4/7]Qemu: Framework for reopening image files safely |
Date: | Mon, 13 Feb 2012 19:19:27 +0530 |
User-agent: | Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.20) Gecko/20110817 Fedora/3.1.12-1.fc14 Thunderbird/3.1.12 |
On 02/08/2012 08:37 PM, Kevin Wolf wrote:
Am 01.02.2012 04:06, schrieb Supriya Kannery:Struct BDRVReopenState along with three reopen related functions introduced for handling reopening of images safely. This can be extended by each of the block drivers to reopen respective image files.
+ } else { + open_flags = bs->open_flags; + bdrv_close(bs); + + ret = bdrv_open(bs, bs->filename, bdrv_flags, drv); if (ret< 0) { - /* Reopen failed with orig and modified flags */ - abort(); + /* Reopen failed. Try to open with original flags */ + qerror_report(QERR_REOPEN_FILE_FAILED, bs->filename); + ret = bdrv_open(bs, bs->filename, open_flags, drv); + if (ret< 0) { + /* Reopen failed with orig and modified flags */ + bs->drv = NULL; + } }Most image formats don't have a bdrv_reopen_* implementation after this series, so usually you'll have something like qcow2 on top of file. This code uses bdrv_close/open for the whole stack, even though the file layer could actually make use of a bdrv_reopen_* implementation and the qcow2 open isn't likely to fail if the image file could be opened. I think we can use drv->bdrv_close/open to reopen only one layer and try using bdrv_reopen_* for the lower layer again. This is an improvement that can be done in a separate patch, though.
What I understood is, in the enhancement patch, we will have something like (taking qcow2 as an example)
Implement bdrv_reopen_qcow2(image file) which reopens only the qcow2 image file Then, drv->bdrv_open(qcow2 driver) will reopen qcow2 driver => calls bdrv_reopen_qcow2(qcow2 image file) if image file has to be reopen Can you please explain a bit more, it this is not what you meant. -thanks, Supriya
[Prev in Thread] | Current Thread | [Next in Thread] |