qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
       [not found]               ` <20130617151238.GF3994@dhcp-200-207.str.redhat.com>
@ 2013-06-18  3:58                 ` Fam Zheng
  2013-06-18  6:32                   ` Kevin Wolf
  2013-06-18  6:37                   ` Markus Armbruster
  0 siblings, 2 replies; 16+ messages in thread
From: Fam Zheng @ 2013-06-18  3:58 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: Paolo Bonzini, qemu-devel, stefanha, armbru

On Mon, 06/17 17:12, Kevin Wolf wrote:
> Am 17.06.2013 um 16:46 hat Paolo Bonzini geschrieben:
> > Il 17/06/2013 16:26, Kevin Wolf ha scritto:
> > > Am 17.06.2013 um 16:01 hat Paolo Bonzini geschrieben:
> > >> Il 17/06/2013 15:52, Kevin Wolf ha scritto:
> > >>> It's not a new thought that we need to change the block layer so that a
> > >>> BlockDriverState can't be "empty", but that one BlockDriverState always
> > >>> refers to one image. If you change media, you attach a different
> > >>> BlockDriverState to the device. Once you have this, you can start
> > >>> refcounting BlockDriverStates, so that the backing file remains usable
> > >>> while the guest device already uses a different image.
> > >>>
> > >>> Not that it's it easy to get there...
> > >>
> > >> I'm not sure that is safe to do.
> > >>
> > >> Consider the case where the guest switches from A to B during backup,
> > >> and then from B to A.  You get two BDS for the same file, which pretty
> > >> much means havoc.
> > > 
> > > Well, yes, it means that the management tool needs to know what it's
> > > doing. It shouldn't create a second BDS for A, but reattach the still
> > > existing one.
> > 
> > How?  That would require the management tool to know the full chain of
> > BDSes that were opened in the past.
> 
> They better know on which files they are operating. It's not like the
> management could be unaware of running backup jobs or things like that.
> 

Is there any case that QEMU needs to have two BDS pointing to the same
file?  If not, can we try to detect such case  on opening and try to
reuse the bs?

