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;
|
||||
}
|
||||
|
||||
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
|
||||
* 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;
|
||||
strList *list;
|
||||
FsMountList mounts;
|
||||
struct FsMount *mount;
|
||||
Error *local_err = NULL;
|
||||
@ -741,6 +749,19 @@ int64_t qmp_guest_fsfreeze_freeze(Error **errp)
|
||||
ga_set_frozen(ga_state);
|
||||
|
||||
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);
|
||||
if (fd == -1) {
|
||||
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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
error_set(errp, QERR_UNSUPPORTED);
|
||||
|
@ -206,6 +206,15 @@ error:
|
||||
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.
|
||||
*/
|
||||
|
@ -386,6 +386,23 @@
|
||||
{ 'command': 'guest-fsfreeze-freeze',
|
||||
'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:
|
||||
#
|
||||
|
Loading…
Reference in New Issue
Block a user