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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list