From: Max Reitz <mreitz@redhat.com>
To: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Cc: Kevin Wolf <kwolf@redhat.com>, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [RFC] Using BlockdevRef in the block layer
Date: Thu, 05 Dec 2013 20:04:58 +0100 [thread overview]
Message-ID: <52A0CE5A.5050309@redhat.com> (raw)
In-Reply-To: <52A0C77F.8060200@redhat.com>
On 05.12.2013 19:35, Max Reitz wrote:
> On 05.12.2013 18:41, Max Reitz wrote:
>> […]
>>
>> Second, if specifying a reference to an existing device should really
>> be supported, bdrv_open() should ideally not call bdrv_file_open()
>> anymore, but a function bdrv_find_ref() instead which resolves a
>> BlockdevRef structure (for simplicity, it appears to be easier to use
>> a QDict equivalent to a BlockdevRef instead of the latter itself
>> (since that results in many effectively redundant conversions to and
>> from those representations)). However, bdrv_file_open() supports
>> parsing protocol filenames, which bdrv_find_ref() would not. As a
>> result, it is probably best to call bdrv_find_ref() from
>> bdrv_file_open() instead and leave bdrv_open() generally the way it
>> is right now – yes, this is a question. ;-) (“Do you agree?”)
>
> I noticed only just now that the current design does not seem to allow
> nesting of files (i.e., driver=blkdebug-qmp, file.driver=qcow2,
> file.file.driver=file). Perhaps I do have to call bdrv_find_ref() in
> bdrv_open() and only resort to bdrv_file_open() if a filename that
> must be parsed was given...?
Okay, I removed bdrv_find_ref() in favor of letting bdrv_file_open()
handle everything. If a reference to an existing block device is given
(as an additional parameter, since the QDict cannot handle this because
of the fact that a blockdev reference will replace the QDict instead of
being part of it), it is used. Otherwise, if the block driver found does
not support bdrv_file_open(), it will recursively call bdrv_open()
instead of bdrv_open_common(). Concept-wise, this is perhaps a pretty
ugly solution; but code-wise, it looks pretty well, especially
considering that this does not change the current code much in terms of
LoC changed (and, more importantly, it just works; at least apparently,
so far).
On the other hand, as far as I know, the current “file” concept is not
determined to stay anyway, is it? At some point, we will have to
implement something to actually chain multiple block drivers. Allowing
this through “file” is as far as the current concept goes and there is
no way of getting around recursion.
The only question to me here is whether it is a good idea to allow calls
to bdrv_file_open() on block drivers which don't actually support that
function; but I don't know how to solve this problem in any other way,
and I personally don't want to put too much effort into fixing the
current model if we want to have a new one as soon as possible anyway.
Max
next prev parent reply other threads:[~2013-12-05 19:04 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-05 17:41 [Qemu-devel] [RFC] Using BlockdevRef in the block layer Max Reitz
2013-12-05 18:35 ` Max Reitz
2013-12-05 19:04 ` Max Reitz [this message]
2013-12-06 10:45 ` Kevin Wolf
2013-12-06 11:02 ` Max Reitz
2013-12-06 10:43 ` Kevin Wolf
2013-12-06 11:00 ` Max Reitz
2013-12-06 11:14 ` Max Reitz
2013-12-06 11:18 ` Max Reitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52A0CE5A.5050309@redhat.com \
--to=mreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).