mirror of https://github.com/xqemu/xqemu.git
qga: Add guest-fsfreeze-freeze-list command
If an array of mount point paths is specified as 'mountpoints' argument of guest-fsfreeze-freeze-list, qemu-ga will only freeze the file systems mounted on specified paths in Linux guests. Otherwise, it works as the same way as guest-fsfreeze-freeze. This would be useful when the host wants to create partial disk snapshots. Signed-off-by: Tomoki Sekiyama <tomoki.sekiyama@hds.com> Reviewed-by: Eric Blake <eblake@redhat.com> *updated schema to report 2.2 as initial supported version Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
parent
2ee55b8351
commit
e99bce2021
|
@ -710,13 +710,21 @@ GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **errp)
|
||||||
return GUEST_FSFREEZE_STATUS_THAWED;
|
return GUEST_FSFREEZE_STATUS_THAWED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t qmp_guest_fsfreeze_freeze(Error **errp)
|
||||||
|
{
|
||||||
|
return qmp_guest_fsfreeze_freeze_list(false, NULL, errp);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Walk list of mounted file systems in the guest, and freeze the ones which
|
* Walk list of mounted file systems in the guest, and freeze the ones which
|
||||||
* are real local file systems.
|
* are real local file systems.
|
||||||
*/
|
*/
|
||||||
int64_t qmp_guest_fsfreeze_freeze(Error **errp)
|
int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints,
|
||||||
|
strList *mountpoints,
|
||||||
|
Error **errp)
|
||||||
{
|
{
|
||||||
int ret = 0, i = 0;
|
int ret = 0, i = 0;
|
||||||
|
strList *list;
|
||||||
FsMountList mounts;
|
FsMountList mounts;
|
||||||
struct FsMount *mount;
|
struct FsMount *mount;
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
@ -741,6 +749,19 @@ int64_t qmp_guest_fsfreeze_freeze(Error **errp)
|
||||||
ga_set_frozen(ga_state);
|
ga_set_frozen(ga_state);
|
||||||
|
|
||||||
QTAILQ_FOREACH_REVERSE(mount, &mounts, FsMountList, next) {
|
QTAILQ_FOREACH_REVERSE(mount, &mounts, FsMountList, next) {
|
||||||
|
/* To issue fsfreeze in the reverse order of mounts, check if the
|
||||||
|
* mount is listed in the list here */
|
||||||
|
if (has_mountpoints) {
|
||||||
|
for (list = mountpoints; list; list = list->next) {
|
||||||
|
if (strcmp(list->value, mount->dirname) == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!list) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fd = qemu_open(mount->dirname, O_RDONLY);
|
fd = qemu_open(mount->dirname, O_RDONLY);
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
error_setg_errno(errp, errno, "failed to open %s", mount->dirname);
|
error_setg_errno(errp, errno, "failed to open %s", mount->dirname);
|
||||||
|
@ -1474,6 +1495,15 @@ int64_t qmp_guest_fsfreeze_freeze(Error **errp)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints,
|
||||||
|
strList *mountpoints,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
error_set(errp, QERR_UNSUPPORTED);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int64_t qmp_guest_fsfreeze_thaw(Error **errp)
|
int64_t qmp_guest_fsfreeze_thaw(Error **errp)
|
||||||
{
|
{
|
||||||
error_set(errp, QERR_UNSUPPORTED);
|
error_set(errp, QERR_UNSUPPORTED);
|
||||||
|
|
|
@ -206,6 +206,15 @@ error:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t qmp_guest_fsfreeze_freeze_list(bool has_mountpoints,
|
||||||
|
strList *mountpoints,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
error_set(errp, QERR_UNSUPPORTED);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Thaw local file systems using Volume Shadow-copy Service.
|
* Thaw local file systems using Volume Shadow-copy Service.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -386,6 +386,23 @@
|
||||||
{ 'command': 'guest-fsfreeze-freeze',
|
{ 'command': 'guest-fsfreeze-freeze',
|
||||||
'returns': 'int' }
|
'returns': 'int' }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @guest-fsfreeze-freeze-list:
|
||||||
|
#
|
||||||
|
# Sync and freeze specified guest filesystems
|
||||||
|
#
|
||||||
|
# @mountpoints: #optional an array of mountpoints of filesystems to be frozen.
|
||||||
|
# If omitted, every mounted filesystem is frozen.
|
||||||
|
#
|
||||||
|
# Returns: Number of file systems currently frozen. On error, all filesystems
|
||||||
|
# will be thawed.
|
||||||
|
#
|
||||||
|
# Since: 2.2
|
||||||
|
##
|
||||||
|
{ 'command': 'guest-fsfreeze-freeze-list',
|
||||||
|
'data': { '*mountpoints': ['str'] },
|
||||||
|
'returns': 'int' }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @guest-fsfreeze-thaw:
|
# @guest-fsfreeze-thaw:
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue