diff mbox series

migration: Truncate state file in xen-save-devices-state

Message ID 20200921094830.114028-1-dovmurik@linux.vnet.ibm.com (mailing list archive)
State New, archived
Headers show
Series migration: Truncate state file in xen-save-devices-state | expand

Commit Message

Dov Murik Sept. 21, 2020, 9:48 a.m. UTC
When running the xen-save-devices-state QMP command, if the filename
already exists it will be truncated before dumping the devices' state
into it.

Signed-off-by: Dov Murik <dovmurik@linux.vnet.ibm.com>
---

Note that I found the above issue while trying to debug
xen-load-devices-state which simply fails (prints "Configuration section
missing" to stderr) directly after xen-save-devices-state (in the same
VM).  I wonder if I should file a bug report as-is or investigate some
more.  Advice welcome.

-Dov

---
 migration/savevm.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Dr. David Alan Gilbert Sept. 21, 2020, 11:17 a.m. UTC | #1
* Dov Murik (dovmurik@linux.vnet.ibm.com) wrote:
> When running the xen-save-devices-state QMP command, if the filename
> already exists it will be truncated before dumping the devices' state
> into it.
> 
> Signed-off-by: Dov Murik <dovmurik@linux.vnet.ibm.com>
> ---

OK, that looks fine to me, so:

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> 
> Note that I found the above issue while trying to debug
> xen-load-devices-state which simply fails (prints "Configuration section
> missing" to stderr) directly after xen-save-devices-state (in the same
> VM).  I wonder if I should file a bug report as-is or investigate some
> more.  Advice welcome.

I don't try the xen-* commands normally; I've cc'ing in Stefano and
Anthony.

Dave

> 
> -Dov
> 
> ---
>  migration/savevm.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/migration/savevm.c b/migration/savevm.c
> index 304d98ff78..e1b26672cc 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -2803,7 +2803,8 @@ void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live,
>      vm_stop(RUN_STATE_SAVE_VM);
>      global_state_store_running();
>  
> -    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT, 0660, errp);
> +    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT | O_TRUNC,
> +                                    0660, errp);
>      if (!ioc) {
>          goto the_end;
>      }
> -- 
> 2.20.1
>
Dov Murik Sept. 21, 2020, 12:28 p.m. UTC | #2
On 21/09/2020 14:17, Dr. David Alan Gilbert wrote:
> * Dov Murik (dovmurik@linux.vnet.ibm.com) wrote:
>> When running the xen-save-devices-state QMP command, if the filename
>> already exists it will be truncated before dumping the devices' state
>> into it.
>>
>> Signed-off-by: Dov Murik <dovmurik@linux.vnet.ibm.com>
>> ---
> 
> OK, that looks fine to me, so:
> 
> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> 
>>
>> Note that I found the above issue while trying to debug
>> xen-load-devices-state which simply fails (prints "Configuration section
>> missing" to stderr) directly after xen-save-devices-state (in the same
>> VM).  I wonder if I should file a bug report as-is or investigate some
>> more.  Advice welcome.
> 
> I don't try the xen-* commands normally; I've cc'ing in Stefano and
> Anthony.

Thanks Dave.  Just to be clear, I'm running this without Xen at all; but
these commands seem to work OK for dumping/restoring guest's devices
state (without RAM) -- if I modify the code to circumvent the mentioned
problem.

Dov

> 
> Dave
> 
>>
>> -Dov
>>
>> ---
>>   migration/savevm.c | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/migration/savevm.c b/migration/savevm.c
>> index 304d98ff78..e1b26672cc 100644
>> --- a/migration/savevm.c
>> +++ b/migration/savevm.c
>> @@ -2803,7 +2803,8 @@ void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live,
>>       vm_stop(RUN_STATE_SAVE_VM);
>>       global_state_store_running();
>>   
>> -    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT, 0660, errp);
>> +    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT | O_TRUNC,
>> +                                    0660, errp);
>>       if (!ioc) {
>>           goto the_end;
>>       }
>> -- 
>> 2.20.1
>>
Dr. David Alan Gilbert Sept. 21, 2020, 5:56 p.m. UTC | #3
* Dov Murik (dovmurik@linux.vnet.ibm.com) wrote:
> 
> 
> On 21/09/2020 14:17, Dr. David Alan Gilbert wrote:
> > * Dov Murik (dovmurik@linux.vnet.ibm.com) wrote:
> > > When running the xen-save-devices-state QMP command, if the filename
> > > already exists it will be truncated before dumping the devices' state
> > > into it.
> > > 
> > > Signed-off-by: Dov Murik <dovmurik@linux.vnet.ibm.com>
> > > ---
> > 
> > OK, that looks fine to me, so:
> > 
> > Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > 
> > > 
> > > Note that I found the above issue while trying to debug
> > > xen-load-devices-state which simply fails (prints "Configuration section
> > > missing" to stderr) directly after xen-save-devices-state (in the same
> > > VM).  I wonder if I should file a bug report as-is or investigate some
> > > more.  Advice welcome.
> > 
> > I don't try the xen-* commands normally; I've cc'ing in Stefano and
> > Anthony.
> 
> Thanks Dave.  Just to be clear, I'm running this without Xen at all; but
> these commands seem to work OK for dumping/restoring guest's devices
> state (without RAM) -- if I modify the code to circumvent the mentioned
> problem.

