]> xenbits.xensource.com Git - libvirt.git/commitdiff
Set specific flags for glusterfs fs mounts
authorHarshavardhana <harsha@gluster.com>
Tue, 21 Jul 2009 15:49:20 +0000 (17:49 +0200)
committerDaniel Veillard <veillard@redhat.com>
Tue, 21 Jul 2009 15:49:20 +0000 (17:49 +0200)
* src/storage_backend_fs.c: due to Fuse O_DIRECT problem one need
  to mount glusterfs with direct-IO mode, until fixed

src/storage_backend_fs.c

index 8cfc462f29222ff2ae8909aebda63d4c1676bc68..ea7625db490f123fc7e4a27f21e31eacc5ab9ac2 100644 (file)
@@ -598,6 +598,7 @@ static int
 virStorageBackendFileSystemMount(virConnectPtr conn,
                                  virStoragePoolObjPtr pool) {
     char *src;
+    char *options;
     const char **mntargv;
 
     /* 'mount -t auto' doesn't seem to auto determine nfs (or cifs),
@@ -605,6 +606,10 @@ virStorageBackendFileSystemMount(virConnectPtr conn,
      *  accommodate this */
     int netauto = (pool->def->type == VIR_STORAGE_POOL_NETFS &&
                    pool->def->source.format == VIR_STORAGE_POOL_NETFS_AUTO);
+    int glusterfs = (pool->def->type == VIR_STORAGE_POOL_NETFS &&
+                 pool->def->source.format == VIR_STORAGE_POOL_NETFS_GLUSTERFS);
+
+    int option_index;
     int source_index;
 
     const char *netfs_auto_argv[] = {
@@ -626,9 +631,26 @@ virStorageBackendFileSystemMount(virConnectPtr conn,
         NULL,
     };
 
+    const char *glusterfs_argv[] = {
+        MOUNT,
+        "-t",
+        pool->def->type == VIR_STORAGE_POOL_FS ?
+        virStoragePoolFormatFileSystemTypeToString(pool->def->source.format) :
+        virStoragePoolFormatFileSystemNetTypeToString(pool->def->source.format),
+        NULL,
+        "-o",
+        NULL,
+        pool->def->target.path,
+        NULL,
+    };
+
     if (netauto) {
         mntargv = netfs_auto_argv;
         source_index = 1;
+    } else if (glusterfs) {
+        mntargv = glusterfs_argv;
+        source_index = 3;
+        option_index = 5;
     } else {
         mntargv = fs_argv;
         source_index = 3;
@@ -664,6 +686,12 @@ virStorageBackendFileSystemMount(virConnectPtr conn,
     }
 
     if (pool->def->type == VIR_STORAGE_POOL_NETFS) {
+        if (pool->def->source.format = VIR_STORAGE_POOL_NETFS_GLUSTERFS) {
+            if (virAsprintf(&options, "direct-io-mode=1") == -1) {
+                virReportOOMError(conn);
+                return -1;
+            }
+        }
         if (virAsprintf(&src, "%s:%s",
                         pool->def->source.host.name,
                         pool->def->source.dir) == -1) {
@@ -679,6 +707,10 @@ virStorageBackendFileSystemMount(virConnectPtr conn,
     }
     mntargv[source_index] = src;
 
+    if (glusterfs) {
+        mntargv[option_index] = options;
+    }
+
     if (virRun(conn, mntargv, NULL) < 0) {
         VIR_FREE(src);
         return -1;