From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34411) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WnTUZ-0005FZ-Gb for qemu-devel@nongnu.org; Thu, 22 May 2014 09:57:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WnTUS-000731-Hm for qemu-devel@nongnu.org; Thu, 22 May 2014 09:57:07 -0400 Received: from usindpps04.hds.com ([207.126.252.17]:49820) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WnTUS-00072t-DL for qemu-devel@nongnu.org; Thu, 22 May 2014 09:57:00 -0400 From: Tomoki Sekiyama Date: Thu, 22 May 2014 09:56:53 -0400 Message-ID: <20140522135653.6110.79891.stgit@hds.com> In-Reply-To: <20140522135641.6110.28511.stgit@hds.com> References: <20140522135641.6110.28511.stgit@hds.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH v3 1/2] qga: Add 'mountpoints' argument to guest-fsfreeze-freeze command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: mitsuhiro.tanino@hds.com, mdroth@linux.vnet.ibm.com When an array of mount point paths is specified as 'mountpoints' argument of guest-fsfreeze-freeze, qemu-ga with this patch will only freeze the file systems mounted on specified paths in Linux. This would be useful when the host wants to create partial disk snapshots. Signed-off-by: Tomoki Sekiyama --- qga/commands-posix.c | 17 ++++++++++++++++- qga/commands-win32.c | 3 ++- qga/qapi-schema.json | 4 ++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 34ddba0..771f00c 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -714,9 +714,11 @@ GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **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(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 +743,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); diff --git a/qga/commands-win32.c b/qga/commands-win32.c index d793dd0..0c6296d 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -171,7 +171,8 @@ GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **errp) * Freeze local file systems using Volume Shadow-copy Service. * The frozen state is limited for up to 10 seconds by VSS. */ -int64_t qmp_guest_fsfreeze_freeze(Error **errp) +int64_t qmp_guest_fsfreeze_freeze(bool has_mountpoints, strList *mountpoints, + Error **errp) { int i; Error *local_err = NULL; diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json index a8cdcb3..31c0dc8 100644 --- a/qga/qapi-schema.json +++ b/qga/qapi-schema.json @@ -378,12 +378,16 @@ # # Sync and freeze all freezable, local guest filesystems # +# @mountpoints: #optional an array of mountpoints of filesystems to be frozen. +# If omitted, every mounted filesystem is frozen. (Since: 2.1) +# # Returns: Number of file systems currently frozen. On error, all filesystems # will be thawed. # # Since: 0.15.0 ## { 'command': 'guest-fsfreeze-freeze', + 'data': { '*mountpoints': ['str'] }, 'returns': 'int' } ##