Yeh, although you can't rely on them not doing something Xen in the
future.  There are a few other similar ways of doing what you want; eg.
if your RAM is 'shared' then you can set the x-ignore-shared migration
capability.

Dave

> Dov
> 
> > 
> > Dave
> > 
> > > 
> > > -Dov
> > > 
> > > ---
> > >   migration/savevm.c | 3 ++-
> > >   1 file changed, 2 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/migration/savevm.c b/migration/savevm.c
> > > index 304d98ff78..e1b26672cc 100644
> > > --- a/migration/savevm.c
> > > +++ b/migration/savevm.c
> > > @@ -2803,7 +2803,8 @@ void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live,
> > >       vm_stop(RUN_STATE_SAVE_VM);
> > >       global_state_store_running();
> > > -    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT, 0660, errp);
> > > +    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT | O_TRUNC,
> > > +                                    0660, errp);
> > >       if (!ioc) {
> > >           goto the_end;
> > >       }
> > > -- 
> > > 2.20.1
> > > 
>
Stefano Stabellini Sept. 21, 2020, 11:46 p.m. UTC | #4
Adding Paul


On Mon, 21 Sep 2020, Dr. David Alan Gilbert wrote:
> * Dov Murik (dovmurik@linux.vnet.ibm.com) wrote:
> > 
> > 
> > On 21/09/2020 14:17, Dr. David Alan Gilbert wrote:
> > > * Dov Murik (dovmurik@linux.vnet.ibm.com) wrote:
> > > > When running the xen-save-devices-state QMP command, if the filename
> > > > already exists it will be truncated before dumping the devices' state
> > > > into it.
> > > > 
> > > > Signed-off-by: Dov Murik <dovmurik@linux.vnet.ibm.com>
> > > > ---
> > > 
> > > OK, that looks fine to me, so:
> > > 
> > > Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > > 
> > > > 
> > > > Note that I found the above issue while trying to debug
> > > > xen-load-devices-state which simply fails (prints "Configuration section
> > > > missing" to stderr) directly after xen-save-devices-state (in the same
> > > > VM).  I wonder if I should file a bug report as-is or investigate some
> > > > more.  Advice welcome.
> > > 
> > > I don't try the xen-* commands normally; I've cc'ing in Stefano and
> > > Anthony.
> > 
> > Thanks Dave.  Just to be clear, I'm running this without Xen at all; but
> > these commands seem to work OK for dumping/restoring guest's devices
> > state (without RAM) -- if I modify the code to circumvent the mentioned
> > problem.
> 
> Yeh, although you can't rely on them not doing something Xen in the
> future.  There are a few other similar ways of doing what you want; eg.
> if your RAM is 'shared' then you can set the x-ignore-shared migration
> capability.
> 
> Dave
> 
> > Dov
> > 
> > > 
> > > Dave
> > > 
> > > > 
> > > > -Dov
> > > > 
> > > > ---
> > > >   migration/savevm.c | 3 ++-
> > > >   1 file changed, 2 insertions(+), 1 deletion(-)
> > > > 
> > > > diff --git a/migration/savevm.c b/migration/savevm.c
> > > > index 304d98ff78..e1b26672cc 100644
> > > > --- a/migration/savevm.c
> > > > +++ b/migration/savevm.c
> > > > @@ -2803,7 +2803,8 @@ void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live,
> > > >       vm_stop(RUN_STATE_SAVE_VM);
> > > >       global_state_store_running();
> > > > -    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT, 0660, errp);
> > > > +    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT | O_TRUNC,
> > > > +                                    0660, errp);
> > > >       if (!ioc) {
> > > >           goto the_end;
> > > >       }
> > > > -- 
> > > > 2.20.1
> > > > 
> > 
> -- 
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
>
Dr. David Alan Gilbert Sept. 23, 2020, 6:59 p.m. UTC | #5
* Dr. David Alan Gilbert (dgilbert@redhat.com) wrote:
> * Dov Murik (dovmurik@linux.vnet.ibm.com) wrote:
> > When running the xen-save-devices-state QMP command, if the filename
> > already exists it will be truncated before dumping the devices' state
> > into it.
> > 
> > Signed-off-by: Dov Murik <dovmurik@linux.vnet.ibm.com>
> > ---
> 
> OK, that looks fine to me, so:
> 
> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

