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