]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuOpenFile: Don't force chown on NFS
authorMichal Privoznik <mprivozn@redhat.com>
Wed, 11 Apr 2012 09:13:40 +0000 (11:13 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 12 Apr 2012 11:53:38 +0000 (13:53 +0200)
If dynamic_ownership is off and we are creating a file on NFS
we force chown. This will fail as chown/chmod are not supported
on NFS. However, with no dynamic_ownership we are not required
to do any chown.

src/qemu/qemu_driver.c

index d37b990c8dc8ff9a1cd52072509f272340018341..65ed290c12b25a8e22484932ae098c88ffa996eb 100644 (file)
@@ -2429,6 +2429,7 @@ qemuOpenFile(struct qemud_driver *driver, const char *path, int oflags,
     bool bypass_security = false;
     unsigned int vfoflags = 0;
     int fd = -1;
+    int path_shared = virStorageFileIsSharedFS(path);
     uid_t uid = getuid();
     gid_t gid = getgid();
 
@@ -2437,7 +2438,12 @@ qemuOpenFile(struct qemud_driver *driver, const char *path, int oflags,
      * in the failure case */
     if (oflags & O_CREAT) {
         need_unlink = true;
-        vfoflags |= VIR_FILE_OPEN_FORCE_OWNER;
+
+        /* Don't force chown on network-shared FS
+         * as it is likely to fail. */
+        if (path_shared <= 0 || driver->dynamicOwnership)
+            vfoflags |= VIR_FILE_OPEN_FORCE_OWNER;
+
         if (stat(path, &sb) == 0) {
             is_reg = !!S_ISREG(sb.st_mode);
             /* If the path is regular file which exists
@@ -2475,7 +2481,7 @@ qemuOpenFile(struct qemud_driver *driver, const char *path, int oflags,
             }
 
             /* On Linux we can also verify the FS-type of the directory. */
-            switch (virStorageFileIsSharedFS(path)) {
+            switch (path_shared) {
                 case 1:
                    /* it was on a network share, so we'll continue
                     * as outlined above