Queued

> > 
> > Note that I found the above issue while trying to debug
> > xen-load-devices-state which simply fails (prints "Configuration section
> > missing" to stderr) directly after xen-save-devices-state (in the same
> > VM).  I wonder if I should file a bug report as-is or investigate some
> > more.  Advice welcome.
> 
> I don't try the xen-* commands normally; I've cc'ing in Stefano and
> Anthony.
> 
> Dave
> 
> > 
> > -Dov
> > 
> > ---
> >  migration/savevm.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/migration/savevm.c b/migration/savevm.c
> > index 304d98ff78..e1b26672cc 100644
> > --- a/migration/savevm.c
> > +++ b/migration/savevm.c
> > @@ -2803,7 +2803,8 @@ void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live,
> >      vm_stop(RUN_STATE_SAVE_VM);
> >      global_state_store_running();
> >  
> > -    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT, 0660, errp);
> > +    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT | O_TRUNC,
> > +                                    0660, errp);
> >      if (!ioc) {
> >          goto the_end;
> >      }
> > -- 
> > 2.20.1
> > 
> -- 
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
> 
>
Zhijian Li (Fujitsu)" via Sept. 28, 2020, 4:46 p.m. UTC | #6
On Mon, Sep 21, 2020 at 12:17:23PM +0100, Dr. David Alan Gilbert wrote:
> * Dov Murik (dovmurik@linux.vnet.ibm.com) wrote:
> > When running the xen-save-devices-state QMP command, if the filename
> > already exists it will be truncated before dumping the devices' state
> > into it.
> > 
> > Signed-off-by: Dov Murik <dovmurik@linux.vnet.ibm.com>
> > ---
> >  migration/savevm.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/migration/savevm.c b/migration/savevm.c
> > index 304d98ff78..e1b26672cc 100644
> > --- a/migration/savevm.c
> > +++ b/migration/savevm.c
> > @@ -2803,7 +2803,8 @@ void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live,
> >      vm_stop(RUN_STATE_SAVE_VM);
> >      global_state_store_running();
> >  
> > -    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT, 0660, errp);
> > +    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT | O_TRUNC,
> > +                                    0660, errp);
> >      if (!ioc) {
> >          goto the_end;
> >      }

Hi Marek,

Do you know if the above patch is going to work in a linux stubdomain?
Can we truncate the "save file" which seems to be stubdomain's console 1?

Cheers,
Marek Marczykowski-Górecki Sept. 28, 2020, 10:47 p.m. UTC | #7
On Mon, Sep 28, 2020 at 05:46:18PM +0100, Anthony PERARD wrote:
> On Mon, Sep 21, 2020 at 12:17:23PM +0100, Dr. David Alan Gilbert wrote:
> > * Dov Murik (dovmurik@linux.vnet.ibm.com) wrote:
> > > When running the xen-save-devices-state QMP command, if the filename
> > > already exists it will be truncated before dumping the devices' state
> > > into it.
> > > 
> > > Signed-off-by: Dov Murik <dovmurik@linux.vnet.ibm.com>
> > > ---
> > >  migration/savevm.c | 3 ++-
> > >  1 file changed, 2 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/migration/savevm.c b/migration/savevm.c
> > > index 304d98ff78..e1b26672cc 100644
> > > --- a/migration/savevm.c
> > > +++ b/migration/savevm.c
> > > @@ -2803,7 +2803,8 @@ void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live,
> > >      vm_stop(RUN_STATE_SAVE_VM);
> > >      global_state_store_running();
> > >  
> > > -    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT, 0660, errp);
> > > +    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT | O_TRUNC,
> > > +                                    0660, errp);
> > >      if (!ioc) {
> > >          goto the_end;
> > >      }
> 
> Hi Marek,
> 
> Do you know if the above patch is going to work in a linux stubdomain?
> Can we truncate the "save file" which seems to be stubdomain's console 1?

No, truncate won't work on the stubdomain's console. I mean, the
operation won't fail, but the actual file connected to the console on
the other end won't get truncated. But I think in case of stubdomain,
toolstack should connect the console to an empty file, so it shouldn't
be a problem.
diff mbox series

Patch

diff --git a/migration/savevm.c b/migration/savevm.c
index 304d98ff78..e1b26672cc 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -2803,7 +2803,8 @@  void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live,
     vm_stop(RUN_STATE_SAVE_VM);
     global_state_store_running();
 
-    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT, 0660, errp);
+    ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT | O_TRUNC,
+                                    0660, errp);
     if (!ioc) {
         goto the_end;
     }