[libvirt] [PATCHv2 3/4] use virStorageFileIsSharedFS utility function in qemudDomainSaveFlag
Daniel P. Berrange
berrange at redhat.com
Mon Jun 28 15:45:24 UTC 2010
On Fri, Jun 25, 2010 at 01:22:16PM -0400, Laine Stump wrote:
> Previously, this function had it's own bit of code performing the same
> function. Since there's now an equivalent utility function, let's use it.
> ---
> src/qemu/qemu_driver.c | 83 +++++++++++++----------------------------------
> 1 files changed, 23 insertions(+), 60 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 9140b50..b248fdb 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -46,13 +46,6 @@
> #include <sys/ioctl.h>
> #include <sys/un.h>
>
> -#ifdef __linux__
> -# include <sys/vfs.h>
> -# ifndef NFS_SUPER_MAGIC
> -# define NFS_SUPER_MAGIC 0x6969
> -# endif /* NFS_SUPER_MAGIC */
> -#endif /* __linux__ */
> -
> #include "virterror_internal.h"
> #include "logging.h"
> #include "datatypes.h"
> @@ -5069,62 +5062,32 @@ static int qemudDomainSaveFlag(virDomainPtr dom, const char *path,
> goto endjob;
> }
>
> -#ifdef __linux__
> /* On Linux we can also verify the FS-type of the directory. */
> - char *dirpath, *p;
> - struct statfs st;
> - int statfs_ret;
> -
> - if ((dirpath = strdup(path)) == NULL) {
> - virReportOOMError();
> - goto endjob;
> - }
> -
> - do {
> - // Try less and less of the path until we get to a
> - // directory we can stat. Even if we don't have 'x'
> - // permission on any directory in the path on the NFS
> - // server (assuming it's NFS), we will be able to stat the
> - // mount point, and that will properly tell us if the
> - // fstype is NFS.
> -
> - if ((p = strrchr(dirpath, '/')) == NULL) {
> - qemuReportError(VIR_ERR_INVALID_ARG,
> - _("Invalid relative path '%s' for domain save file"),
> - path);
> - VIR_FREE(dirpath);
> - goto endjob;
> - }
> -
> - if (p == dirpath)
> - *(p+1) = '\0';
> - else
> - *p = '\0';
> -
> - statfs_ret = statfs(dirpath, &st);
> -
> - } while ((statfs_ret == -1) && (p != dirpath));
> -
> - if (statfs_ret == -1) {
> - virReportSystemError(errno,
> - _("Failed to create domain save file "
> - "'%s': statfs of all elements of path "
> - "failed"),
> - path);
> - VIR_FREE(dirpath);
> - goto endjob;
> - }
> + switch (virStorageFileIsSharedFS(path)) {
> + case 1:
> + /* it was on a network share, so we'll continue
> + * as outlined above
> + */
> + break;
> +
> + case -1:
> + virReportSystemError(errno,
> + _("Failed to create domain save file "
> + "'%s': couldn't determine fs type"),
> + path);
> + goto endjob;
> + break;
> +
> + case 0:
> + default:
> + /* local file - log the error returned by virFileOperation */
> + virReportSystemError(rc,
> + _("Failed to create domain save file '%s'"),
> + path);
> + goto endjob;
> + break;
>
> - if (st.f_type != NFS_SUPER_MAGIC) {
> - virReportSystemError(rc,
> - _("Failed to create domain save file '%s'"
> - " (fstype of '%s' is 0x%X"),
> - path, dirpath, (unsigned int) st.f_type);
> - VIR_FREE(dirpath);
> - goto endjob;
> }
> - VIR_FREE(dirpath);
> -#endif
>
> /* Retry creating the file as driver->user */
ACK
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list