(Oops, CC'ing the right qemu-devel :p)

-- 
Fam

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18  3:58                 ` [Qemu-devel] [PATCH] block: add 'backing' option to drive_add Fam Zheng
@ 2013-06-18  6:32                   ` Kevin Wolf
  2013-06-18  7:00                     ` Fam Zheng
  2013-06-18  6:37                   ` Markus Armbruster
  1 sibling, 1 reply; 16+ messages in thread
From: Kevin Wolf @ 2013-06-18  6:32 UTC (permalink / raw)
  To: Paolo Bonzini, qemu-devel, stefanha, Eric Blake, armbru

Am 18.06.2013 um 05:58 hat Fam Zheng geschrieben:
> On Mon, 06/17 17:12, Kevin Wolf wrote:
> > Am 17.06.2013 um 16:46 hat Paolo Bonzini geschrieben:
> > > Il 17/06/2013 16:26, Kevin Wolf ha scritto:
> > > > Am 17.06.2013 um 16:01 hat Paolo Bonzini geschrieben:
> > > >> Il 17/06/2013 15:52, Kevin Wolf ha scritto:
> > > >>> It's not a new thought that we need to change the block layer so that a
> > > >>> BlockDriverState can't be "empty", but that one BlockDriverState always
> > > >>> refers to one image. If you change media, you attach a different
> > > >>> BlockDriverState to the device. Once you have this, you can start
> > > >>> refcounting BlockDriverStates, so that the backing file remains usable
> > > >>> while the guest device already uses a different image.
> > > >>>
> > > >>> Not that it's it easy to get there...
> > > >>
> > > >> I'm not sure that is safe to do.
> > > >>
> > > >> Consider the case where the guest switches from A to B during backup,
> > > >> and then from B to A.  You get two BDS for the same file, which pretty
> > > >> much means havoc.
> > > > 
> > > > Well, yes, it means that the management tool needs to know what it's
> > > > doing. It shouldn't create a second BDS for A, but reattach the still
> > > > existing one.
> > > 
> > > How?  That would require the management tool to know the full chain of
> > > BDSes that were opened in the past.
> > 
> > They better know on which files they are operating. It's not like the
> > management could be unaware of running backup jobs or things like that.
> > 
> 
> Is there any case that QEMU needs to have two BDS pointing to the same
> file?

No, I think there's no case where this would make sense.

> If not, can we try to detect such case  on opening and try to
> reuse the bs?

We can't do it reliably, think about symlinks or even hard links, or
things like /dev/fdset/..., let alone remote protocols that refer to the
same image file etc.

We can check the obvious cases and error out for them, but that's about
what we can do. I don't think we should try to fix things automagically
when we can't do it right.

Kevin

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18  3:58                 ` [Qemu-devel] [PATCH] block: add 'backing' option to drive_add Fam Zheng
  2013-06-18  6:32                   ` Kevin Wolf
@ 2013-06-18  6:37                   ` Markus Armbruster
  2013-06-18  7:06                     ` Fam Zheng
  2013-06-18  8:40                     ` Paolo Bonzini
  1 sibling, 2 replies; 16+ messages in thread
From: Markus Armbruster @ 2013-06-18  6:37 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: Paolo Bonzini, qemu-devel, stefanha

Fam Zheng <famz@redhat.com> writes:

> On Mon, 06/17 17:12, Kevin Wolf wrote:
>> Am 17.06.2013 um 16:46 hat Paolo Bonzini geschrieben:
>> > Il 17/06/2013 16:26, Kevin Wolf ha scritto:
>> > > Am 17.06.2013 um 16:01 hat Paolo Bonzini geschrieben:
>> > >> Il 17/06/2013 15:52, Kevin Wolf ha scritto:
>> > >>> It's not a new thought that we need to change the block layer so that a
>> > >>> BlockDriverState can't be "empty", but that one BlockDriverState always
>> > >>> refers to one image. If you change media, you attach a different
>> > >>> BlockDriverState to the device. Once you have this, you can start
>> > >>> refcounting BlockDriverStates, so that the backing file remains usable
>> > >>> while the guest device already uses a different image.
>> > >>>
>> > >>> Not that it's it easy to get there...
>> > >>
>> > >> I'm not sure that is safe to do.
>> > >>
>> > >> Consider the case where the guest switches from A to B during backup,
>> > >> and then from B to A.  You get two BDS for the same file, which pretty
>> > >> much means havoc.
>> > > 
>> > > Well, yes, it means that the management tool needs to know what it's
>> > > doing. It shouldn't create a second BDS for A, but reattach the still
>> > > existing one.
>> > 
>> > How?  That would require the management tool to know the full chain of
>> > BDSes that were opened in the past.
>> 
>> They better know on which files they are operating. It's not like the
>> management could be unaware of running backup jobs or things like that.
>> 
>
> Is there any case that QEMU needs to have two BDS pointing to the same
> file?

Maybe, I don't know.

>        If not, can we try to detect such case  on opening

Gee, what a nice swamp you found there!

For local files, you can compare (dev-major, dev-minor, inode).

Beyond that, you tend not to get comparisons, but best guesses.

>                                                           and try to
> reuse the bs?

I doubt reusing the BDS is correct in the general case.

[...]

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18  6:32                   ` Kevin Wolf
@ 2013-06-18  7:00                     ` Fam Zheng
  2013-06-18  7:51                       ` Kevin Wolf
  2013-06-18 14:18                       ` Markus Armbruster
  0 siblings, 2 replies; 16+ messages in thread
From: Fam Zheng @ 2013-06-18  7:00 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: Paolo Bonzini, qemu-devel, stefanha, armbru

On Tue, 06/18 08:32, Kevin Wolf wrote:
> Am 18.06.2013 um 05:58 hat Fam Zheng geschrieben:
> > On Mon, 06/17 17:12, Kevin Wolf wrote:
> > > Am 17.06.2013 um 16:46 hat Paolo Bonzini geschrieben:
> > > > Il 17/06/2013 16:26, Kevin Wolf ha scritto:
> > > > > Am 17.06.2013 um 16:01 hat Paolo Bonzini geschrieben:
> > > > >> Il 17/06/2013 15:52, Kevin Wolf ha scritto:
> > > > >>> It's not a new thought that we need to change the block layer so that a
> > > > >>> BlockDriverState can't be "empty", but that one BlockDriverState always
> > > > >>> refers to one image. If you change media, you attach a different
> > > > >>> BlockDriverState to the device. Once you have this, you can start
> > > > >>> refcounting BlockDriverStates, so that the backing file remains usable
> > > > >>> while the guest device already uses a different image.
> > > > >>>
> > > > >>> Not that it's it easy to get there...
> > > > >>
> > > > >> I'm not sure that is safe to do.
> > > > >>
> > > > >> Consider the case where the guest switches from A to B during backup,
> > > > >> and then from B to A.  You get two BDS for the same file, which pretty
> > > > >> much means havoc.
> > > > > 
> > > > > Well, yes, it means that the management tool needs to know what it's
> > > > > doing. It shouldn't create a second BDS for A, but reattach the still
> > > > > existing one.
> > > > 
> > > > How?  That would require the management tool to know the full chain of
> > > > BDSes that were opened in the past.
> > > 
> > > They better know on which files they are operating. It's not like the
> > > management could be unaware of running backup jobs or things like that.
> > > 
> > 
> > Is there any case that QEMU needs to have two BDS pointing to the same
> > file?
> 
> No, I think there's no case where this would make sense.
> 
> > If not, can we try to detect such case  on opening and try to
> > reuse the bs?
> 
> We can't do it reliably, think about symlinks or even hard links, or
> things like /dev/fdset/..., let alone remote protocols that refer to the
> same image file etc.
> 
> We can check the obvious cases and error out for them, but that's about
> what we can do. I don't think we should try to fix things automagically
> when we can't do it right.

It's impossible to know a remote protocol points to the same image with
local file path, that's not in QEMU's scope, but we have a good chance
to detect (strcmp with existing bs->filename) and error out Paolo's
A-B-A problem, don't we?

-- 
Fam

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18  6:37                   ` Markus Armbruster
@ 2013-06-18  7:06                     ` Fam Zheng
  2013-06-18  8:40                     ` Paolo Bonzini
  1 sibling, 0 replies; 16+ messages in thread
From: Fam Zheng @ 2013-06-18  7:06 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: Kevin Wolf, Paolo Bonzini, qemu-devel, stefanha

On Tue, 06/18 08:37, Markus Armbruster wrote:
> Fam Zheng <famz@redhat.com> writes:
> 
> > On Mon, 06/17 17:12, Kevin Wolf wrote:
> >> Am 17.06.2013 um 16:46 hat Paolo Bonzini geschrieben:
> >> > Il 17/06/2013 16:26, Kevin Wolf ha scritto:
> >> > > Am 17.06.2013 um 16:01 hat Paolo Bonzini geschrieben:
> >> > >> Il 17/06/2013 15:52, Kevin Wolf ha scritto:
> >> > >>> It's not a new thought that we need to change the block layer so that a
> >> > >>> BlockDriverState can't be "empty", but that one BlockDriverState always
> >> > >>> refers to one image. If you change media, you attach a different
> >> > >>> BlockDriverState to the device. Once you have this, you can start
> >> > >>> refcounting BlockDriverStates, so that the backing file remains usable
> >> > >>> while the guest device already uses a different image.
> >> > >>>
> >> > >>> Not that it's it easy to get there...
> >> > >>
> >> > >> I'm not sure that is safe to do.
> >> > >>
> >> > >> Consider the case where the guest switches from A to B during backup,
> >> > >> and then from B to A.  You get two BDS for the same file, which pretty
> >> > >> much means havoc.
> >> > > 
> >> > > Well, yes, it means that the management tool needs to know what it's
> >> > > doing. It shouldn't create a second BDS for A, but reattach the still
> >> > > existing one.
> >> > 
> >> > How?  That would require the management tool to know the full chain of
> >> > BDSes that were opened in the past.
> >> 
> >> They better know on which files they are operating. It's not like the
> >> management could be unaware of running backup jobs or things like that.
> >> 
> >
> > Is there any case that QEMU needs to have two BDS pointing to the same
> > file?
> 
> Maybe, I don't know.
> 
> >        If not, can we try to detect such case  on opening
> 
> Gee, what a nice swamp you found there!
> 
> For local files, you can compare (dev-major, dev-minor, inode).
> 
> Beyond that, you tend not to get comparisons, but best guesses.
> 
> >                                                           and try to
> > reuse the bs?
> 
> I doubt reusing the BDS is correct in the general case.
> 
Maybe I meant basically the same as Kevin, but just that QEMU finds out
A has existing BDS, and reattach it.
> >> > > Well, yes, it means that the management tool needs to know what it's
> >> > > doing. It shouldn't create a second BDS for A, but reattach the still
> >> > > existing one.
I assume it should be less wrong than having two BDS for the same file.

-- 
Fam

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18  7:00                     ` Fam Zheng
@ 2013-06-18  7:51                       ` Kevin Wolf
  2013-06-18  8:11                         ` Fam Zheng
  2013-06-18 14:18                       ` Markus Armbruster
  1 sibling, 1 reply; 16+ messages in thread
From: Kevin Wolf @ 2013-06-18  7:51 UTC (permalink / raw)
  To: Paolo Bonzini, qemu-devel, stefanha, Eric Blake, armbru

Am 18.06.2013 um 09:00 hat Fam Zheng geschrieben:
> On Tue, 06/18 08:32, Kevin Wolf wrote:
> > Am 18.06.2013 um 05:58 hat Fam Zheng geschrieben:
> > > On Mon, 06/17 17:12, Kevin Wolf wrote:
> > > > Am 17.06.2013 um 16:46 hat Paolo Bonzini geschrieben:
> > > > > Il 17/06/2013 16:26, Kevin Wolf ha scritto:
> > > > > > Am 17.06.2013 um 16:01 hat Paolo Bonzini geschrieben:
> > > > > >> Il 17/06/2013 15:52, Kevin Wolf ha scritto:
> > > > > >>> It's not a new thought that we need to change the block layer so that a
> > > > > >>> BlockDriverState can't be "empty", but that one BlockDriverState always
> > > > > >>> refers to one image. If you change media, you attach a different
> > > > > >>> BlockDriverState to the device. Once you have this, you can start
> > > > > >>> refcounting BlockDriverStates, so that the backing file remains usable
> > > > > >>> while the guest device already uses a different image.
> > > > > >>>
> > > > > >>> Not that it's it easy to get there...
> > > > > >>
> > > > > >> I'm not sure that is safe to do.
> > > > > >>
> > > > > >> Consider the case where the guest switches from A to B during backup,
> > > > > >> and then from B to A.  You get two BDS for the same file, which pretty
> > > > > >> much means havoc.
> > > > > > 
> > > > > > Well, yes, it means that the management tool needs to know what it's
> > > > > > doing. It shouldn't create a second BDS for A, but reattach the still
> > > > > > existing one.
> > > > > 
> > > > > How?  That would require the management tool to know the full chain of
> > > > > BDSes that were opened in the past.
> > > > 
> > > > They better know on which files they are operating. It's not like the
> > > > management could be unaware of running backup jobs or things like that.
> > > > 
> > > 
> > > Is there any case that QEMU needs to have two BDS pointing to the same
> > > file?
> > 
> > No, I think there's no case where this would make sense.
> > 
> > > If not, can we try to detect such case  on opening and try to
> > > reuse the bs?
> > 
> > We can't do it reliably, think about symlinks or even hard links, or
> > things like /dev/fdset/..., let alone remote protocols that refer to the
> > same image file etc.
> > 
> > We can check the obvious cases and error out for them, but that's about
> > what we can do. I don't think we should try to fix things automagically
> > when we can't do it right.
> 
> It's impossible to know a remote protocol points to the same image with
> local file path, that's not in QEMU's scope, but we have a good chance
> to detect (strcmp with existing bs->filename) and error out Paolo's
> A-B-A problem, don't we?

Yes, catching 50% of the misuses is better than catching none.

My point was that we shouldn't "try to reuse the bs" when we detect that
the file is already open, because that makes it a feature that users are
supposed to use and that doesn't work consistently across backends and
will therefore cause endless pain.

If we detect it (in order to protect the user from his own mistakes), we
must treat it as a misuse and return an error.

Kevin

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18  7:51                       ` Kevin Wolf
@ 2013-06-18  8:11                         ` Fam Zheng
  2013-06-18  8:52                           ` Kevin Wolf
  0 siblings, 1 reply; 16+ messages in thread
From: Fam Zheng @ 2013-06-18  8:11 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: Paolo Bonzini, qemu-devel, stefanha, armbru

On Tue, 06/18 09:51, Kevin Wolf wrote:
> Am 18.06.2013 um 09:00 hat Fam Zheng geschrieben:
> > On Tue, 06/18 08:32, Kevin Wolf wrote:
> > > Am 18.06.2013 um 05:58 hat Fam Zheng geschrieben:
> > > > On Mon, 06/17 17:12, Kevin Wolf wrote:
> > > > > Am 17.06.2013 um 16:46 hat Paolo Bonzini geschrieben:
> > > > > > Il 17/06/2013 16:26, Kevin Wolf ha scritto:
> > > > > > > Am 17.06.2013 um 16:01 hat Paolo Bonzini geschrieben:
> > > > > > >> Il 17/06/2013 15:52, Kevin Wolf ha scritto:
> > > > > > >>> It's not a new thought that we need to change the block layer so that a
> > > > > > >>> BlockDriverState can't be "empty", but that one BlockDriverState always
> > > > > > >>> refers to one image. If you change media, you attach a different
> > > > > > >>> BlockDriverState to the device. Once you have this, you can start
> > > > > > >>> refcounting BlockDriverStates, so that the backing file remains usable
> > > > > > >>> while the guest device already uses a different image.
> > > > > > >>>
> > > > > > >>> Not that it's it easy to get there...
> > > > > > >>
> > > > > > >> I'm not sure that is safe to do.
> > > > > > >>
> > > > > > >> Consider the case where the guest switches from A to B during backup,
> > > > > > >> and then from B to A.  You get two BDS for the same file, which pretty
> > > > > > >> much means havoc.
> > > > > > > 
> > > > > > > Well, yes, it means that the management tool needs to know what it's
> > > > > > > doing. It shouldn't create a second BDS for A, but reattach the still
> > > > > > > existing one.
In this case do you mean mgmt tool should give a name of drive instead
of file path? I like this idea, and further more, why don't we make QEMU
smarter to bdrv_find_by_filename() the existing BDS?
> > > > > > 
> > > > > > How?  That would require the management tool to know the full chain of
> > > > > > BDSes that were opened in the past.
> > > > > 
> > > > > They better know on which files they are operating. It's not like the
> > > > > management could be unaware of running backup jobs or things like that.
> > > > > 
> > > > 
> > > > Is there any case that QEMU needs to have two BDS pointing to the same
> > > > file?
> > > 
> > > No, I think there's no case where this would make sense.
> > > 
> > > > If not, can we try to detect such case  on opening and try to
> > > > reuse the bs?
> > > 
> > > We can't do it reliably, think about symlinks or even hard links, or
> > > things like /dev/fdset/..., let alone remote protocols that refer to the
> > > same image file etc.
> > > 
> > > We can check the obvious cases and error out for them, but that's about
> > > what we can do. I don't think we should try to fix things automagically
> > > when we can't do it right.
> > 
> > It's impossible to know a remote protocol points to the same image with
> > local file path, that's not in QEMU's scope, but we have a good chance
> > to detect (strcmp with existing bs->filename) and error out Paolo's
> > A-B-A problem, don't we?
> 
> Yes, catching 50% of the misuses is better than catching none.
> 
> My point was that we shouldn't "try to reuse the bs" when we detect that
> the file is already open, because that makes it a feature that users are
> supposed to use and that doesn't work consistently across backends and
> will therefore cause endless pain.

OK.

> 
> If we detect it (in order to protect the user from his own mistakes), we
> must treat it as a misuse and return an error.
> 

IIUC, block job is not supposed to affect the guest or the source image,
so from user's PoV, switching to another image, then switching back
seems reasonable, even when a block job runs in the background. As we
know it's already open, could we reattach to it instead, as you
suggested above?

-- 
Fam

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18  6:37                   ` Markus Armbruster
  2013-06-18  7:06                     ` Fam Zheng
@ 2013-06-18  8:40                     ` Paolo Bonzini
  2013-06-18  8:56                       ` Kevin Wolf
  2013-06-18  9:12                       ` Fam Zheng
  1 sibling, 2 replies; 16+ messages in thread
From: Paolo Bonzini @ 2013-06-18  8:40 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: Kevin Wolf, qemu-devel, stefanha

Il 18/06/2013 08:37, Markus Armbruster ha scritto:
> >        If not, can we try to detect such case  on opening
> Gee, what a nice swamp you found there!

It is a huge swamp indeed.

Since we stop all block jobs on media change already, what about just
adding a command "block-job-attach" or something like that which exposes
the target of the job as a blockdev (presumably so that you can then add
it to the NBD server)?

Paolo

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18  8:11                         ` Fam Zheng
@ 2013-06-18  8:52                           ` Kevin Wolf
  0 siblings, 0 replies; 16+ messages in thread
From: Kevin Wolf @ 2013-06-18  8:52 UTC (permalink / raw)
  To: Paolo Bonzini, qemu-devel, stefanha, Eric Blake, armbru

Am 18.06.2013 um 10:11 hat Fam Zheng geschrieben:
> On Tue, 06/18 09:51, Kevin Wolf wrote:
> > Am 18.06.2013 um 09:00 hat Fam Zheng geschrieben:
> > > On Tue, 06/18 08:32, Kevin Wolf wrote:
> > > > Am 18.06.2013 um 05:58 hat Fam Zheng geschrieben:
> > > > > On Mon, 06/17 17:12, Kevin Wolf wrote:
> > > > > > Am 17.06.2013 um 16:46 hat Paolo Bonzini geschrieben:
> > > > > > > Il 17/06/2013 16:26, Kevin Wolf ha scritto:
> > > > > > > > Am 17.06.2013 um 16:01 hat Paolo Bonzini geschrieben:
> > > > > > > >> Il 17/06/2013 15:52, Kevin Wolf ha scritto:
> > > > > > > >>> It's not a new thought that we need to change the block layer so that a
> > > > > > > >>> BlockDriverState can't be "empty", but that one BlockDriverState always
> > > > > > > >>> refers to one image. If you change media, you attach a different
> > > > > > > >>> BlockDriverState to the device. Once you have this, you can start
> > > > > > > >>> refcounting BlockDriverStates, so that the backing file remains usable
> > > > > > > >>> while the guest device already uses a different image.
> > > > > > > >>>
> > > > > > > >>> Not that it's it easy to get there...
> > > > > > > >>
> > > > > > > >> I'm not sure that is safe to do.
> > > > > > > >>
> > > > > > > >> Consider the case where the guest switches from A to B during backup,
> > > > > > > >> and then from B to A.  You get two BDS for the same file, which pretty
> > > > > > > >> much means havoc.
> > > > > > > > 
> > > > > > > > Well, yes, it means that the management tool needs to know what it's
> > > > > > > > doing. It shouldn't create a second BDS for A, but reattach the still
> > > > > > > > existing one.
> In this case do you mean mgmt tool should give a name of drive instead
> of file path? I like this idea, and further more, why don't we make QEMU
> smarter to bdrv_find_by_filename() the existing BDS?
> > > > > > > 
> > > > > > > How?  That would require the management tool to know the full chain of
> > > > > > > BDSes that were opened in the past.
> > > > > > 
> > > > > > They better know on which files they are operating. It's not like the
> > > > > > management could be unaware of running backup jobs or things like that.
> > > > > > 
> > > > > 
> > > > > Is there any case that QEMU needs to have two BDS pointing to the same
> > > > > file?
> > > > 
> > > > No, I think there's no case where this would make sense.
> > > > 
> > > > > If not, can we try to detect such case  on opening and try to
> > > > > reuse the bs?
> > > > 
> > > > We can't do it reliably, think about symlinks or even hard links, or
> > > > things like /dev/fdset/..., let alone remote protocols that refer to the
> > > > same image file etc.
> > > > 
> > > > We can check the obvious cases and error out for them, but that's about
> > > > what we can do. I don't think we should try to fix things automagically
> > > > when we can't do it right.
> > > 
> > > It's impossible to know a remote protocol points to the same image with
> > > local file path, that's not in QEMU's scope, but we have a good chance
> > > to detect (strcmp with existing bs->filename) and error out Paolo's
> > > A-B-A problem, don't we?
> > 
> > Yes, catching 50% of the misuses is better than catching none.
> > 
> > My point was that we shouldn't "try to reuse the bs" when we detect that
> > the file is already open, because that makes it a feature that users are
> > supposed to use and that doesn't work consistently across backends and
> > will therefore cause endless pain.
> 
> OK.
> 
> > 
> > If we detect it (in order to protect the user from his own mistakes), we
> > must treat it as a misuse and return an error.
> > 
> 
> IIUC, block job is not supposed to affect the guest or the source image,
> so from user's PoV, switching to another image, then switching back
> seems reasonable, even when a block job runs in the background. As we
> know it's already open, could we reattach to it instead, as you
> suggested above?

This is none of the block layer's business. The management tool needs to
know this and reuse an existing BlockDriverState instead of creating a
new one. Everything else will lead to an inconsistent QMP API.

Not that "management tool" could in theory also mean the GTK GUI, so I'm
not totally excluding that qemu could be involved in this, but the block
layer is the wrong level to address this.

Kevin

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18  8:40                     ` Paolo Bonzini
@ 2013-06-18  8:56                       ` Kevin Wolf
  2013-06-18  9:11                         ` Paolo Bonzini
  2013-06-18  9:12                       ` Fam Zheng
  1 sibling, 1 reply; 16+ messages in thread
From: Kevin Wolf @ 2013-06-18  8:56 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Markus Armbruster, stefanha, qemu-devel

Am 18.06.2013 um 10:40 hat Paolo Bonzini geschrieben:
> Il 18/06/2013 08:37, Markus Armbruster ha scritto:
> > >        If not, can we try to detect such case  on opening
> > Gee, what a nice swamp you found there!
> 
> It is a huge swamp indeed.
> 
> Since we stop all block jobs on media change already, what about just
> adding a command "block-job-attach" or something like that which exposes
> the target of the job as a blockdev (presumably so that you can then add
> it to the NBD server)?

This is backwards. You should really give the block job a target BDS to
begin with, not a file name.

Kevin

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18  8:56                       ` Kevin Wolf
@ 2013-06-18  9:11                         ` Paolo Bonzini
  0 siblings, 0 replies; 16+ messages in thread
From: Paolo Bonzini @ 2013-06-18  9:11 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: Markus Armbruster, stefanha, qemu-devel

Il 18/06/2013 10:56, Kevin Wolf ha scritto:
>> > 
>> > It is a huge swamp indeed.
>> > 
>> > Since we stop all block jobs on media change already, what about just
>> > adding a command "block-job-attach" or something like that which exposes
>> > the target of the job as a blockdev (presumably so that you can then add
>> > it to the NBD server)?
> This is backwards. You should really give the block job a target BDS to
> begin with, not a file name.

That's also ok...  We can get the backing file right for the target BDS
at the beginning of the backup job with a combination of
close_unused_images (so that it is "as if" block-backup had opened the
file with BDRV_O_NO_BACKING), bdrv_append and bdrv_swap (append the
target to the VM's BDS, swap the two).

So why do we need this new option to drive_add?  The "drive"
ImageCreationMode, for which Fam has a patch too, should do.

Paolo

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18  8:40                     ` Paolo Bonzini
  2013-06-18  8:56                       ` Kevin Wolf
@ 2013-06-18  9:12                       ` Fam Zheng
  1 sibling, 0 replies; 16+ messages in thread
From: Fam Zheng @ 2013-06-18  9:12 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Kevin Wolf, Markus Armbruster, stefanha, qemu-devel

On Tue, 06/18 10:40, Paolo Bonzini wrote:
> Il 18/06/2013 08:37, Markus Armbruster ha scritto:
> > >        If not, can we try to detect such case  on opening
> > Gee, what a nice swamp you found there!
> 
> It is a huge swamp indeed.
> 
> Since we stop all block jobs on media change already, what about just
> adding a command "block-job-attach" or something like that which exposes
> the target of the job as a blockdev (presumably so that you can then add
> it to the NBD server)?
> 

In fact block job target BDS is already created when job started, so
it's rather about finding a way to "query" the target BDS name, or get
it as command return value, than attach a blockdev. Once we have the
device name, we can add it to the NBD server.

-- 
Fam

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18  7:00                     ` Fam Zheng
  2013-06-18  7:51                       ` Kevin Wolf
@ 2013-06-18 14:18                       ` Markus Armbruster
  2013-06-19  1:17                         ` Fam Zheng
  1 sibling, 1 reply; 16+ messages in thread
From: Markus Armbruster @ 2013-06-18 14:18 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: Paolo Bonzini, qemu-devel, stefanha

Fam Zheng <famz@redhat.com> writes:

> On Tue, 06/18 08:32, Kevin Wolf wrote:
>> Am 18.06.2013 um 05:58 hat Fam Zheng geschrieben:
>> > On Mon, 06/17 17:12, Kevin Wolf wrote:
>> > > Am 17.06.2013 um 16:46 hat Paolo Bonzini geschrieben:
>> > > > Il 17/06/2013 16:26, Kevin Wolf ha scritto:
>> > > > > Am 17.06.2013 um 16:01 hat Paolo Bonzini geschrieben:
>> > > > >> Il 17/06/2013 15:52, Kevin Wolf ha scritto:
>> > > > >>> It's not a new thought that we need to change the block
>> > > > >>> layer so that a
>> > > > >>> BlockDriverState can't be "empty", but that one
>> > > > >>> BlockDriverState always
>> > > > >>> refers to one image. If you change media, you attach a different
>> > > > >>> BlockDriverState to the device. Once you have this, you can start
>> > > > >>> refcounting BlockDriverStates, so that the backing file
>> > > > >>> remains usable
>> > > > >>> while the guest device already uses a different image.
>> > > > >>>
>> > > > >>> Not that it's it easy to get there...
>> > > > >>
>> > > > >> I'm not sure that is safe to do.
>> > > > >>
>> > > > >> Consider the case where the guest switches from A to B during backup,
>> > > > >> and then from B to A.  You get two BDS for the same file,
>> > > > >> which pretty
>> > > > >> much means havoc.
>> > > > > 
>> > > > > Well, yes, it means that the management tool needs to know what it's
>> > > > > doing. It shouldn't create a second BDS for A, but reattach the still
>> > > > > existing one.
>> > > > 
>> > > > How?  That would require the management tool to know the full chain of
>> > > > BDSes that were opened in the past.
>> > > 
>> > > They better know on which files they are operating. It's not like the
>> > > management could be unaware of running backup jobs or things like that.
>> > > 
>> > 
>> > Is there any case that QEMU needs to have two BDS pointing to the same
>> > file?
>> 
>> No, I think there's no case where this would make sense.
>> 
>> > If not, can we try to detect such case  on opening and try to
>> > reuse the bs?
>> 
>> We can't do it reliably, think about symlinks or even hard links, or
>> things like /dev/fdset/..., let alone remote protocols that refer to the
>> same image file etc.
>> 
>> We can check the obvious cases and error out for them, but that's about
>> what we can do. I don't think we should try to fix things automagically
>> when we can't do it right.
>
> It's impossible to know a remote protocol points to the same image with
> local file path, that's not in QEMU's scope, but we have a good chance
> to detect (strcmp with existing bs->filename) and error out Paolo's
> A-B-A problem, don't we?

Is comparing bs->filename always a good idea, or only if it's a local
image file?

If it's a local file, then comparing names to check for aliasing is
stupid.  Compare device & inode instead.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-18 14:18                       ` Markus Armbruster
@ 2013-06-19  1:17                         ` Fam Zheng
  2013-06-19  6:27                           ` Markus Armbruster
  0 siblings, 1 reply; 16+ messages in thread
From: Fam Zheng @ 2013-06-19  1:17 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: Kevin Wolf, Paolo Bonzini, qemu-devel, stefanha

On Tue, 06/18 16:18, Markus Armbruster wrote:
> Fam Zheng <famz@redhat.com> writes:
> 
> > On Tue, 06/18 08:32, Kevin Wolf wrote:
> >> Am 18.06.2013 um 05:58 hat Fam Zheng geschrieben:
> >> > On Mon, 06/17 17:12, Kevin Wolf wrote:
> >> > > Am 17.06.2013 um 16:46 hat Paolo Bonzini geschrieben:
> >> > > > Il 17/06/2013 16:26, Kevin Wolf ha scritto:
> >> > > > > Am 17.06.2013 um 16:01 hat Paolo Bonzini geschrieben:
> >> > > > >> Il 17/06/2013 15:52, Kevin Wolf ha scritto:
> >> > > > >>> It's not a new thought that we need to change the block
> >> > > > >>> layer so that a
> >> > > > >>> BlockDriverState can't be "empty", but that one
> >> > > > >>> BlockDriverState always
> >> > > > >>> refers to one image. If you change media, you attach a different
> >> > > > >>> BlockDriverState to the device. Once you have this, you can start
> >> > > > >>> refcounting BlockDriverStates, so that the backing file
> >> > > > >>> remains usable
> >> > > > >>> while the guest device already uses a different image.
> >> > > > >>>
> >> > > > >>> Not that it's it easy to get there...
> >> > > > >>
> >> > > > >> I'm not sure that is safe to do.
> >> > > > >>
> >> > > > >> Consider the case where the guest switches from A to B during backup,
> >> > > > >> and then from B to A.  You get two BDS for the same file,
> >> > > > >> which pretty
> >> > > > >> much means havoc.
> >> > > > > 
> >> > > > > Well, yes, it means that the management tool needs to know what it's
> >> > > > > doing. It shouldn't create a second BDS for A, but reattach the still
> >> > > > > existing one.
> >> > > > 
> >> > > > How?  That would require the management tool to know the full chain of
> >> > > > BDSes that were opened in the past.
> >> > > 
> >> > > They better know on which files they are operating. It's not like the
> >> > > management could be unaware of running backup jobs or things like that.
> >> > > 
> >> > 
> >> > Is there any case that QEMU needs to have two BDS pointing to the same
> >> > file?
> >> 
> >> No, I think there's no case where this would make sense.
> >> 
> >> > If not, can we try to detect such case  on opening and try to
> >> > reuse the bs?
> >> 
> >> We can't do it reliably, think about symlinks or even hard links, or
> >> things like /dev/fdset/..., let alone remote protocols that refer to the
> >> same image file etc.
> >> 
> >> We can check the obvious cases and error out for them, but that's about
> >> what we can do. I don't think we should try to fix things automagically
> >> when we can't do it right.
> >
> > It's impossible to know a remote protocol points to the same image with
> > local file path, that's not in QEMU's scope, but we have a good chance
> > to detect (strcmp with existing bs->filename) and error out Paolo's
> > A-B-A problem, don't we?
> 
> Is comparing bs->filename always a good idea, or only if it's a local
> image file?

It's never sufficient by comparing filename to tell if they are the
same, things can be tricky here, but in many cases it can be helpful,
both local and remote.

> 
> If it's a local file, then comparing names to check for aliasing is
> stupid.  Compare device & inode instead.

Device and inode is not something to block layer's knowledge, I think.

-- 
Fam

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-19  1:17                         ` Fam Zheng
@ 2013-06-19  6:27                           ` Markus Armbruster
  2013-06-19  7:08                             ` Fam Zheng
  0 siblings, 1 reply; 16+ messages in thread
From: Markus Armbruster @ 2013-06-19  6:27 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: Paolo Bonzini, qemu-devel, stefanha

Fam Zheng <famz@redhat.com> writes:

> On Tue, 06/18 16:18, Markus Armbruster wrote:
>> Fam Zheng <famz@redhat.com> writes:
>> 
>> > On Tue, 06/18 08:32, Kevin Wolf wrote:
>> >> Am 18.06.2013 um 05:58 hat Fam Zheng geschrieben:
>> >> > On Mon, 06/17 17:12, Kevin Wolf wrote:
>> >> > > Am 17.06.2013 um 16:46 hat Paolo Bonzini geschrieben:
>> >> > > > Il 17/06/2013 16:26, Kevin Wolf ha scritto:
>> >> > > > > Am 17.06.2013 um 16:01 hat Paolo Bonzini geschrieben:
>> >> > > > >> Il 17/06/2013 15:52, Kevin Wolf ha scritto:
>> >> > > > >>> It's not a new thought that we need to change the block
>> >> > > > >>> layer so that a
>> >> > > > >>> BlockDriverState can't be "empty", but that one
>> >> > > > >>> BlockDriverState always
>> >> > > > >>> refers to one image. If you change media, you attach a different
>> >> > > > >>> BlockDriverState to the device. Once you have this, you can start
>> >> > > > >>> refcounting BlockDriverStates, so that the backing file
>> >> > > > >>> remains usable
>> >> > > > >>> while the guest device already uses a different image.
>> >> > > > >>>
>> >> > > > >>> Not that it's it easy to get there...
>> >> > > > >>
>> >> > > > >> I'm not sure that is safe to do.
>> >> > > > >>
>> >> > > > >> Consider the case where the guest switches from A to B
>> >> > > > >> during backup,
>> >> > > > >> and then from B to A.  You get two BDS for the same file,
>> >> > > > >> which pretty
>> >> > > > >> much means havoc.
>> >> > > > > 
>> >> > > > > Well, yes, it means that the management tool needs to
>> >> > > > > know what it's
>> >> > > > > doing. It shouldn't create a second BDS for A, but
>> >> > > > > reattach the still
>> >> > > > > existing one.
>> >> > > > 
>> >> > > > How?  That would require the management tool to know the
>> >> > > > full chain of
>> >> > > > BDSes that were opened in the past.
>> >> > > 
>> >> > > They better know on which files they are operating. It's not like the
>> >> > > management could be unaware of running backup jobs or things like that.
>> >> > > 
>> >> > 
>> >> > Is there any case that QEMU needs to have two BDS pointing to the same
>> >> > file?
>> >> 
>> >> No, I think there's no case where this would make sense.
>> >> 
>> >> > If not, can we try to detect such case  on opening and try to
>> >> > reuse the bs?
>> >> 
>> >> We can't do it reliably, think about symlinks or even hard links, or
>> >> things like /dev/fdset/..., let alone remote protocols that refer to the
>> >> same image file etc.
>> >> 
>> >> We can check the obvious cases and error out for them, but that's about
>> >> what we can do. I don't think we should try to fix things automagically
>> >> when we can't do it right.
>> >
>> > It's impossible to know a remote protocol points to the same image with
>> > local file path, that's not in QEMU's scope, but we have a good chance
>> > to detect (strcmp with existing bs->filename) and error out Paolo's
>> > A-B-A problem, don't we?
>> 
>> Is comparing bs->filename always a good idea, or only if it's a local
>> image file?
>
> It's never sufficient by comparing filename to tell if they are the
> same, things can be tricky here, but in many cases it can be helpful,
> both local and remote.

Let me rephrase my question.

We all understand that different bs->filename can alias the same
resource (which is not necessarily a file).  This makes a "same
resource" test based on bs->filename incomplete.

Does identical bs->filename *always* imply same resource?

If yes, the test is correct but incomplete.  That can be useful.

If no, the test is incorrect and incomplete, thus useless.

>> If it's a local file, then comparing names to check for aliasing is
>> stupid.  Compare device & inode instead.
>
> Device and inode is not something to block layer's knowledge, I think.

They are one stat(2) or fstat(2) away.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH] block: add 'backing' option to drive_add
  2013-06-19  6:27                           ` Markus Armbruster
@ 2013-06-19  7:08                             ` Fam Zheng
  0 siblings, 0 replies; 16+ messages in thread
From: Fam Zheng @ 2013-06-19  7:08 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: Kevin Wolf, Paolo Bonzini, qemu-devel, stefanha

On Wed, 06/19 08:27, Markus Armbruster wrote:
> Fam Zheng <famz@redhat.com> writes:
> 
> > On Tue, 06/18 16:18, Markus Armbruster wrote:
> >> Fam Zheng <famz@redhat.com> writes:
> >> 
> >> > On Tue, 06/18 08:32, Kevin Wolf wrote:
> >> >> Am 18.06.2013 um 05:58 hat Fam Zheng geschrieben:
> >> >> > On Mon, 06/17 17:12, Kevin Wolf wrote:
> >> >> > > Am 17.06.2013 um 16:46 hat Paolo Bonzini geschrieben:
> >> >> > > > Il 17/06/2013 16:26, Kevin Wolf ha scritto:
> >> >> > > > > Am 17.06.2013 um 16:01 hat Paolo Bonzini geschrieben:
> >> >> > > > >> Il 17/06/2013 15:52, Kevin Wolf ha scritto:
> >> >> > > > >>> It's not a new thought that we need to change the block
> >> >> > > > >>> layer so that a
> >> >> > > > >>> BlockDriverState can't be "empty", but that one
> >> >> > > > >>> BlockDriverState always
> >> >> > > > >>> refers to one image. If you change media, you attach a different
> >> >> > > > >>> BlockDriverState to the device. Once you have this, you can start
> >> >> > > > >>> refcounting BlockDriverStates, so that the backing file
> >> >> > > > >>> remains usable
> >> >> > > > >>> while the guest device already uses a different image.
> >> >> > > > >>>
> >> >> > > > >>> Not that it's it easy to get there...
> >> >> > > > >>
> >> >> > > > >> I'm not sure that is safe to do.
> >> >> > > > >>
> >> >> > > > >> Consider the case where the guest switches from A to B
> >> >> > > > >> during backup,
> >> >> > > > >> and then from B to A.  You get two BDS for the same file,
> >> >> > > > >> which pretty
> >> >> > > > >> much means havoc.
> >> >> > > > > 
> >> >> > > > > Well, yes, it means that the management tool needs to
> >> >> > > > > know what it's
> >> >> > > > > doing. It shouldn't create a second BDS for A, but
> >> >> > > > > reattach the still
> >> >> > > > > existing one.
> >> >> > > > 
> >> >> > > > How?  That would require the management tool to know the
> >> >> > > > full chain of
> >> >> > > > BDSes that were opened in the past.
> >> >> > > 
> >> >> > > They better know on which files they are operating. It's not like the
> >> >> > > management could be unaware of running backup jobs or things like that.
> >> >> > > 
> >> >> > 
> >> >> > Is there any case that QEMU needs to have two BDS pointing to the same
> >> >> > file?
> >> >> 
> >> >> No, I think there's no case where this would make sense.
> >> >> 
> >> >> > If not, can we try to detect such case  on opening and try to
> >> >> > reuse the bs?
> >> >> 
> >> >> We can't do it reliably, think about symlinks or even hard links, or
> >> >> things like /dev/fdset/..., let alone remote protocols that refer to the
> >> >> same image file etc.
> >> >> 
> >> >> We can check the obvious cases and error out for them, but that's about
> >> >> what we can do. I don't think we should try to fix things automagically
> >> >> when we can't do it right.
> >> >
> >> > It's impossible to know a remote protocol points to the same image with
> >> > local file path, that's not in QEMU's scope, but we have a good chance
> >> > to detect (strcmp with existing bs->filename) and error out Paolo's
> >> > A-B-A problem, don't we?
> >> 
> >> Is comparing bs->filename always a good idea, or only if it's a local
> >> image file?
> >
> > It's never sufficient by comparing filename to tell if they are the
> > same, things can be tricky here, but in many cases it can be helpful,
> > both local and remote.
> 
> Let me rephrase my question.
> 
> We all understand that different bs->filename can alias the same
> resource (which is not necessarily a file).  This makes a "same
> resource" test based on bs->filename incomplete.
> 
> Does identical bs->filename *always* imply same resource?

No, I'm afraid we can't make too much assumption on this.

> 
> If yes, the test is correct but incomplete.  That can be useful.
> 
> If no, the test is incorrect and incomplete, thus useless.
> 
> >> If it's a local file, then comparing names to check for aliasing is
> >> stupid.  Compare device & inode instead.
> >
> > Device and inode is not something to block layer's knowledge, I think.
> 
> They are one stat(2) or fstat(2) away.
> 

-- 
Fam

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2013-06-19  7:08 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1371457366-10993-1-git-send-email-famz@redhat.com>
     [not found] ` <51BED513.3030800@redhat.com>
     [not found]   ` <20130617093241.GA22609@localhost.nay.redhat.com>
     [not found]     ` <51BEDCB9.5090905@redhat.com>
     [not found]       ` <20130617135253.GB3994@dhcp-200-207.str.redhat.com>
     [not found]         ` <51BF16B8.6040801@redhat.com>
     [not found]           ` <20130617142605.GD3994@dhcp-200-207.str.redhat.com>
     [not found]             ` <51BF213F.60601@redhat.com>
     [not found]               ` <20130617151238.GF3994@dhcp-200-207.str.redhat.com>
2013-06-18  3:58                 ` [Qemu-devel] [PATCH] block: add 'backing' option to drive_add Fam Zheng
2013-06-18  6:32                   ` Kevin Wolf
2013-06-18  7:00                     ` Fam Zheng
2013-06-18  7:51                       ` Kevin Wolf
2013-06-18  8:11                         ` Fam Zheng
2013-06-18  8:52                           ` Kevin Wolf
2013-06-18 14:18                       ` Markus Armbruster
2013-06-19  1:17                         ` Fam Zheng
2013-06-19  6:27                           ` Markus Armbruster
2013-06-19  7:08                             ` Fam Zheng
2013-06-18  6:37                   ` Markus Armbruster
2013-06-18  7:06                     ` Fam Zheng
2013-06-18  8:40                     ` Paolo Bonzini
2013-06-18  8:56                       ` Kevin Wolf
2013-06-18  9:11                         ` Paolo Bonzini
2013-06-18  9:12                       ` Fam Zheng

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).